Hi,

    while looking at the strace output of readfile() in a CGI
    context, I noticed that the CGI code (a) uses stdio and (b)
    that it only outputs chunks with a maximum size of 16KB.

    The effect is clearly visible (reproducible, both tests were
    run with a warmed-up cache):

    $ time ./php-mmap-fwrite ./script >/dev/null
    2.75user 0.47system 0:03.22elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
    0inputs+0outputs (244391major+65minor)pagefaults 0swaps

    $ time ./php-mmap-write ./script >/dev/null
    0.03user 0.01system 0:00.04elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
    0inputs+0outputs (284major+64minor)pagefaults 0swaps

    E.g. using write() is about 80 times faster on Linux than the
    limited fwrite() version.

    fwrite() was probably chosen because it is a standardized
    function and is expected to work everywhere.  So, what we
    would need to do is to add a check whether write() works on
    the system before using it.

    Are there any objections to such a change?

    - Sascha                                     Experience IRCG
      http://schumann.cx/                http://schumann.cx/ircg
<?

$a = "/dir/with/hugefiles";

$d = opendir($a);

for ($i = 0; $i < 20; $i++) {
        rewinddir($d);
        while(($f = readdir($d)) !== false) {
                readfile($a."/".$f);
        }
}

closedir($d);
-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to