"virsh vcpupin" и изоляция процессора в ESXi
Я пытаюсь запустить приложение в виртуальной машине на ESXi. Приложение запускает поток, чувствительный к высокой задержке. Он работает в режиме жесткого опроса, который почти всегда работает на 99,9% процессорного времени, и это ожидается.
Детали ВМ и сервера:
Number of vCPUs allocated to the VM: 36
Number of sockets: 2
Number of cores per socket: 10
Total number of logical CPUs on the server: 40
Hyper threading : Enabeld
ESXi version: 6.50
Если на ВМ больше ничего не запускается, проблем нет. Но если я запускаю другие приложения, потребляющие ЦП, на ВМ, поток, о котором я говорил ранее, начинает получать меньше циклов ЦП. Я подтвердил это, добавив несколько счетчиков, которые рассчитывают rdtsc()
На KVM это можно решить с помощью:
- Закрепление виртуального ЦП на физическом процессоре с
virsh vcpupin <domain> ...
- Закрепление приложений на виртуальной машине для запуска на определенных виртуальных ЦП
Как работает планировщик процессора ESX? Есть ли способ сопоставить виртуальные ЦП с физическим процессором на ESXi?
Когда я контролирую esxtop
на хосте я вижу, что поток, который занимает 99,9% ЦП, не всегда работает на одном и том же ядре. Он продолжает двигаться вокруг разных ядер. И несколько раз я вижу, что он разделяет физическое ядро с другими приложениями, интенсивно использующими процессор.