Я исследую задержки nodejs event loop, используя
process.hrtime(), а также я считаю
перцентили для измереных задержек.
Вот мой простой
пример теста
Запусткал этот тест на компьютере с i7-4770.
Это как выглядит график, когда скрипт выполняется на
Windows 7(такой же тип графика на OSX):

Где
ось Х (горизонтальная) - время. А
ось Y (по вертикали) - 90й перцентиль задержки в
мкс (микросекунды)
А вот это, как выглядит график, когда скрипт выполняется на
CentOS 7/6:

Где
ось Х (горизонтальная) - время. А
ось Y (по вертикали) - 90й перцентиль задержки в
мкс (микросекунды). Длина волны составляет около 2 минут.
Как видно, в целом задержки на Linux больше. Но реальная проблема заключается в периодических пиках, когда средняя задержка и количество высокой задержки(порядка 1000мкс) за измеряемый интервал увеличивается. Проще говоря на линуксе периодически проседает скорость выполнения. Это никак не связано со сборщиком мусора.
Я не уверен где именно проблема, в ОС, V8 или libuv. Есть ли хорошее объяснение такого поведения? Например различия в реализации таймеров на разных ОС. Или как это починить?