On Dec 8, 2010, at 11:02 PM, Huihong Luo wrote: > > I wonder if anyone can provide some detailed info as how guest i/o comes to > the host emulation layer (user space). For example, how does "outb port_num, > val" instruction travel from guest kernel to host user space on AMD64 with > VT-x/AMD-V? > > The reason I aksed is that I was wondering if performance would be further > improved if moving some emulation layer from host user space to host kernel > layer? that should at least saves two context switches. > > KVM provides some callbacks, any similar api exists for VBox?
For I/O ports we have had PDMDevHlpIOPortRegister, PDMDevHlpIOPortRegisterR0 and PDMDevHlpIOPortRegisterRC since day one. All performance critical devices registers ring-3, ring-0 (R0) and raw-mode context (RC) callbacks for their I/O ports and will handle exits (R0 (VT-x/AMD-V)) and virtualization traps (RC) directly without switching the context when possible. For memory mapped I/O (MMIO) ranges there are similar APIs: PDMDevHlpMMIORegister, PDMDevHlpMMIORegisterR0 and PDMDevHlpMMIORegisterRC. What happens when we take an I/O port access exit in VT-x or AMD-V mode is that we use as much information as the hardware provides and tells the I/O manager (IOM) to dispatch it to the relevant callback. Usually the IOM can dispatch this directly without having to switch back to user mode (ring-3). In raw-mode the trap manager's (TRPM) general protection fault handler will catch the IN/OUT/INSx/OUTSx instruction and decode it. Seeing that it's an port I/O instruction it will hand it on to EMInterpretPortIO which will interpret the instruction with the help of IOM like in the VT-x/AMD-V case. -- Kind regards / Mit freundlichen Gruessen / Vennlig hilsen, bird -- ORACLE Deutschland B.V. & Co. KG Knut St. Osmundsen Werkstrasse 24 Senior Staff Engineer, VirtualBox 71384 Weinstadt, Germany mailto:[email protected] Hauptverwaltung: Riesstr. 25, D-80992 Muenchen Registergericht: Amtsgericht Muenchen, HRA 95603 Komplementaerin: ORACLE Deutschland Verwaltung B.V. Rijnzathe 6, 3454PV De Meern, Niederlande Handelsregister der Handelskammer Midden-Niederlande, Nr. 30143697 Geschaeftsfuehrer: J. Kunz, M. van de Molen, A. van der Ven
_______________________________________________ vbox-dev mailing list [email protected] http://vbox.innotek.de/mailman/listinfo/vbox-dev
