Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
exec('taskset -pc ' + affinity + ' ' + pid);
Клиент и сервер запускались на одной и той же физической машине
CPU: AMD FX(tm)-8120 Eight-Core Processor
Количество серверных потоков (1 и 8).
client_threads = psutil.NUM_CPUS
Клиент и сервер запускались на одной и той же физической машине.Т.е. в вашем тесте клиент и сервер весьма жестко конкурировали за ресурсы, и кому-то их лучше удалось поделить между собой.
worker_processes = 8 упирается вовсе не в сервер. По опыту, системные вызовы клиентской части тяжелее, и чтобы упереться в nginx нужно под клиент выделить существенно большие ресурсы.worker_processes 1; и worker_cpu_affinity (последнее особенно для FreeBSD актуально, ибо планировщик там может чудить). Динамическое скалирование частоты процессора отключаем, система чистая, никаких cron-задач, работающих фоновых служб и прочего. Берем клиент (самый производительный из известных мне — wrk, остальные становятся узким местом раньше) и запускаем цикл измерений в 8 потоков (ещё 3 физических ядра пригодятся системе) — 30-100 измерений по 30-120 секунд, замеры сохраняем в файл для последующего анализа с помощью ministat (числа без указания погрешностей — можно рассматривать только ради развлечения). Применение всех изложенных мер позволяет получить относительную погрешность в пределах 2% (ни о каких 0.6% разницы речи идти не может, на реальной системе едва ли сможете измерить с такой точностью).weighttpd с помощью разных серверов (а не наоборот). Какой из них имеет паттерн обработки запросов более согласующийся с упомянутой утилитой, таким образом входя в резонанс при определнных условиях. Для получаения более-менее достоверных результатов клиент должен обладать запасом по производительности минимум раза в 2-3 превосходящим сервер, а в идеале на порядок.ab и с удивлением обнаружил, что выключение логов дает не прирост производительности, а наоборот — регрессию. Включая access_log он стабильно наблюдал заметно больший rps. Я изучил этот случай, и вот что выяснилось: с выключенными логами рабочий процесс nginx-а то и дело уходил в спячку, ab не успевал прислать следующий запрос после завершения обработки всех предыдущих, но если включить логи, то лишний write() строчки лога на диск на каждый запрос чуть подтормаживал процесс и ab чаще успевал прислать запрос, так что nginx не оставался совсем без работы и не засыпал, последнее оказывалось существенно дороже записи логов."Node.js — не хайлоад-решение" — весьма смелым. Я с этим не согласен и, уверен, парни из PayPal тоже. Нода не для тяжёлой логики (и вообще чего-либо CPU-intensive), это да.It’s speed comes from the fact that it compiles JavaScript directly into native assembly.
Компиляция осложнена linux-зависимостями типа sys/sendfile и memalign (патчится легко).
с чего бы вдруг сендфайл стал linux-зависимостью?! :) тем более, что в freebsd/solaris он тоже есть?Он в этих системах разный. В nginx, например, для FreeBSD, Linux, Solaris и Darwin — 4 отдельных реализации, везде есть нюансы.
Бенчмарк HTTP-серверов (С/C++) в FreeBSD