Я пытаюсь повысить производительность своей системы lighttpd, используя SMP-воркеры для нескольких ядер. Оказывается, вместо повышения производительности он ухудшает ее. Кажется, я не понимаю, почему это так.
В документация ПРЕТЕНЗИИ о том, что он должен линейно масштабироваться с количеством ядер / процессоров, когда примерно вдвое больше рабочих SMP настроено как количество ядер. Я провел тестирование для соотношения основных ресурсов и рабочих 1:1
и 1:2
.
Я сравниваю это с ab
. В моей установке 4 виртуальных ядра.
Вот результаты теста, выполненного с небольшим размером документа
ab -n 10000 -c 50 http://localhost/index.html
1. Default(no smp workers)
Requests per second: 3581.99 [#/sec] (mean)
Time per request: 13.959 [ms] (mean)
Time per request: 0.279 [ms] (mean, across all concurrent requests)
Transfer rate: 1518.15 [Kbytes/sec] received
2. 8 SMP workers
Requests per second: 2292.12 [#/sec] (mean)
Time per request: 21.814 [ms] (mean)
Time per request: 0.436 [ms] (mean, across all concurrent requests)
Transfer rate: 971.46 [Kbytes/sec] received
3. 4 SMP workers
Requests per second: 2510.13 [#/sec] (mean)
Time per request: 19.919 [ms] (mean)
Time per request: 0.398 [ms] (mean, across all concurrent requests)
Transfer rate: 1063.86 [Kbytes/sec] received
Эти результаты имеют для меня смысл. Результаты легко воспроизводятся и на любой другой машине. Фактически, когда машина становится более мощной, эффект деградации становится более заметным. Любое объяснение?
Если у вас 4 ядра, то почему вы тестируете 8 потоков? Я бы пошел с 2,3,4 и 5
Вы запускаете ab на том же компьютере, что и веб-сервер. Перегоняли процессоры между ab и lighttpd? В противном случае они будут конкурировать за ЦП, если ваша нагрузка станет слишком высокой, процессы веб-сервера будут преждевременно выброшены из ЦП.
Попробуйте запустить ab на отдельном оборудовании.