Я использую HP DL360p Gen8. Я установил двойную загрузку Windows Server 2008 R2 и RHEL7. В обеих системах я настроил LACP и VLAN. Так что это тот же сервер, то же оборудование, та же сеть, те же таблицы маршрутизации и т. д.
Меня беспокоят задержки, в том числе сетевые, поскольку я использую этот сервер для HFT-трейдинга.
Теперь я ожидал, что если я пингую один и тот же хост из Windows и Linux, то Linux должен быть немного лучше. Удивительно, но он совсем не лучше. На самом деле он даже на ~5-10 микросекунд хуже, чем Windows, когда я пингую один и тот же хост.
- я использую
hrping
в Windows иping
Linux - В Windows я использовал утилиту HP для объединения, в RHEL 7 я использовал встроенную функцию «объединения» (не объединения)
Я ожидал, что Linux будет лучше, потому что:
- Я полагаю, что сетевая реализация RHEL 7 быстрее, чем Windows Server 2008 R2.
- Я полагаю, что реализация RHEL 7 teaming/LACP/VLANs быстрее, чем в Windows Server 2008 R2/HP.
Мои вопросы:
- если такое число существует: насколько микросекунд быстрее ping из RHEL 7, чем из Windows Server 2008 R2?
- указывает ли это на потенциальную проблему, что Linux
ping
на 5-10 микросекунд медленнее, или мне следует просто игнорировать этот факт? - что я могу сделать/диагностировать/устранить неполадки, чтобы сделать ping в Linux быстрее, чем в Windows
Конечно, в реальной жизни меня больше волнует задержка реального трафика, такого как TCP/UDP, но я использую ping
в качестве первого шага. Вероятно, ping
показываются те же цифры, потому что это "просто", но на реальном трафике TCP/UDP Linux будет намного быстрее?
решение1
Есть ряд факторов. Во-первых, это машина, на которой вы работаете. Если windows и linux были на разных аппаратных средствах, измерение бессмысленно.
Конечно, вам придется измерить средний пинг после многих попыток, первые несколько пингов могут включать другие задержки.
Пакеты должны пройти через ядро (IP-стек и драйвер сетевого устройства) наружу, а затем снова внутрь, когда получен ответ. На этом этапе может быть много факторов, которые влияют на разницу:
- что на самом деле хронометрируется: две разные реализации ping могут выполнять более или менее шаблонную работу между запуском таймера и фактической отправкой (и то же самое на пути получения).
- наличие фильтров: брандмауэры и т.п. могут вводить дополнительные шаги
- гранулярность часов: насколько точно процессы мультиплексируются ядром? Даже среди разных уровней Linux длина тика может сильно различаться, или ядро может быть более или менее безтиковым (работать без прерываний, если запущен только один процесс).
- управление процессами: как быстро и каким образом процесс пробуждается при возвращении пакета? Windows и Linux делают это совершенно по-разному.
- Что делает остальная часть системы? Происходит ли в то же время тяжелый ввод-вывод, который может перегрузить ядро? Есть ли изменения, если вы установите
nice
ping на более высокий приоритет? - Масштабирование частоты: управление частотой ЦП может сильно различаться: в Linux есть много «управляющих», которые делают вещи по-разному. Поэтому возможно, что Linux работает на более низкой тактовой частоте в режиме ожидания — также момент переключения частоты имеет дополнительную задержку.
- Реализация и компиляция
ping
утилиты также могут иметь некоторые незначительные эффекты (хотя задержка внутри ядра, вероятно, является основным фактором).
Известно, что ядро Linux достигает предела пропускной способности сети при10 гигабитный уровень. Так что... это не должно иметь большого значения на микросекундных скоростях. Скорее всего, это вопрос планирования, задержек ОС и т. д. И задержка пинга не отражает фактическую производительность под нагрузкой. Вы не должны принимать это измерение как фактор, когда принимаете решение. Вам нужно много других тестов, особенно при реалистичных нагрузках.
И наконец, настройки ядра Linux могут сильно влиять на производительность - проекты реального времени требуют выделенного ядра для оптимальной работы. Вы найдете больше вариаций между различными конфигурациями (на обеих платформах), чем вы нашли в этих двух попытках.