1. По умолчанию виртуальные ядра ВМ не привязаны жестко к физическим. При использовании нескольких ВМ одновременно, может происходить ситуация, когда разные ВМ обращаются к одним и тем же физическим ядрам. Более того, отдельная ВМ может обращаться разными виртуальными ядрами к одному физическому. Все это может приводить к потерям пакетов.
2. Для отслеживания использования физических ядер виртуальной машиной, можно воспользоваться командой virsh vcpuinfo <VM name>.
root@debian:~# virsh vcpuinfo <VM name>
VCPU: 0
CPU: 0
State: running
CPU time: 7.6s
CPU Affinity: yyyyyyyy
VCPU: 1
CPU: 1
State: running
CPU time: 2.8s
CPU Affinity: yyyyyyyy
VCPU: 2
CPU: 0
State: running
CPU time: 2.2s
CPU Affinity: yyyyyyyy
VCPU: 3
CPU: 1
State: running
CPU time: 2.1s
CPU Affinity: yyyyyyyy
Из вывода видно, что разные VCPU могут обращаться к одним и тем же CPU.
3. Для фиксации виртуальных ядер (VCPU) на конкретные физические, необходимо изменить настройки ВМ.
4. Остановите ВМ:
root@ubuntu:~# virsh shutdown <VM name>
5. После полного выключения ВМ, отредактируйте настройки ВМ, добавив следующие строки:
root@ubuntu:~# virsh edit <VM name>
<cputune>
<vcpupin vcpu='0' cpuset='4'/>
<vcpupin vcpu='1' cpuset='5'/>
<vcpupin vcpu='2' cpuset='6'/>
<vcpupin vcpu='3' cpuset='7'/>
</cputune>
где:
· vcpu – номер виртуального ядра (начиная с нулевого);
· cpuset – список физических ядер, к которым происходит привязка (начиная с нулевого);
6. Запустите ВМ, привязка ядер будет жесткая:
root@debian:~# virsh start <VM name>
root@debian:~# virsh vcpuinfo <VM name>
VCPU: 0
CPU: 4
State: running
CPU time: 0.2s
CPU Affinity: ----y---
VCPU: 1
CPU: 5
State: running
CPU time: 0.2s
CPU Affinity: -----y--
VCPU: 2
CPU: 6
State: running
CPU time: 0.2s
CPU Affinity: ------y-
VCPU: 3
CPU: 7
State: running
CPU time: 0.1s
CPU Affinity: -------y
7. При наличии в гипервизоре других ВМ, их также нужно разнести по отдельным физическим ядрам, не используя ядра, занятые под ВМ «С-Терра Виртуальный Шлюз».