Dauert Hypercall genauso lange wie ein Linux-Systemaufruf?

Dauert Hypercall genauso lange wie ein Linux-Systemaufruf?

Von der Xen-Website,

Ein Hypercall ist für einen Syscall das, was ein Hypervisor für ein Betriebssystem ist. Oder anders gesagt: Ein Hypercall ist für einen Hypervisor das, was ein Syscall für einen Kernel ist. Ein Hypercall ist ein Software-Trap von einer Domäne zum Hypervisor, genau wie ein Syscall ein Software-Trap von einer Anwendung zum Kernel ist. Domänen verwenden Hypercalls, um privilegierte Vorgänge wie das Aktualisieren von Seitentabellen anzufordern. Wie ein Syscall ist der Hypercall synchron, aber der Rückweg vom Hypervisor zur Domäne verwendet Ereigniskanäle. Ein Ereigniskanal ist eine Warteschlange asynchroner Benachrichtigungen und benachrichtigt über dieselben Arten von Ereignissen, die Benachrichtigungen auf nativer Hardware unterbrechen. Wenn eine Domäne mit ausstehenden Ereignissen in ihrer Warteschlange geplant wird, wird der Ereignis-Callback-Handler des Betriebssystems aufgerufen, um entsprechende Maßnahmen zu ergreifen.

  • Dauert der Hypercall genauso lange wie ein Systemaufruf, vorausgesetzt, beide tun dasselbe?
  • Gibt es einen Unterschied in der Art und Weise, wie ein Hypervisor einen Hypercall verarbeitet, und einem Linux-Kernel, der den Systemaufruf auf die gleiche Weise verarbeitet?

Antwort1

Ein Hypercall ist langsamer als ein Syscall. Das liegt daran, dass der Hypercall zuerst den Host/Hypervisor erreichen und dann seinen Weg zur CPU finden muss, um ausgeführt zu werden. Gleiches gilt für den Rückweg. Tatsächlich haben Benchmarks auf einem ähnlichen Kernel, demHyperkernelhaben gezeigt, dass ein Hypercall etwa drei- bis viermal länger dauert (PDF-Seite 15 der verlinkten Seite).

verwandte Informationen