hyperlight-dev / hyperlight-dev/hyperlight
Make it possible to kill guest execution when running a host function.
- Lingua principale
- Rust
- Stelle
- 4.7k
- Fork
- 208
- Merge medio
- 1g 7h
- PR unite (30g)
- 48
Descrizione
Currently, it is not possible to interrupt or cancel execution if the guest is calling a host function. This means that, if the host function hangs, then the call will never return or get cancelled. This gets surfaced, like so:
https://github.com/hyperlight-dev/hyperlight/blob/b9c67fb7450cfebbd47918b979a97cfa447c43be/src/hyperlight_host/src/func/guest_dispatch.rs#L476
**One possible solution**
When running with the seccomp feature on, host functions are wrapped in their own thread like so:
https://github.com/hyperlight-dev/hyperlight/blob/b9c67fb7450cfebbd47918b979a97cfa447c43be/src/hyperlight_host/src/sandbox/host_funcs.rs#L208-L228
You could leverage these threads to cancel execution in the same way we cancel execution in the guest:
https://github.com/hyperlight-dev/hyperlight/blob/b9c67fb7450cfebbd47918b979a97cfa447c43be/src/hyperlight_host/src/hypervisor/hypervisor_handler.rs#L729-L762
Though, this would mean always wrapping host function calls with an extra thread and that might be naive in terms of perf.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Leggi src/hyperlight_host/src/func/guest_dispatch.rs intorno alla riga 476 per capire come una chiamata a una funzione host diventa non interrompibile. Confronta quindi il threading delle funzioni host con seccomp in src/hyperlight_host/src/sandbox/host_funcs.rs intorno alle righe 208-228 con la cancellazione del guest in src/hyperlight_host/src/hypervisor/hypervisor_handler.rs intorno alle righe 729-762. Il lavoro è completato quando una funzione host bloccata può essere cancellata senza lasciare bloccata l’esecuzione del guest e si è compreso il costo in termini di prestazioni di qualsiasi threading aggiunto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- rust
- Ambito
- infrastructure, operating-systems
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100