Я исследую задержки nodejs event loop, используя
process.hrtime(), а также я считаю
перцентили для измереных задержек.
Вот мой простой
пример теста
Запусткал этот тест на компьютере с i7-4770.
Это как выглядит график, когда скрипт выполняется на
Windows 7(такой же тип графика на OSX):
![2eda8534de7e4c4b97afbda20428d044.png](https://habrastorage.org/files/2ed/a85/34d/2eda8534de7e4c4b97afbda20428d044.png)
Где
ось Х (горизонтальная) - время. А
ось Y (по вертикали) - 90й перцентиль задержки в
мкс (микросекунды)
А вот это, как выглядит график, когда скрипт выполняется на
CentOS 7/6:
![11c3024702d042838d3e18f7a406629b.png](https://habrastorage.org/files/11c/302/470/11c3024702d042838d3e18f7a406629b.png)
Где
ось Х (горизонтальная) - время. А
ось Y (по вертикали) - 90й перцентиль задержки в
мкс (микросекунды). Длина волны составляет около 2 минут.
Как видно, в целом задержки на Linux больше. Но реальная проблема заключается в периодических пиках, когда средняя задержка и количество высокой задержки(порядка 1000мкс) за измеряемый интервал увеличивается. Проще говоря на линуксе периодически проседает скорость выполнения. Это никак не связано со сборщиком мусора.
Я не уверен где именно проблема, в ОС, V8 или libuv. Есть ли хорошее объяснение такого поведения? Например различия в реализации таймеров на разных ОС. Или как это починить?