feat(cpuid): automate the passthrough toggle around enabled guests
This commit is contained in:
29
README.md
29
README.md
@@ -165,25 +165,32 @@ vm-native-verify
|
||||
|
||||
`vm-native-verify` also prints whether CPUID passthrough is on, which is the last step.
|
||||
|
||||
### 6. Switch on CPUID passthrough, after every guest boot
|
||||
### 6. CPUID passthrough, on after boot and off before the next one
|
||||
|
||||
The `TIMER` check times the world switch on an intercepted `CPUID`, and the only way to stop
|
||||
paying it is to not exit. `vm-native-setup` prints the two lines for your declared SKU; on this
|
||||
host they are:
|
||||
paying it is to not exit. That switch has to be off while a guest cold-boots - a booting Windows
|
||||
enumerates CPUID bits KVM synthesises and hangs if they vanish half way through - and on once it
|
||||
is up. Let the libvirt hook handle that around a guest:
|
||||
|
||||
```sh
|
||||
sudo vm-native-cpuid enable win11 # off for the cold boot, on once the guest is on the network, off on stop
|
||||
sudo vm-native-cpuid status # what is enabled, and the live switch state
|
||||
sudo vm-native-cpuid disable win11 # stop automating this guest
|
||||
sudo vm-native-cpuid revert # remove the hook and reset the switch
|
||||
```
|
||||
|
||||
Or drive it by hand. `vm-native-setup` prints the two lines for your declared SKU; run them once
|
||||
the guest is up, never before, and switch it off (`echo N`) before the next boot:
|
||||
|
||||
```sh
|
||||
echo 'AMD Ryzen 7 7700X 8-Core Processor' | sudo tee /sys/module/kvm_amd/parameters/brand_string
|
||||
echo Y | sudo tee /sys/module/kvm_amd/parameters/cpuid_passthrough
|
||||
```
|
||||
|
||||
Run them once the guest is up, never before: a booting Windows enumerates CPUID bits KVM
|
||||
synthesises, and hangs if they vanish half way through. Switch it off again (`echo N`) before the
|
||||
next boot. The module applies it only to vCPU threads pinned to exactly one host CPU, so on an
|
||||
unpinned guest it does nothing rather than something wrong.
|
||||
|
||||
It is a module parameter, so it is one switch for the whole host: every pinned guest gets it, and
|
||||
a cold boot of any of them while it is on hits the race. With more than one such guest, switch it
|
||||
off before any of them boots and on again once they are all up.
|
||||
The module applies it only to vCPU threads pinned to exactly one host CPU, so on an unpinned guest
|
||||
it does nothing rather than something wrong. It is one switch and one brand string for the whole
|
||||
host, so it serves one hardened guest at a time - the hook enforces that and leaves a second guest
|
||||
alone.
|
||||
|
||||
For the detection score, run VMAware in the guest **from the console session, not over SSH** -
|
||||
OpenSSH lands you in session 0, which is not where an interactive desktop session runs. See
|
||||
|
||||
Reference in New Issue
Block a user