Answer the question
In order to leave comments, you need to log in
Why can PHP file operations be slow?
There is a site on Bitrix on Dedicated. When testing, in particular, it gives the following picture:
As you can see, it's not a fountain. However, if you test the disk speed:
[email protected] ~# hdparm -t /dev/md126
/dev/md126:
Timing buffered disk reads: 2532 MB in 3.00 seconds = 843.80 MB/sec
[email protected] ~# sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync
1024+0 записей получено
1024+0 записей отправлено
скопировано 1073741824 байта (1,1 GB), 0,672519 c, 1,6 GB/c
<?
function getmicrotime()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$res = array();
$file_name = __DIR__."/../upload/perfmon#i#.php";
$content = "<?\$s='".str_repeat("x", 1024)."';?><?/*".str_repeat("y", 1024)."*/?><?\$r='".str_repeat("z", 1024)."';?>";
for ($j = 0; $j < 4; $j++)
{
$s1 = getmicrotime();
for ($i = 0; $i < 100; $i++)
{
$fn = str_replace("#i#", $i, $file_name);
}
$e1 = getmicrotime();
$N1 = $e1 - $s1;
$s2 = getmicrotime();
for ($i = 0; $i < 100; $i++)
{
//This is one op
$fn = str_replace("#i#", $i, $file_name);
$fh = fopen($fn, "wb");
fwrite($fh, $content);
fclose($fh);
include($fn);
unlink($fn);
}
$e2 = getmicrotime();
$N2 = $e2 - $s2;
if ($N2 > $N1)
$res[] = 100 / ($N2 - $N1);
}
if (count($res))
echo array_sum($res) / doubleval(count($res));
else
echo 0;
Answer the question
In order to leave comments, you need to log in
I asked myself, I answer myself:
The nesting of the site's document root greatly affects the test result, since when open, the lstat system call is called recursively for the entire path if the file does not exist. More details: https://www.linux.org.ru/forum/web-development/164...
Thus, it makes no sense to rely on the data of this test, since the site rarely creates non-existent files, except perhaps when creating cache files. The include statement is not affected by this problem and nesting has no meaning with it. So it makes no sense to move the document root higher in the file system tree.
Faced such a situation, / dev / md sagged a lot in iops performance. The problem can be fixed by installing a hardware raid controller.
The obvious solution is to see how the Bitrix gets this value.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question