Назад | Перейти на главную страницу

как включить кеш L3 на гостевом kvm?

Я запускаю гостевой kvm (centos6.5) на машине Intel (centos6.5), использую libvirt, гостевой xml, как показано ниже

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>test-1</name>
  <uuid>9377bce1-ae83-e356-ed15-919c8625fb4b</uuid>
  <memory unit='KiB'>8388608</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static' current='2'>8</vcpu>
  <os>
    <type arch='x86_64' machine='rhel6.5.0'>hvm</type>
    <boot dev='hd'/>
    <boot dev='cdrom'/>
    <bootmenu enable='yes'/>
    <bios useserial='yes' rebootTimeout='0'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu mode='host-passthrough'>
  </cpu>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' cache='none'/>
      <source file='/data/vhosts//test-1.disk'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </controller>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:ea:12:d9'/>
      <source bridge='br-ex'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </memballoon>
  </devices>
  <qemu:commandline>
    <qemu:env name='SPICE_DEBUG_ALLOW_MC' value='1'/>
  </qemu:commandline>
</domain>

Теперь я запутался, несмотря на использование "host-passthrough", я все еще не вижу кеш L3 в гостевой системе, только кеш L1, L2, как показано ниже

[root@vm-kvm-115 results]# lscpu 
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 26
Stepping:              5
CPU MHz:               2266.746
BogoMIPS:              4533.49
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0,1

Ниже приводится информация о моей физической машине.

[root@host-kvm-22 linux]# rpm -qa | grep libvirt
libvirt-client-0.10.2-54.el6_7.2.x86_64
libvirt-0.10.2-54.el6_7.2.x86_64
libvirt-devel-0.10.2-54.el6_7.2.x86_64
libvirt-python-0.10.2-54.el6_7.2.x86_64

[root@host-kvm-22 linux]# rpm -qa | grep qemu
qemu-img-0.12.1.2-2.479.el6_7.2.x86_64
gpxe-roms-qemu-0.9.7-6.14.el6.noarch
qemu-kvm-0.12.1.2-2.479.el6_7.2.x86_64

[root@host-kvm-22 linux]# uname -r
2.6.32-573.8.1.el6.x86_64

[root@host-kvm-22 linux]# lscpu 
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                16
On-line CPU(s) list:   0-15
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 26
Stepping:              5
CPU MHz:               2266.743
BogoMIPS:              4532.68
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-3,8-11
NUMA node1 CPU(s):     4-7,12-15

Кто-нибудь может сказать мне, как включить кеш L3 на гостевой системе?

FWIW, вы неправильно понимаете объем модели транзитного ЦП. Он контролирует только идентификацию ЦП и его флаги функций - некоторые аспекты ЦП по-прежнему не доступны гостю. Например, с имеющимся у вас XML все 8 процессоров доступны гостю как отдельные сокеты в одном узле NUMA. Вместо этого ваш хост имеет 2 узла NUMA, каждый с двумя сокетами, каждый с четырьмя ядрами. Одного этого, вероятно, достаточно, чтобы концепция кэша L3 на хосте не соответствовала гостю.

Вы можете настроить топологию виртуального процессора в XML, но я все же не думаю, что это приведет к появлению кеша L3. Это также не имеет большого значения, потому что вы позволяете 8 виртуальным процессорам перемещаться по всем 16 центральным процессорам. Поскольку ваши центральные процессоры распределены по 2 узлам NUMA, вы будете получать доступ к памяти между узлами NUMA большую часть времени, что имеет большие потери за задержку, что сведет на нет все преимущества кеша. IOW, вам было бы гораздо лучше сосредоточиться на более эффективном размещении виртуальных машин, используя закрепление ЦП, чтобы ограничить гостя одним узлом NUMA хоста.

Поддержка кэша L3 добавлена ​​в QEMU начиная с версии 2.8.0. Видеть Bugzilla.

Предоставление кеша L3 гостевой системе улучшит производительность, поскольку гостевые процессоры могут избежать большого количества IPI (межпроцессорных прерываний). Пожалуйста прочтите это статья Чтобы получить больше информации.