2 votes

comment activer le cache L3 sur l'invité kvm ?

Je démarre un invité kvm(centos6.5) sur une machine Intel(centos6.5), j'utilise libvirt, le xml de l'invité est le suivant

<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>

Maintenant, je suis confus, malgré l'utilisation de "host-passthrough", je ne peux toujours pas voir le cache L3 dans l'invité, seulement L1, L2 cache, comme suit

[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

Voici les informations sur ma machine physique

[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

Quelqu'un peut-il me dire comment activer le cache L3 sur l'invité ?

4voto

DanielB Points 1435

Pour info, vous comprenez mal la portée du modèle de CPU hôte-passthrough. Il ne contrôle que l'identification du CPU et ses drapeaux de caractéristiques - certains aspects du CPU ne sont toujours pas exposés à l'invité. Par exemple, avec le XML que vous avez ici, les 8 CPU sont exposés à l'invité comme des sockets séparés dans le même nœud NUMA. Votre hôte a plutôt 2 nœuds NUMA, chacun avec deux sockets, chacun avec quatre cœurs. Ce seul fait est probablement suffisant pour que le concept de cache L3 de l'hôte ne s'applique pas bien à l'invité.

Vous pouvez configurer la topologie du CPU virtuel dans le XML, mais je ne pense toujours pas que cela fasse apparaître le cache L3. De plus, cela n'a pas vraiment d'importance, car vous permettez à 8 CPU virtuels de flotter sur les 16 CPU hôtes. Puisque vos CPU hôtes sont répartis sur 2 nœuds NUMA, vous aurez souvent des accès à la mémoire entre nœuds NUMA, ce qui entraîne une pénalité de latence élevée, qui annulera tout avantage du cache. En d'autres termes, vous feriez mieux de vous concentrer sur un placement plus efficace des VM, en utilisant le CPU pinning pour confiner l'invité à un seul nœud NUMA hôte.

2voto

theB Points 141

Le support du cache L3 est ajouté à QEMU à partir de la version 2.8.0. Voir Bugzilla .

Exposer le cache L3 à l'invité améliorera les performances car les CPU invités peuvent éviter beaucoup d'IPI (Inter-Processor Interrupt). Veuillez lire ce qui suit article pour plus d'informations.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X