On Tue, Jul 8, 2014 at 8:42 AM, Anatol Belski <anatol....@belski.net> 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 <bool>$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

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to