LINUX.ORG.RU
ФорумAdmin

отдать один проц виртуалке

 , ,


2

1

Есть новый двухпроцессорный сервак (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
Решено одному virtual-guest отдать полностью один проц и 16 гиг памяти. Для этого выбрал ячейку NUMA с индексом 1. По вышеприведенной ссылке в RedHat приводят пример и пишут, что надо изменить в xml-ке
<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>
После запуска сервера присутствуют все 12 ядер/потоков (смотрю в top). Конфиг меняется на
 <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.

★★★★★

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.