¿Por qué todavía se roba el núcleo de la máquina virtual después de vincularlo?
Escribí un artículo antes sobre vincular un proceso a una CPU específica, que introducía dos métodos: conjunto de tareas en Linux y virsh vcpupin para especificar la CPU en un escenario de virtualización. Más tarde, se descubrió que si se usaba incorrectamente, la CPU de la máquina virtual sería robada incluso si el núcleo estaba vinculado.
La causa raíz es encontrar el proceso o máquina virtual en la máquina física que no tiene núcleo o tiene un conflicto de núcleo, que es el culpable del robo del núcleo.
1) Cómo comprobar si el núcleo ha sido robado
Ejecute el comando top en la máquina virtual para comprobar si el st de cada núcleo es 0. Si un núcleo no es 0, significa que el núcleo ha sido robado.
2) Si el st de todos los núcleos de la máquina virtual no es 0, vaya a la máquina física donde se encuentra la máquina virtual para verificar si la máquina virtual está vinculada al núcleo
En el nodo de control, nova show vmid? | La instancia encuentra el id_instancia,
La máquina física donde se encuentra la máquina virtual encuentra el id_instancia en la lista virsh,
Luego verifique si el núcleo está vinculado virsh vcpupin instancia_id
virsh vcpupin instancia_idbb #No está vinculado al núcleo
0: 0-39
virsh vcpupin instancia_idaa #No está vinculado al núcleo vinculado, vinculado a un rango
0: 5-9
3) Si la máquina virtual está vinculada a un núcleo, verifique si otras máquinas virtuales están vinculadas a un núcleo en el físico máquina donde se encuentra la máquina virtual
Consulte el método en 2) para verificar si otras máquinas virtuales no están vinculadas a un núcleo. Estas máquinas virtuales se pueden agrupar con núcleos.
virsh vcpupin instancia_idbb #Bind core
0: 5
4) Si la máquina virtual no tiene un núcleo vinculado, debe vincular el núcleo. Esto implica otra cuestión: cómo vincular núcleos a una máquina virtual sin núcleos, que se analizará en detalle más adelante.
5) Si todas las máquinas virtuales de la máquina física tienen núcleos vinculados a ellas, pero aún se están robando núcleos, debe verificar en detalle si un determinado proceso está ocupado.
Busque la CPU cuyo st no sea 0 en la máquina virtual y luego busque el núcleo físico correspondiente a la CPU en la máquina física. 2 métodos: virsh dumpxml id_instancia y virsh vcpupin id_instancia.
virsh vcpupin instancia_idbb #Bind core
0: 5
1:?
Explique el núcleo 0 de la máquina virtual y la máquina física Correspondiente al quinto núcleo. Si el st del 0.º núcleo de la máquina virtual no es 0, significa que el 5.º núcleo de la máquina física está ocupado por otras aplicaciones.
taskset cp pid puede verificar la CPU ocupada por cada proceso y puede observar y encontrar gradualmente la aplicación correspondiente.