libvirt hook: CPUs isolieren
This commit is contained in:
parent
83fc46f000
commit
2e318faa5b
46
README.md
46
README.md
@ -9,7 +9,7 @@
|
|||||||
- `vfio-pci.ids=10de:2684,10de:22ba`: Guest GPU PCI IDs "rausnehmen", dass der kernel
|
- `vfio-pci.ids=10de:2684,10de:22ba`: Guest GPU PCI IDs "rausnehmen", dass der kernel
|
||||||
damit nichts macht (GPU und HDMI Audio im Beispiel). Find ich bei mir via `lspci -nn | grep NVIDIA`.
|
damit nichts macht (GPU und HDMI Audio im Beispiel). Find ich bei mir via `lspci -nn | grep NVIDIA`.
|
||||||
- obsolet: `isolcpus=0-7,16-23`: CPUs für Guest vom System isolieren.
|
- obsolet: `isolcpus=0-7,16-23`: CPUs für Guest vom System isolieren.
|
||||||
Kann man mittlerweile zur Laufzeit via cgroups machen.
|
Kann man mittlerweile zur Laufzeit via cgroups machen. Siehe `CPUs isolieren bei VM Start`
|
||||||
- even obsoleter: `nohz_full=0-7,16-23`: Siehe isolcpus. Bei Interesse docs auf kernel.org lesen. Aber total obsolet.
|
- even obsoleter: `nohz_full=0-7,16-23`: Siehe isolcpus. Bei Interesse docs auf kernel.org lesen. Aber total obsolet.
|
||||||
- `video=efifb:off`: Ich hatte Probleme, weil selbst mit vfio der efifb noch irgendwie die NVIDIA "gegrabt" hat, deshalb efifb:off.
|
- `video=efifb:off`: Ich hatte Probleme, weil selbst mit vfio der efifb noch irgendwie die NVIDIA "gegrabt" hat, deshalb efifb:off.
|
||||||
- `module_blacklist=nvidia`: Ich hab bei mir den NVIDIA Treiber UND den AMD Treiber auf dem Host
|
- `module_blacklist=nvidia`: Ich hab bei mir den NVIDIA Treiber UND den AMD Treiber auf dem Host
|
||||||
@ -122,3 +122,47 @@ Bei meiner CPU haben die Cores 0-7 die virtuellen Cores 0-7 und 16-23 und die Co
|
|||||||
Außerdem ist mit `lstopo` erkennbar, dass die Cores 0-7 mit dem ersten L3 Cache verbunden sind, und die Cores 8-15 mit dem Zweiten.
|
Außerdem ist mit `lstopo` erkennbar, dass die Cores 0-7 mit dem ersten L3 Cache verbunden sind, und die Cores 8-15 mit dem Zweiten.
|
||||||
Es ist ratsam für die Performance, dass sich die VM Cores und die Host Cores keinen Cache teilen, also in meinem Fall alle virtuellen
|
Es ist ratsam für die Performance, dass sich die VM Cores und die Host Cores keinen Cache teilen, also in meinem Fall alle virtuellen
|
||||||
Cores der Cores 0-7 durchzureichen, sprich 0-7,16-23. Siehe XML File.
|
Cores der Cores 0-7 durchzureichen, sprich 0-7,16-23. Siehe XML File.
|
||||||
|
|
||||||
|
## CPUs isolieren bei VM Start
|
||||||
|
```bash
|
||||||
|
$ cat /etc/libvirt/hooks/qemu
|
||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
__systemctl_set_cpu_isolation_properties__() {
|
||||||
|
local prop="$1"
|
||||||
|
|
||||||
|
systemctl set-property --runtime -- "pfs-rust-compile.slice" "$prop"
|
||||||
|
systemctl set-property --runtime -- "user.slice" "$prop"
|
||||||
|
systemctl set-property --runtime -- "system.slice" "$prop"
|
||||||
|
systemctl set-property --runtime -- "init.scope" "$prop"
|
||||||
|
}
|
||||||
|
|
||||||
|
vmisolatecpus() {
|
||||||
|
__systemctl_set_cpu_isolation_properties__ "AllowedCPUs=8-15,24-31"
|
||||||
|
}
|
||||||
|
|
||||||
|
vmfreecpus() {
|
||||||
|
__systemctl_set_cpu_isolation_properties__ "AllowedCPUs=0-31"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
VM_NAME="$1"
|
||||||
|
VM_ACTION="${2} ${3}"
|
||||||
|
LOG_FILE="/home/pfs/shm/libvirt_hook.log"
|
||||||
|
|
||||||
|
if [[ "$VM_NAME" == "win11new" ]]; then
|
||||||
|
|
||||||
|
if [[ "$VM_ACTION" == "started begin" ]]; then
|
||||||
|
echo "[$(date "+%Y-%m-%d %H:%M:%S")] hook triggered: $* -> isolating CPUs 8-15,24-31" >> "$LOG_FILE"
|
||||||
|
vmisolatecpus
|
||||||
|
|
||||||
|
elif [[ "$VM_ACTION" == "release end" ]]; then
|
||||||
|
echo "[$(date "+%Y-%m-%d %H:%M:%S")] hook triggered: $* -> freeing all CPUs" >> "$LOG_FILE"
|
||||||
|
vmfreecpus
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "[$(date "+%Y-%m-%d %H:%M:%S")] hook ignored: $*" >> "$LOG_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
Loading…
x
Reference in New Issue
Block a user