Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:75333 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 19238 invoked from network); 8 Jul 2014 09:07:44 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 8 Jul 2014 09:07:44 -0000 Authentication-Results: pb1.pair.com smtp.mail=julienpauli@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=julienpauli@gmail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.220.178 as permitted sender) X-PHP-List-Original-Sender: julienpauli@gmail.com X-Host-Fingerprint: 209.85.220.178 mail-vc0-f178.google.com Received: from [209.85.220.178] ([209.85.220.178:34647] helo=mail-vc0-f178.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 60/00-19184-FD4BBB35 for ; Tue, 08 Jul 2014 05:07:44 -0400 Received: by mail-vc0-f178.google.com with SMTP id ij19so5124805vcb.37 for ; Tue, 08 Jul 2014 02:07:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc:content-type; bh=YI9Nu7TH9jConPDAJEeRwDTaBxG1FH2zb8VixSnGb/Q=; b=nMmeOTeh34cEeZ1IO0wIHWR2zmzQ26v0BVY6ZQeBMvpXcXFgxDz3IYCHurbtlMn82T Ml9Uw5O7S3WAJSMtEn0MyxDU48AdaGCWcLT9cFswjk5qtLnW7+BQr7/xlf3oD4e4dAEc PgQacThA+0KVjnRvYU6nLuCIVRKogiyTDtBRp0MtySYAlRYTXZLK6A/dJOzskhh7D13G kbFUa8p29mQTog7NKiIorPUCqmrch/LfOdTDmUwjCBRHWgs9UOtFZx00fl1teWqEIodo EJcKcXKEoSAJyFkPbTahq0iSJU/ZYM2ySTTQOGtrOQypodkq4qn22Rp/I5KGIHA5D19W NnoA== X-Received: by 10.220.250.203 with SMTP id mp11mr32626575vcb.2.1404810460556; Tue, 08 Jul 2014 02:07:40 -0700 (PDT) MIME-Version: 1.0 Sender: julienpauli@gmail.com Received: by 10.220.81.68 with HTTP; Tue, 8 Jul 2014 02:07:00 -0700 (PDT) In-Reply-To: <39a433499b80ad70849e642f9e355167.squirrel@webmail.klapt.com> References: <39a433499b80ad70849e642f9e355167.squirrel@webmail.klapt.com> Date: Tue, 8 Jul 2014 11:07:00 +0200 X-Google-Sender-Auth: sfUKrZQ8MuIK4SeJcO4EjzKx2ZU Message-ID: To: Anatol Belski Cc: PHP Internals Content-Type: text/plain; charset=UTF-8 Subject: Re: [PHP-DEV] Implemented fallocate() syscall in streams From: jpauli@php.net (Julien Pauli) On Tue, Jul 8, 2014 at 8:42 AM, Anatol Belski wrote: > Hi Julien, > > On Fri, June 13, 2014 16:20, Julien Pauli wrote: >> Hi, >> >> >> I just wrote a patch to add fallocate() syscall support for streams. >> It relies on posix_fallocate(), so that it should support many Unixes. >> Linux's got a specification with a fallocate() function, more powerful >> than the posix call. >> >> fallocate() does write blocks to the underlying filesystem (not so many >> are supported, but the ones not supported should proxy to ftruncate()) and >> prevents sparse file creation whereas ftruncate() just updates inode >> information, leading to possible future out of space errors. >> >> I got a POC showing the diffs between both calls here : >> https://gist.github.com/jpauli/8afec7c4fc2b38f8ff27 >> >> >> I propose two APIs for PHP : >> - One that adds a function : fallocate() >> https://github.com/jpauli/php-src/tree/fallocate >> >> >> - One that relies on ftruncate() , and adds a $use_fallocate >> flag https://github.com/jpauli/php-src/tree/fallocate_flag >> >> Please, note that the latest proposal requires patches in different >> extensions, as I changed a PHP_API function signature. >> >> I don't know if Windows can support that. Pierre, Anatol ? :-) >> >> >> Tests are beeing written at the moment. >> >> >> I didn't implement this is user stream handlers, as this really is a >> low level implementation design that is kind of useless for usage in user >> streams. >> >> Thoughts ? >> > I've found this code > > http://hg.mozilla.org/mozilla-central/file/3d846420a907/xpcom/glue/FileUtils.cpp#l61 > > On windows there's no such syscalls. All the data is however buffered, as > usual. An emulation could be of course implemented for Windows and other > unsupported platforms. However it probably wouldn't mimic the exact > behavior. > > But besides writing in blocks (fallocate) and fast truncating - there are > some other useful things i see on the man page. I mean checking for the > free space or all those flags like zeroing file space. Actually, maybe > it'd be even more useful to put it into user space, maybe as normal > functions? Otherwise, if you think it's too low level, one could go two > ways - ether implement an emulation, or just use HAVE_FALLOCATE and a > configure switch to activate it manually. You talk about fallocate() function. My patch is based on posix_fallocate() call, which doesn' implement all those (interesting) flags. fallocate() is Linux only , that's why we can't rely on it and can't publish it in user land. And for Windows, I guess we could write a compat implementation (like the mozilla one), but it anyway won't do the same job Julien.P