특정 VM에 대해서만 코어를 예약하고 다른 VM이 이를 사용하지 못하도록 하는 것이 가능한지 묻고 싶습니다. 더 자세히 설명하겠습니다.
2개의 가상 머신을 코어 0-7 및 16-23에 고정하고 이러한 코어가 시스템(커널 isolcpus, rcu_nocbs 및 systemd AllowedCPU) 및 기타 VM에서 사용되는 것을 방지하고 싶습니다. 또한 코어 0-7 및 16-23을 사용해서는 안 된다는 점을 제외하면 다른 VM이 어떤 코어를 실행할지는 신경 쓰지 않습니다. 또한 명시적으로 특정 코어에 고정하고 싶지 않습니다. 나는 그들이 8-15 및 24-31의 코어를 사용하기를 원합니다.
그것을 달성하는 방법이 있습니까?
추가하면 됩니다.
"예약된" 코어에 GPU 패스스루가 고정된 2개의 VM이 있습니다. 이 코어를 이 두 VM용으로만 예약하고 싶습니다. 커널, 시스템, 기타 프로세스 및 kvm-qemu가 이러한 예약된 코어를 사용하는 것을 방지하고 싶습니다(물론 두 게임 VM을 제외한 qemu의 경우). isolcpus rcu_nocbs 및 systemd AllowedCPUs가 올바르게 작동하는 것 같지만 libvirt(또는 qemu 또는 둘 다)는 이러한 설정을 무시합니다. Qemu는 (libvirt 구성) 고정된 CPU에서 두 개의 가상을 올바르게 실행하지만 명시적으로 고정되지 않은 다른 시스템은 커널에 격리되어 있고 systemd에 허용되지 않는 경우에도 모든 코어에서 실행할 수 있습니다.
답변1
일반 호스트 OS 프로세스가 기본적으로 사용할 수 있는 CPU를 선택하려면 /etc/systemd/system.conf에서 "CPUAffinity"를 설정합니다. 즉, 전용 VM 사용을 위해 예약하려는 CPU의 반대입니다. 커널 'isolcpus' 설정은 KVM Real-Time을 구성하는 경우를 제외하고는 사용하면 안 됩니다. 왜냐하면 이 설정은 완전히 CPU에서 스케줄링을 전환하여 비VCPU QEMU 스레드의 균형을 방해하기 때문입니다.
systemd 설정을 사용하면 현재 VM은 기본적으로 예약되지 않은 코어에서 시작됩니다. 그런 다음 예약된 코어를 사용하려는 두 VM에 대해 libvirt에서 CPU 고정 구성을 사용할 수 있습니다.