Kommunikation mit Ger¨aten – 1
Transcription
Kommunikation mit Ger¨aten – 1
x86–Open–Source–Virtualisierungstechniken Thomas Glanzmann <thomas@glanzmann.de> März 2006 Zu meiner Person Thomas Glanzmann Informatik Student an der Universität Erlangen im 9. Semester 4 jährige Mitarbeit an dem Projekt FAUmachine der Universität Erlangen z.Z. freiberuflich tätig für die Lufthansa Systems in Kelsterbach http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Überblick http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Virtualisierungstypen Betriebssystem-Virtualisierung Virtuelle Maschinen Para-Virtualisierung http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Betriebssystem-Virtualisierung Ein Kernel für sämtliche Instanzen Hohe Wahrscheinlichkeit einer Privilegien Eskalation Benutzerprozesse werden in Container verwaltet Relativ hohe Performanz da wenig Mehraufwand http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann BS-Virtualisierung am Beispiel von Virtuozzo http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Virtuelle Maschinen Komplette Simulation einer Hardware Hohe Wahrscheinlichkeit einer Privilegien-Eskalation Hoher Simulations-Mehraufwand http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Virtuelle Maschine am Beispiel VMware WS http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Para-Virtualisierung Portierung des Gast-BS auf virtualisierungsfreundliche Platform Starke Isolation Hohe Performanz (niedriger Mehraufwand) Vermeidung aufwendiger Simulation http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Para-Virtualisierung am Beispiel von XEN http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Virtualisierungs-Probleme CPU MMU / Adressraum Interrupt / Exception / Systemcall Simulation IO Durchsatz Memory Mapped IO (VGA Karte / IOAPIC) http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Modifikationen am Linux Kernel Direkte Interaktion mit Hardware Geräte Zugriff – in*/out*, memory mapped Unterbrechungsbehandlung – sti, cli, iret MMU – Kontrollregister der CPU → priviligierte Instruktionen werden durch Simulatoraufrufe ersetzt http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Adressverschiebung des Gast BS Host Kernel Host Kernel 3G Guest Kernel 2G User 1G http://thomas.glanzmann.de/aksys2006.pdf Guest User Thomas Glanzmann Kommunikation mit Geräten – 1 Zugriff über den E/A Bus: RTC, PIC, IDE, NE2000 in*/out* Macros/Inline-Funktionen in asm/io.h → Umdefinition: Werden zu Simulatoraufrufen http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Kommunikation mit Geräten – 2 Example: unsigned long init calibrate tsc(void) in time.c: ... rdtsc(startlow,starthigh); count = 0; do { count++; } while ((inb(0x61) & 0x20) == 0); rdtsc(endlow,endhigh); ... http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Kommunikation mit Geräten – 3 ... c02b4cd8: c02b4cda: c02b4cdc: c02b4cde: c02b4ce0: c02b4ce1: c02b4ce3: c02b4ce5: c02b4ce7: ... rdtsc mov mov xor inc in test je rdtsc %eax,%ebx %edx,%esi %ecx,%ecx %ecx $0x61,%al $0x20,%al c02b4ce0 <calibrate_tsc+0x20> http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Kommunikation mit Geräten – 4 unsigned char _v; asm ("inb %w1, %0" : "=a" (_v) : "Nd" (port) ); unsigned char _v; --> --> --> http://thomas.glanzmann.de/aksys2006.pdf asm ("call *0x7ffe000c; inb %w1, %0" : "=a" (_v) : "Nd" (port) ); Thomas Glanzmann Kommunikation mit Geräten – 5 ... 4026f3fc: 4026f3fe: 4026f400: 4026f402: 4026f404: 4026f405: 4026f40b: 4026f40d: 4026f40f: 4026f411: ... rdtsc mov mov xor inc call in test je rdtsc %eax,%ebx %edx,%esi %ecx,%ecx %ecx *0x7ffe000c $0x61,%al $0x20,%al 4026f404 <calibrate_tsc+0x44> http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Kommunikation mit Geräten – 6 unsigned char in(unsigned short port) { if (0x0020 <= port && port <= 0x0021) { value = umpic_in(0, port - 0x0020); } else if (0x0060 == port || port == 0x0064) { value = umkbd_in(port); } else if (0x0061 <= port && port <= 0x0063) { value = umppi_inb(port - 0x0061); } else if { ... ... } return value; } http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Kommunikation mit Geräten – 7 Memory mapped E/A: mov Instruktion kann nicht verändert werden VGA controller: linearer Framebuffer ausgewertet über Scanprozess APIC: Register in den Speicher gemappt, macros SET APIC() und GET APIC() → durch Simulatoraufrufe ersetzt http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Interrupts und Exceptions – 1 Umgebung des Programmes sichern Umgebung für Behandlungsroutine herstellen Behandlungsroutine aufrufen Umgebung des Programmes wiederherstellen Programm weiterlaufen lassen → Hardware unterstützt Ausnahmebehandlung http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Interrupt and Exception Handling – 2 UMLinux user space original kernel signal simulator 1 sighandler() { 2 } ... handler(){ iret } http://thomas.glanzmann.de/aksys2006.pdf 3 int3 sighandler() { 4 } Thomas Glanzmann Memory Management – 1 MMU wird mit Hilfe von mmap(2) und munmap(2) simuliert Simulierte Kontrollregister (cr3 – page directory base) Speicher wird bei Zugriff bereitgestellt http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Memory Management – 2 CR3 http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann priv. Instruktions-Behandlung im Userland in*/out* in Xserver oder Modulen können nicht ersetzt werden Löst SIGSEGV aus Simulator simuliert die Funktion → langsam, aber funktionierend http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann MMU Simulation JIT mit SoftMMU Implementation (QEMU) Vanderpool / Pacifica (Shadow Register) http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Virtualisierungsprodukte Bochs VMWare FAUmachine QEMU XEN ... http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Bochs Interpreter für X86 Architektur (VGA)Bios Hoher Mehraufwand http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann QEMU properitäres Kernel Modul JIT mit SoftMMU virtuelle Maschine API Anpassung HW Simulator Bochs BIOS http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann FAUmachine Kernel Modul QEMU CPU ACPI BIOS Automatischer Experiment Controller HW Simulator Fehlerinjektion http://www.FAUmachine.org/ http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Zukunft Vanderpool (Intel) Pacifica (AMD) Smart NICs http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann Fragen? http://thomas.glanzmann.de/aksys2006.pdf Thomas Glanzmann