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