Понимание того, как воспроизвести результаты тестов Techempower

Я создал свой собственный Java-веб-сервер, поддерживающий HTTP 1.1, на основе AsynchronousServerSocketChannel, и даже научился создавать собственный модуль C++ в Nginx, но есть еще вещи, которых я, похоже, не знаю. Я пытаюсь выяснить, как добиться результатов тестов, которые вы можете увидеть на techempower для различных веб-серверов.

Когда я тестирую другие веб-серверы, я не приближаюсь к их результатам.

Я вижу, что они используют 3 мощных сервера и 10Gb Ethernet. Поэтому я ожидаю, что смогу получить результаты, возможно, в 3 раза медленнее на тесте localhost на одной машине.https://www.techempower.com/benchmarks/#section=environment

Когда я тестирую веб-серверы на локальном хосте, я обычно сталкиваюсь с узким местом из-за исчерпания портов, например, около 60 000 запросов в секунду после увеличения эфемерных портов. У меня сейчас 32-поточный процессор AMD на Windows и машина с ubuntu linux с 24 потоками, и производительность совсем не увеличилась, несмотря на аппаратное обеспечение -процессора высокого уровня. Похоже, есть узкое место, основанное на портах, которые я не знаю, как обойти, или, может быть, просто локальный хост не является хорошим способом проверить это. Я не знаю, улучшит ли их использование коммутатора 10Gb Ethernet производительность по сравнению с эталонным локальным хостом. Я думал, что бесконечная производительность должна быть возможна на локальном хосте, но есть явное узкое место в ограничениях времени ожидания порта tcp, и вы не должны уменьшать их до очень малых чисел, я думаю, поэтому это сбивает с толку, как techempower вычисляет эти числа. Я также знаю, что мой код на Java и C++ намного быстрее, чем в сети, и в случае с программой на C++ я знаю, что она может выполнять миллионы выполнений в секунду на моей машине, но версия сокета этого не делает.

Обычно я тестирую с помощью apachebench и использую -c,Варианты -n и -k. Я понимаю, что другие инструменты могут быть быстрее. Я не думаю, что другой инструмент был бы ответом. Я пробовал некоторые другие без лучшего результата.

Как они достигают более высокой производительности, такой как миллионы запросов в секунду, используя всего 3 сервера? Я также не уверен, как они выполняют тест против машины. Например, есть ли у них только 1 машина, генерирующая всю нагрузку, или много машин, и какое программное обеспечение используется для этого.

Есть ли в конфигурации среды Linux что-то уникальное, что откроет дополнительную производительность? Эта конфигурация где-то задокументирована? Я просматриваю вики, и кажется, что они используют vagrant. Я не уверен, будет ли у них уникальная конфигурация в их проекте github для настройки сервера или вам придется сделать это самостоятельно. Я пытался следовать различным руководствам для Linux за последние 12 лет, чтобы сделать наши серверы быстрыми и безопасными, но мне, должно быть, не хватает некоторых знаний, чтобы добиться такого результата.

Например, я использую такую ​​настройку sysctl.conf:net.ipv4.ip_local_port_range = 2000 65000

И я увеличиваю значения ulimit, file-max и другие значения. Возможно, некоторые из моих настроек устарели. Есть ли лучшее место для получения наилучшей производительности на высокопроизводительном-сервере?

Я предполагаю, что они используют только одну сетевую карту на машину. Я не знаю, изменят ли что-нибудь несколько карт. Раньше я пытался провести тест с веб-сервером, работающим на нескольких ips на моей машине, и результаты были не лучше.

Обновление:Я вижу, что размер буфера чтения/записи сильно влияет на количество запросов в секунду. Я обнаружил, что буфер vertx по умолчанию был намного меньше, чем тот, который я использовал на своем. Когда я подбираю размер их буфера, мой веб-сервер работает с той же скоростью или даже быстрее. Мне удалось достичь 110 000 запросов в секунду, что является самым быстрым результатом, который я когда-либо видел на своем процессоре. Может быть, это не так ограничено портами, как я думал. Но когда мой ответ становится больше,скорость немного падает на обоих серверах.

Я смог получить от 100 000 до 160 000 запросов в секунду с nginx в linux после настройки значений /etc/sysctl.conf на гораздо большие числа для размера окна и файла-max для очень простого 1-байтового запроса. Однако это сильно замедляет работу с любой дополнительной конфигурацией или размером файла. Это улучшение по сравнению с предыдущим тестированием. Возможно, techempower использует очень специфическую конфигурацию. Я не знаю, где найти информацию о конфигурации их сервера. Я не могу найти его в проекте github.

0
задан 30 November 2021 в 23:58
1 ответ

Производительность в основном зависит от деталей реализации сервера.

Например, nginx очень быстр благодаря своей архитектуре,-управляемой событиями.https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/— хорошая статья об архитектуре nginx.

Если архитектура вашего программного обеспечения не рассчитана на масштабируемость/производительность, то она не масштабируется, независимо от того, сколько оборудования вы для нее используете.

0
ответ дан 1 December 2021 в 07:01

Теги

Похожие вопросы