Message ID | 20221107215644.1895162-1-oliver.upton@linux.dev (mailing list archive) |
---|---|
Headers | show |
Series | KVM: arm64: Parallel stage-2 fault handling | expand |
On Mon, 7 Nov 2022 21:56:30 +0000, Oliver Upton wrote: > Presently KVM only takes a read lock for stage 2 faults if it believes > the fault can be fixed by relaxing permissions on a PTE (write unprotect > for dirty logging). Otherwise, stage 2 faults grab the write lock, which > predictably can pile up all the vCPUs in a sufficiently large VM. > > Like the TDP MMU for x86, this series loosens the locking around > manipulations of the stage 2 page tables to allow parallel faults. RCU > and atomics are exploited to safely build/destroy the stage 2 page > tables in light of multiple software observers. > > [...] I've gone over this for quite a while, and while I'm still sh*t scared about it, I've decided to let it simmer in -next for a bit. If anything goes wrong or that someone spots something ugly, it will be easy to simply drop the branch. For simple fixes, they can go on top. [01/14] KVM: arm64: Combine visitor arguments into a context structure commit: dfc7a7769ab7f2a2f629c673717ef1fa7b63aa42 [02/14] KVM: arm64: Stash observed pte value in visitor context commit: 83844a2317ecad935f6735abd854e4bf3f757040 [03/14] KVM: arm64: Pass mm_ops through the visitor context commit: 2a611c7f87f26cca405da63a57f06d0e4dc14240 [04/14] KVM: arm64: Don't pass kvm_pgtable through kvm_pgtable_walk_data commit: fa002e8e79b3f980455ba585c1f47b26680de5b9 [05/14] KVM: arm64: Add a helper to tear down unlinked stage-2 subtrees commit: 8e94e1252cc054bb31fd3e9a15235cd831970ec1 [06/14] KVM: arm64: Use an opaque type for pteps commit: 6b91b8f95cadd3441c056182daf9024475ac4a91 [07/14] KVM: arm64: Tear down unlinked stage-2 subtree after break-before-make commit: 5c359cca1faf6d7671537fe1c240e8668467864d [08/14] KVM: arm64: Protect stage-2 traversal with RCU commit: c3119ae45dfb6038ca458ab5ba7a9fba2810845b [09/14] KVM: arm64: Atomically update stage 2 leaf attributes in parallel walks commit: ca5de2448c3b4c018fe3d6223df8b59068be1cd7 [10/14] KVM: arm64: Split init and set for table PTE commit: 331aa3a0547d1c794587e0df374d13b16645e832 [11/14] KVM: arm64: Make block->table PTE changes parallel-aware commit: 0ab12f3574db6cb432917a667f9392a88e8f0dfc [12/14] KVM: arm64: Make leaf->leaf PTE changes parallel-aware commit: 946fbfdf336b811479e024136c7cabc00157b6b9 [13/14] KVM: arm64: Make table->block changes parallel-aware commit: af87fc03cfdf6893011df419588d27acdfb9c197 [14/14] KVM: arm64: Handle stage-2 faults in parallel commit: 1577cb5823cefdff4416f272a88143ee933d97f5 Fingers crossed, M.