Есть новый двухпроцессорный сервак (E5-2640) и памяти 32 гига. На нем поднял virtual-host на centos6.
virsh # nodeinfo
Модель процессора: x86_64
CPU: 24
Частота процессора: 1200 MHz
Сокеты: 1
Ядер на сокет: 6
Потоков на ядро: 2
Ячейки NUMA: 2
Объём памяти: 32844300 KiB
Контора пишет, что сокетов должно быть 2. Какого черта у меня один сокет - не понимаю. В биосе процессоров (Сокетов) 2. Процы на 12 потоков. Ну Бог с ним. Может баг.
Надо его раскромсать на кусочки. Первый кусочек будет большой, поэтому решил пощупать в деле NUMA. Надо ли в хостовой системе запускать демон numad или все в xml-конфиге гостя? Демон numad у меня остановлен.
Смотрим процы подробнее
[root@kvm2 qemu]# virsh capabilities
<capabilities>
<host>
<uuid>578a5b57-14f7-11e2-a1da-f80f41f3e27e</uuid>
<cpu>
<arch>x86_64</arch>
<model>SandyBridge</model>
<vendor>Intel</vendor>
<topology sockets='1' cores='6' threads='2'/>
<feature name='pdpe1gb'/>
<feature name='osxsave'/>
<feature name='dca'/>
<feature name='pcid'/>
<feature name='pdcm'/>
<feature name='xtpr'/>
<feature name='tm2'/>
<feature name='est'/>
<feature name='smx'/>
<feature name='vmx'/>
<feature name='ds_cpl'/>
<feature name='monitor'/>
<feature name='dtes64'/>
<feature name='pbe'/>
<feature name='tm'/>
<feature name='ht'/>
<feature name='ss'/>
<feature name='acpi'/>
<feature name='ds'/>
<feature name='vme'/>
</cpu>
<topology>
<cells num='2'>
<cell id='0'>
<cpus num='12'>
<cpu id='0' socket_id='0' core_id='0' siblings='0,12'/>
<cpu id='1' socket_id='0' core_id='1' siblings='1,13'/>
<cpu id='2' socket_id='0' core_id='2' siblings='2,14'/>
<cpu id='3' socket_id='0' core_id='3' siblings='3,15'/>
<cpu id='4' socket_id='0' core_id='4' siblings='4,16'/>
<cpu id='5' socket_id='0' core_id='5' siblings='5,17'/>
<cpu id='12' socket_id='0' core_id='0' siblings='0,12'/>
<cpu id='13' socket_id='0' core_id='1' siblings='1,13'/>
<cpu id='14' socket_id='0' core_id='2' siblings='2,14'/>
<cpu id='15' socket_id='0' core_id='3' siblings='3,15'/>
<cpu id='16' socket_id='0' core_id='4' siblings='4,16'/>
<cpu id='17' socket_id='0' core_id='5' siblings='5,17'/>
</cpus>
</cell>
<cell id='1'>
<cpus num='12'>
<cpu id='6' socket_id='1' core_id='0' siblings='6,18'/>
<cpu id='7' socket_id='1' core_id='1' siblings='7,19'/>
<cpu id='8' socket_id='1' core_id='2' siblings='8,20'/>
<cpu id='9' socket_id='1' core_id='3' siblings='9,21'/>
<cpu id='10' socket_id='1' core_id='4' siblings='10,22'/>
<cpu id='11' socket_id='1' core_id='5' siblings='11,23'/>
<cpu id='18' socket_id='1' core_id='0' siblings='6,18'/>
<cpu id='19' socket_id='1' core_id='1' siblings='7,19'/>
<cpu id='20' socket_id='1' core_id='2' siblings='8,20'/>
<cpu id='21' socket_id='1' core_id='3' siblings='9,21'/>
<cpu id='22' socket_id='1' core_id='4' siblings='10,22'/>
<cpu id='23' socket_id='1' core_id='5' siblings='11,23'/>
</cpus>
</cell>
</cells>
</topology>
<secmodel>
<model>selinux</model>
<doi>0</doi>
</secmodel>
<secmodel>
<model>dac</model>
<doi>0</doi>
</secmodel>
</host>
Просматриваю ячейки NUMA (объемы памяти со временем меняются.)
[root@kvm2 qemu]# virsh freecell --all
0: 15979784 KiB
1: 16060128 KiB
--------------------
Всего: 32039912 KiB
<vcpus>4</vcpus>
<vcpus cpuset='4-7'>4</vcpus>
У меня в конфиге vcpus НЕТУ! Зато есть
<vcpu placement='static'>1</vcpu>
<vcpus cpuset='6-11,18-23'>12</vcpus>
<vcpu cpuset='6-11,18-23'>12</vcpu>
<vcpu placement='static' cpuset='6-11,18-23'>12</vcpu>
virsh # vcpuinfo nemo
VCPU: 0
CPU: 23
Статус: работает
Время CPU: 8,8s
Соответствие CPU: ------yyyyyy------yyyyyy
VCPU: 1
CPU: 7
Статус: работает
Время CPU: 2,1s
Соответствие CPU: ------yyyyyy------yyyyyy
VCPU: 2
CPU: 9
Статус: работает
Время CPU: 1,0s
Соответствие CPU: ------yyyyyy------yyyyyy
VCPU: 3
CPU: 8
Статус: работает
Время CPU: 1,8s
Соответствие CPU: ------yyyyyy------yyyyyy
VCPU: 4
CPU: 6
Статус: работает
Время CPU: 0,8s
Соответствие CPU: ------yyyyyy------yyyyyy
VCPU: 5
CPU: 20
Статус: работает
Время CPU: 0,5s
Соответствие CPU: ------yyyyyy------yyyyyy
VCPU: 6
CPU: 22
Статус: работает
Время CPU: 1,0s
Соответствие CPU: ------yyyyyy------yyyyyy
VCPU: 7
CPU: 6
Статус: работает
Время CPU: 0,4s
Соответствие CPU: ------yyyyyy------yyyyyy
VCPU: 8
CPU: 18
Статус: работает
Время CPU: 0,5s
Соответствие CPU: ------yyyyyy------yyyyyy
VCPU: 9
CPU: 11
Статус: работает
Время CPU: 0,3s
Соответствие CPU: ------yyyyyy------yyyyyy
VCPU: 10
CPU: 7
Статус: работает
Время CPU: 0,5s
Соответствие CPU: ------yyyyyy------yyyyyy
VCPU: 11
CPU: 6
Статус: работает
Время CPU: 0,3s
Соответствие CPU: ------yyyyyy------yyyyyy
Как же это так получается, что 6-й CPU у меня соответсвует трем! VCPU? Попробую действовать по
Virtualization_Tuning_and_Optimization_Guide
<vcpu cpuset='0-7'>8</vcpu>
<cputune>
<vcpupin vcpu='0' cpuset='0'/>
<vcpupin vcpu='1' cpuset='1'/>
<vcpupin vcpu='2' cpuset='2'/>
<vcpupin vcpu='3' cpuset='3'/>
<vcpupin vcpu='4' cpuset='4'/>
<vcpupin vcpu='5' cpuset='5'/>
<vcpupin vcpu='6' cpuset='6'/>
<vcpupin vcpu='7' cpuset='7'/>
</cputune>
Что интересно в этом примере уже vcpu, а не vcpus. А placement='static' надо если привязываешь потоки ручками. Иначе надо юзать placement='auto' и ковырять numad.