Implemented fallocate() syscall in streams
| From: | Julien Pauli | Date: | Fri, 13 Jun 2014 14:20:03 +0000 |
| Subject: | Implemented fallocate() syscall in streams | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-74886@lists.php.net to get a copy of this message | ||
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 ?
Julien Pauli