[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Some questions regarding QEMU, UEFI, PCI/VGA Passthrough, and other things
While I am not a developer myself (I always sucked hard when it comes to read and write code), there are several capabilities of Xen and its supporting Software which I'm always interesed in how they progress, more out of curiosity than anything else. However, usually, documentation seems to backtrack a lot what its currently implemented in code, and sometimes you catch a mail here with some useful data regarding a topic but later you don't hear about that any more, missing any progress, or because the whole topic was inconclusive. So, this mail is pretty much a compilation of small questions of things I came across but didn't popped up later, but can serve to brainstorm someone, which is why I believe it to be more useful for xen-devel than xen-users. QEMU Because as a VGA Passthrough user I'm currently forced to use qemu-xen-traditional (Through I hear some success about some users using qemu-xen in Xen 4.4, but I myself didn't had any luck with it), I'm stuck with an old QEMU version. However, looking at changelog from latest versions I always see some interesing features, which as far that I know Xen doesn't currently incorporate. 1a - One of the things that newer QEMU versions seems to be capable of doing, is emulating the much newer Intel Q35 Chipset, instead of only the current 440FX from the P5 Pentium era. Some data from Q35 emulation here: www.linux-kvm.org/wiki/images/0/06/2012-forum-Q35.pdf wiki.qemu.org/Features/Q35 I'm aware that newer doesn't neccesarily means better, specially because the practical advantages of Q35 vs 440FX aren't very clear. There are several new emulated features like an AHCI Controller and a PCIe Bus, which sounds interesing on paper, but I don't know if they add any useful feature or increases performance/compatibility. Some comments I read about the matter wrongly stated that Q35 would be needed to do PCIe Passthrough, but this is currently possible on 440FX, through I don't know about the low level implementation differences. I think most of the idea about Q35 is to make the VM look more closely to real Hardware, instead of looking like a ridiculous obvious emulated platform. In the case of the AHCI Controller, I suppose than the OS would need to include Drivers for the controller during installation time, which if I recall correctly both Windows Vista/7/8 and Linux should have, through for a Windows XP install the Q35 AHCI Controller Drivers should probabily need to be slipstreamed with nLite to an install ISO for it to work. 1b - Another experimental feature that recently popped in QEMU is IOMMU emulation. Info here: www.mulix.org/pubs/iommu/viommu.pdf www.linux-kvm.org/wiki/images/4/4a/2010-forum-joro-pv-iommu.pdf IOMMU emulation usefulness seems to be so you can do PCI Passthrough in a Nested Virtualization enviroment. At first sight this looked a bit useless, cause using a DomU to do PCI Passthrough with an emulated IOMMU sounds rather too much overhead if you can simply emulate that device in the nested DomU. However, I also read about the possibility of Xen using Hardware virtualization for Dom0 instead of it being Paravirtualized. In that case, would it be possible to provide the IOMMU emulation layer to Dom0 so you could do PCI Passthrough in platforms without proper support for it? It seems a rather interesing idea. I think it would also be useful to serve as an standarized debug platform for IOMMU virtualization and passthrough, cause some years ago missing or malformed ACPI DMAR/IVRS tables were all over the place and getting IOMMU virtualization working was pretty much random luck and at the mercy of the goodwill of the Motherboard maker to fix their BIOSes. UEFI for DomUs I managed to get this one working, but it seems to need some clarifications here and there. 2a - As far that I know, if you add --enable-ovmf to ./configure before building Xen, it downloads and builds some extra code from a OVMF repository which Xen maintains, through I don't know if its a snapshop of whatever the edk2 repository had at that time, or if it does includes custom patchs for the OVMF Firmware to work in Xen. Xen also has another ./configure option, --with-system-ovmf, which is supposed to be used to specify a path to provide an OVMF Firmware binary. However, when I tried that option some months ago, I never managed to get it working, either using a package with a precompiled ovmf.bin from Arch Linux User Repository, or using another package with the source to compile it myself. Both binaries worked with standalone QEMU, through. Besides than that parameter itself was quite hidden, there is absolutely no info regarding if the provided OVMF binary has to comply with some special requeriments, be it some custom patchs for OVMF so it works with Xen, if it has to be a binary that only includes TianoCore, or the unified one that includes the NVRAM in a single file. In Arch Linux, for the Xen 4.4 package, the maintainer decided that the way to go for including OVMF support to Xen was to use --enable-ovmf, cause at least it was possible to get it working with some available patches. However, for both download and build times, it would be better to simply distribute a working binary. Any ideas of why --with-system-ovmf didn't worked for us? 2b - On successful Xen builds with OVMF support, something which I looked for is the actual ovmf.bin file. So far, the only thing which I noticed is that the hvmloader is 2 MiB bigger that on non-OVMF builds. Is there any reason why OVMF is build into the hvmloader instead of what happens to the other Firmware binaries, which are usually sitting in a directory as standalone files? 2c - Something which I'm aware is that an OVMF binary can be in two formats: A unified binary that has both OVMF and NVRAM, or a OVMF binary with a separate NVRAM (1.87 MiB + 128 KiB respectively). According to what I read about using OVMF with QEMU, it seems that if using a unified binary, you need one per VM, cause the NVRAM content is different. I suppose than with the second option you have one OVMF Firmware binary and a 128 KB NVRAM per UEFI VM. How does Xen handles this? If I recall correctly, I heared than it is currently volatile (NVRAM contents aren't saved on DomU shutdown). 2d - Is there any recorded experience or info regarding how a UEFI DomU would behave with something like, say, Windows 8 with Fast Boot, or other UEFI features for native systems? This is pretty much a "what if..." scenario than something that I could really use. PCI/VGA Passthrough It was four years ago when I learned about IOMMU virtualization making possible gaming in a VM via VGA Passthrough (First time I heared about that was with some of Teo En Ming videos on Youtube), something which was quite experimental back at that time. Even currently, the only other Hypervisor or VMM that can compete with Xen in this area is QEMU with KVM VFIO, which also has decent VGA Passthrough capabilities. While I'm aware that Xen is pretty much enterprise oriented, it was also the first to allow a power user to make a system based on Xen as Hypervisor and everything else virtualized, getting nearly all the functionality of running native with the flexibility than virtualization offers, at the cost of some overhead, quircks and complexity on usage. Its a pain to configure it the first time, but if you manage to get it working, its wonderful. So far, this feature has created a small niche of power users that uses either Xen or QEMU KVM VFIO for virtualized gaming, and I consider VGA Passthrough a quite major feature because it is what allows such setups on the first place. 3a - On some of the Threads of the original guides I read about how to use Xen to do VGA Passthrough, you usually see the author and others users saying that they didn't manage to get VGA Passthrough working on newer versions. This usually affected people that was doing the migration from the xm to xl toolstack, but also between some Xen versions (I reported a regression on Xen 4.4 vs a fully working 4.3). Passthrough compatibility previously used to be a Hardware-related pain cause it was extremely Motherboard and BIOS dependant on an era where consumer Motherboards makers didn't paid attention to the IOMMU, but at least on the Intel Haswell platform support for IOMMU is starting to get more mainstream. Considering than PCI/VGA Passthrough compatibility with a system or regressions of it between Xen versions is pretty much a hit-or-miss, would it be possible to do something to get this feature under control? It seems like this isn't deeply tested, or at least not with too many variables involved (Hard to do, cause they're A LOT). I believe that it should be possible to have a few systems at hand which are know to work and representative of a Hardware platform tested against regression with different Video Cards, but it sounds extremely time consuming to switch cards, reboot, test with different DomUs OSes/Drivers, etc. At the moment, once you get a Computer/Distribution/Kernel/Xen/Toolstack/DomU OS/Drivers combination that works, you simply stick to it, so many early adopters of VGA Passthrough are still using extremely outdated versions. Even worse, for users of versions like 4.2 with xm, if they want to upgrade to 4.4 with xl and want to figure out why it doesn't work, it will be a royal pain in the butt to figure out what patch was introduced that breaks compatibility for them, so those early adopters are pretty much out of luck if they have to go through years worth of code and version testing. 3b - Do someone knows what is the actual difference on Intel platforms regarding VT-d support? As far that I know, the VT-d specification allows for multiple "DMA Remapping Engines", of which a Haswell Processor has two, one for its Integrated PCIe Controller and another for the Integrated GPU. You also have Chipsets, some of which according to Intel Ark support VT-d (Which I believe should be in the form of a third DMA Remapping Engine), like the Q87 and C226, and those that don't like the H87 and Z87. Based on working samples I have been lead to believe than a Processor supporting VT-d will provide the IOMMU capabilities for the devices connected to its own PCIe Slots regardless of what Chipset you're using (That's the reason why you can do Passthrough with only Processor VT-d support), I would believe the same holds true with a VT-d Chipset with a non VT-d Processor, through I didn't saw any working example of this. When I was researching about this one year ago, Supermicro support said this to me: Since Z87 chipset does not support VT-d, onboard LAN will not support it either because it is connected to PCH PCIe port. One workaround is to use a VT-d enabled PCIe device and plug it into CPU based PCIe-port on board. Along with a VT-d enabled CPU the above workaround should work per Intel. Based on this, there should be a not-very-well-documented quirck. The most common configuration for VGA Passthrough users is a VT-d supporting Processor with a consumer Motherboard, so basically, if you have a VT-d supporting Processor like a Core i7 4790K, you can do Passthrough of the devices connected to the Processor PCIe Slots, and also of the ones connected to the Chipset if you apply that workaround (I don't know what does "VT-d enabled PCIe device" means exactly). I recall seeing some people using VMWare ESXi commenting that they couldn't passthrough the integrated NIC even through some a RAID Controller connected to the Processor could in such setups. Don't have link at hand about the matter, but I believe that reelevant for the question. Considering that if workarounded you would be using the Processor DMA Remapping Engine for Chipset devices, is there any potential bottleneck or performance degradation there? 3c - There is a feature that enhances VT-d called ACS (Access Control Service), related to IOMMU groups isolation. This feature seems to be excluded from consumer platforms, and support for it seems to already be on Xen wishlist based on comments. Info here: vfio.blogspot.com.ar/2014/08/iommu-groups-inside-and-out.html comments.gmane.org/gmane.comp.emulators.xen.devel/212561 A curious thing is that if I check /sys/kernel/iommu_groups/ as stated on the blog I find the folder empty (This is on Dom0, with a DomU with 2 passthroughed devices). I suppose it may be VFIO exclusive or something. Point is, after some googling I couldn't find a way to check for IOMMU groups, through Xen doesn't seem to manage that anyways. I think that it may be useful to get a layout of IOMMU groups to at least identify if passthrough issues could be related to that. Anyone can imagine current scenarios where this may break something or limit possible passthrough, why I have my IOMMU groups listing empty, and how to get such list? 3d - The new SATA Express and M.2 connectors combines SATA and some PCI Express lanes on the same connector. Depending on implementation, the PCI Express lanes could come from either the Chipset or the Processor. Considering than some people likes to passthrough the entire SATA Controller, how does it interacts with this frankenstein connector with the PCIe lanes coming from elsewhere? I'm curious. Miscelaneous Virtualization stuff 4a - There are several instances where the Software is trying to check if it is under a virtualized enviroment or not. Examples which I recall having read about are some malware, which tries to hide if it detects that it is running virtualized (Cause it means that it is not your exploitable Average Joe computer), or according some comments I read, some Drivers like those of NVIDIA to force you to use a Quadro for VGA Passthrough instead of a consumer based GeForce. Is the goal of virtualization to reproduce the exact behaviator in a VM of a system running native, or just be functionally equivalent? This is because as more Software appears that makes a distinction between native and a VM, it seems that in the end it will be forcing VMs to look and behave like a native system to maintain compatibility. While currently such Software is pretty much a specific niche, it exist the possibility than it becomes a trend with the growing popularity of the cloud. For example, one of the things that pretty much tells the whole history, is the 440FX Chipset, because if you see that Chipset running anything but a P5 Pentium, you know you're running either emulated or virtualized. Also, if I use an application like CPU-Z, it says than the BIOS Brand is Xen, Version 4.3.3, which makes the status of the system as inside a VM also obvious. I think that based on the rare but existant Software pieces that attempts to check if its running on a VM or not to decide behavior, at some point in time a part of the virtualization segment will be playing a catching up game to mask being a VM from these types of applications. I suppose that a possible endgame for this topic would be where you have a VM that tries to represent accurately as possible the PCI Layout of a commercial Chipset (Which I believe was one of the aims of QEMU Q35 emulation), and deliberately lying and/or masking the Processor CPUID data, BIOS vendor, and other recognizable things, to try to match what you would expect from a native system of that Hardware generation. This point could be questionable, cause making a perfect VM that is indistinguishable from a native system could harm some vendors that may rely on identifying if its running on a VM or not for enforcing licensing and the like. 4b - The only feature which I feel that Xen is missing from a home user perspective, is sound. As far that I know you can currently tell QEMU to emulate a Sound Card in a DomU, but there is no way to easily get the sound out of a DomU like other VMMs do. Some of the solutions I saw relied on either multiple passthroughed Sound Cards, or a PulseAudio Server adding massive sound latency. While Xen is enterprise oriented where sound is unneeded, I recall hearing that this feature was getting considered, but didn't see any mention about it for months. How hard or complex it would be to add sound support to Xen? Is the way to do it decided? Could it take the form of using Dom0 Drivers for the Sound Card to act as a mixer and some PV Drivers for the DomU like the ones currently available for the NIC and storage? I hope someone finds my questions interesing to answer. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |