Deterministisches Zeitverhalten ist bei eingebetteten Systemen eine häufige Anforderung. Für die Virtualisierung ist sie neu, da in ihren klassischen Einsatzgebieten allenfalls „weiche“ Zeitvorgaben zu erfüllen waren. Bei den grundsätzlichen Betrachtungen zur Virtualisierung wird der Einfluss auf das Zeitverhalten gerne ausgeklammert. Tatsächlich besteht er aber unweigerlich. Die Geschwindigkeitseinbußen durch Emulation und ggf. „Just-in-Time“-Paravirtualisierung sind dabei immerhin vorhersehbar und können in der Planung berücksichtigt werden.
Hinzu kommt aber noch, dass der Prozessor von mehreren VMs genutzt wird. Dazu wird er vom Hypervisor reihum jeweils für eine bestimmte Zeitscheibendauer zugeteilt. So muss ein Programm, das in einer VM läuft, im ungünstigsten Fall die Zeitscheiben aller anderen VMs abwarten, bevor es beispielsweise auf ein externes Signal reagieren kann. Seine Worst-Case-Latenzzeit ist damit ein Vielfaches dieser Zeitscheibendauer. Zur Minimierung der Latenzzeit wäre demnach eine möglichst kurze Zeitscheibe zu wählen, doch damit steigen zugleich die Umschaltverluste.
Wie eine überschlägige Betrachtung (siehe [7]) ergibt, nehmen diese Verluste bei heutiger Hardware unterhalb etwa 1 ms Zeitscheibendauer überhand. Viele Hypervisor arbeiten jedoch mit sehr viel größeren, in der Regel starr festgelegten Zeitscheiben, wodurch sich zwar geringe Umschaltverluste, aber eben auch große Worst-Case-Latenzzeiten von z.T. über 100 ms ergeben. Für einige Echtzeit-Anwendungen sind solche Latenzzeiten nicht akzeptabel.
Ein Hypervisor für eingebettete Systeme sollte daher zumindest die Konfiguration der Zeitscheibendauer erlauben, sodass der Wert den Bedürfnissen der Anwendungen – ggf. unter Inkaufnahme erhöhter Umschaltverluste – angepasst werden kann.
Auch der vom Hypervisor verwendete Scheduling-Algorithmus ist von Bedeutung: Im Serverbereich wird in der Regel mit „proportional share“-Algorithmen gearbeitet, die eine möglichst gleichmäßige, anteilige Verteilung anstreben. Den VMs werden dazu Gewichte zugewiesen, die ihren relativen (prozentualen) Anteil an der gesamten Prozessorleistung bestimmen. Der Scheduler steuert die Zuordnung durch mehr oder weniger häufige Zuteilung von Zeitscheiben. Problematisch ist hierbei (neben der bereits diskutierten Latenzzeit) vor allem, dass die für eine einzelne VM verfügbare Rechenzeit davon abhängt, wie viele weitere VMs es gibt und welche Gewichte diese haben. So besteht zwar eine räumliche, jedoch keine zeitliche Isolation zwischen den VMs.
Mikrokerne gehen hier wiederum andere Wege: Der L4-Mikrokern besitzt lediglich einen einfachen, prioritätsgesteuerten Scheduler als Mechanismus, der über eine außerhalb des Kerns zu realisierende Strategie zu steuern ist. Allerdings mangelt es den L4-basierten Systemen bisher noch an geeigneten User-Level-Schedulern, so dass gewöhnlich mit festen, aber immerhin vorab konfigurierbaren Prioritäten und Zeitscheibendauern gearbeitet wird. PikeOS verwendet einen patentierten Scheduler, der die Prioritätssteuerung von L4 mit der speziell im Avionikbereich häufig geforderten Zeitpartitionierung entsprechend dem ARINC- 653-Standard kombiniert. Der Kern besitzt dazu einen zweistufigen Scheduler, dessen erste Stufe zwischen verschiedenen Zeitpartitionen umschaltet, während die zweite Stufe aufgrund von Prioritäten entscheidet, welcher Thread der ausgewählten Zeitpartition CPU-Zeit erhält.
Die Tabelle zeigt einen Vergleich einiger bekannter Virtualisierungsplattformen anhand der hier beschriebenen Eigenschaften. Mit Ausnahme von Xen und VMware ESX handelt es sich dabei um Systeme für den Einsatz in eingebetteten Geräten.
Der Autor:
Prof. Dr. Robert Kaiser |
---|
studierte Nachrichtentechnik an der RWTH Aachen. 1991 war er einer der drei Gründer der Sysgo AG. Als Leiter der Forschungsabteilung konzipierte er dort unter anderem den PikeOS-Mikrokern. Seit 2000 ist er als Hochschuldozent für Betriebssysteme und Echtzeit- Systeme tätig und erhielt 2009 eine Professur für Elektrotechnik an der Fachhochschule Bingen. |
kaiser@fh-bingen.de
Literatur:
[1] Lawton, K.P.: Bochs: A Portable PC Emulator for Unix/X. In: Linux Journal 1996, sep, Nr. 29es, S. 7, ISSN 1075–3583.
[2] Popek, G.J.; Goldberg, R.P.: Formal requirements for virtualizable third generation architectures. In: Commun. ACM 7, 1974, Nr. 7, S. 412 – 421.
[3] Helander, J.: Unix under Mach: The Lites Server. 1994.
[4] Hohmuth, M.: Unix-Emulation auf einem Mikrokern. Diplomarbeit TU Dresden, 1996.
[5] Baumann, C.; Bormer, T.: Verifying the PikeOS Microkernel: An Overview of the Verisoft XT Avionics Project. In: SSV 2009.
[6] L4.verified Project: www.ertos.nicta. com.au/research/l4.verified
[7] Kaiser, R.: Empirische Ermittlung Cachebedingter Umschaltverluste. GI/ITG Frühjahrstreffen 2008.