Ich möchte fragen, ob es möglich ist, Kerne nur für bestimmte VMs zu reservieren und andere daran zu hindern, sie zu verwenden. Lassen Sie mich das näher erklären:
Ich möchte 2 virtuelle Maschinen haben, die auf die Kerne 0-7 und 16-23 festgelegt sind, und ich möchte verhindern, dass diese Kerne vom System (Kernel-Isol-CPUs, RCU_NOCBS und systemd AllowedCPUs) und anderen VMs verwendet werden. Es ist mir auch egal, auf welchen Kernen andere VMs laufen, außer dass sie die Kerne 0-7 und 16-23 nicht verwenden sollten. Außerdem möchte ich sie nicht explizit auf bestimmte Kerne festlegen. Ich möchte nur, dass sie alle Kerne von 8-15 und 24-31 verwenden.
Gibt es eine Möglichkeit, das zu erreichen?
Nur als Ergänzung.
Ich habe 2 VMs mit GPU-Passthrough, die an „reservierte“ Kerne gebunden sind. Ich möchte, dass diese Kerne nur für diese beiden VMs reserviert sind. Ich möchte verhindern, dass Kernel, Systemd, andere Prozesse und auch KVM-QEMU diese reservierten Kerne verwenden (im Fall von QEMU natürlich mit Ausnahme dieser beiden Gaming-VMs). Es scheint, dass isolcpus rcu_nocbs und systemd AllowedCPUs korrekt funktionieren, aber libvirt (oder QEMU oder beide) ignoriert diese Einstellungen einfach. QEMU führt diese beiden virtuellen Maschinen korrekt auf (von Libvirt konfigurierten) gebundenen CPUs aus, aber jede andere Maschine, die nicht explizit gebunden ist, kann auf jedem Kern ausgeführt werden, auch wenn sie auf den Kernel beschränkt und für Systemd nicht zulässig ist.
Antwort1
Legen Sie „CPUAffinity“ in /etc/systemd/system.conf fest, um auszuwählen, welche CPUs allgemeine Host-OS-Prozesse standardmäßig verwenden dürfen – also das Gegenteil der CPUs, die Sie für die dedizierte VM-Verwendung reservieren möchten. Die Kernel-Einstellung „isolcpus“ sollte nur verwendet werden, wenn KVM Real-Time konfiguriert wird, da dadurch auch die Planung auf den CPUs vollständig deaktiviert wird, was verhindert, dass nicht-VCPU-QEMU-Threads ausgeglichen werden.
Mit der systemd-Einstellung werden vorhandene VMs standardmäßig auf den nicht reservierten Kernen gestartet. Sie können dann die CPU-Pinning-Konfiguration in libvirt für die beiden VMs verwenden, bei denen Sie die reservierten Kerne verwenden möchten.