Цитата(BarsMonster @ 17.04.2010, 20:36)
Лично мне не вполне понятно, как могут 50 процессов быть быстрее 5, если у нас одно физическое ядро (по крайней мере пока процессы не блокируются медленным I/O). От бОльшого кол-ва процессов только потери на лишние переключение контекста и сброс L1/L2 кешей...
Опять же, ab не тестирует "латентность" - он долбит во много потоков, и фактически тестируется именно производительность.
Э. Причем здесь потоки?
Есть mod_php. На единичном запросе он быстрее, чем php-fpm (не всегда, но сейчас это не важно). Но потребляет ресурсов X.
Есть php-fpm. На единичном запросе он медленнее, чем mod_php, но потребляет ресурсов X-0.5 (цифра с потолка).
Соответственно, пока X*(количество_потоков)<totalresouce - mod_php будет таки быстрее. Когда X*(количество_потоков)=>totalresouce - возникнет нехватка ресурсов. Соответственно, новые запросы не будут обрабатываться\будут вставать в очередь\сервер начнет свопить и все станет грустно.
Засчет этого на равном железе смогут обслуживаться 50 запросов в минуту mod_php или 100 запросов в минуту php-fpm. Следовательно, время от момента принятия запроса до его исполнения на таком сервере при числе запросов >50 будет наименьшим в варианте с php_fpm, хотя чистое время отработки PHP в этой ситуации у mod_php - меньше.
Все цифры - с потолка и для демонстрации логики.
Цитата
Лично мне не вполне понятно, как могут 50 процессов быть быстрее 5, если у нас одно физическое ядро (по крайней мере пока процессы не блокируются медленным I/O). От бОльшого кол-ва процессов только потери на лишние переключение контекста и сброс L1/L2 кешей...
Что вы хотите этим сказать?
Помимо процессора есть и другие ресурсы, если что. Это было бы верно в идеальной ситуации, когда каждый поток использует только CPU, а сети, памяти и I\O у нас нет вообще.
Пример. У нас жесткое ограничение на 4 конкурентных запроса.
Пришли 4 человека. Они сидят через GPRS. Им нужно отдать 1МБ информации. Пока они ее сосут (медленно) приходит пятый. Он вынужден ждать в очереди, пока хотя-бы один из четырех отвалится и "уступит место". Соответственно, свои данные он получит гораздо позже, чем получил бы при 5 разрешенных конкурентах. Так? Так. Хотя количество физических ядер у нас не поменялось.
Аналогично произойдет, если один поток пишет на диск (к примеру) или дергает медленную базу, а другим потокам это не нужно, они отдают картинки. И т.д. и т.п. Смотреть надо профиль конкретной нагрузки.
Вообще, вы тестируете что-то сферическое и в вакууме, как я уже и говорил.