Skip to content

Nested hypercall pairing

Bir guest hypervisor'ın, kendi iki thread'ini bir fiziksel core'un iki SMT context'ine birlikte co-schedule etmesini gerçek host'tan istediği bir L1->L0 hypercall'u — bir L2 vCPU'yu ve onun emulation helper'ını donanım olarak komşu tutarak nested virtualization'ı hızlandırmak için kullanılır (SVt tekniği).

Mechanism

Note

Nested virtualization kısmen yavaştır çünkü L2 exit'leri L0 ve L1 emulation'ı üzerinden zıplar ve L0'ın scheduler'ı L1/L2 ilişkisinden habersizdir. SVt (SMT-based virtualization) yaklaşımı SMT kullanır: işbirliği yapan iki thread'i tek bir fiziksel core'un iki donanım context'inde çalıştırır; böylece L2 execution'ı ve onun exit'lerine hizmet eden iş aynı core'da kalır, cache'leri ve TLB'leri paylaşır.

Host scheduler hangi iki thread'in birbirine ait olduğunu bilmez, bu yüzden L1 L0'a bir hypercall göndererek onları "pair'ler". Bu hypercall koordinasyon primitive'idir: L0'a "bu iki context'i bir core'da birlikte schedule et ve bir L2 vCPU yeni bir fiziksel CPU'ya migrate ettiğinde ikisini de tek bir birim olarak taşı" der. Sömürülen invariant locality'dir: pairing ile cross-layer geçiş maliyeti (cache/TLB thrash'i, bağımsız L0 ve L1 scheduling'inden kaybolan cycle'lar) minimize edilir. Guest'in erişebildiği herhangi bir hypercall gibi o da attack surface'tir — L0, davranmadan önce pairing isteğini (hangi context'ler, ownership) validate etmelidir.

Walkthrough

Public reference: "Using SMT to Accelerate Nested Virtualization" (SVt, ISCA 2019). Kavramsal akış:

  1. L1, birlikte çalıştırılacak bir thread çiftini belirler (örn. bir L2 vCPU thread'i ve onun sibling/helper'ı).
  2. L1, iki context'i adlandırarak L0'a pairing hypercall'unu gönderir.
  3. L0 ownership'i validate eder ve çifti bir fiziksel core'un iki SMT context'ine schedule eder; bir L2 vCPU'yu yeniden schedule ederken, çifti birlikte taşır.
  4. Pair'lenmiş thread'ler artık core-local cache/TLB state'ini paylaşır ve nested-virt overhead'ini keser.

Beklenen gözlemlenebilir: pair'lenmiş schedule altında varsayılan bağımsız scheduling'e kıyasla azalan nested-virtualization overhead'i ve daha az cross-core context switch'i.

Warning

Pairing bir performance enlightenment'ıdır, bir isolation boundary değil. Bir fiziksel core'da co-residency, paylaşılan microarchitecture açığını (SMT side channel'ları) artırır, dolayısıyla güvenlik trade-off'u hızlanmayla birlikte değerlendirilmelidir. L0, caller'ın sahip olmadığı context'ler için pairing isteklerini reddetmelidir.

Detection

  • L0 tarafı: pairing hypercall'ları ve bunun sonucundaki co-scheduling host scheduler'a görünürdür; beklenmedik pairing istekleri anomalidir.

Mitigation

  • L0, pairing hypercall'unu onurlandırmadan önce validate eder (ownership/scope).
  • SMT side-channel açığının kabul edilemez olduğu yerlerde, hassas tenant'lar için pairing'i / SMT'yi devre dışı bırak.

References

  • L. Vilanova et al., "Using SMT to Accelerate Nested Virtualization" (ISCA 2019). https://www.doc.ic.ac.uk/~lvilanov/publications/files/isca19_svt.pdf