* USB Passthrough 1.1 performance problem...
@ 2010-12-12 11:47 Erik Brakkee
2010-12-12 20:59 ` Erik Brakkee
2010-12-13 10:36 ` Gerd Hoffmann
0 siblings, 2 replies; 19+ messages in thread
From: Erik Brakkee @ 2010-12-12 11:47 UTC (permalink / raw)
To: kvm
Hi,
I am using a tv card in a VM and get jerky video.As I understand it, the
VM is using USB 1.1. However, when I set the USB controller in the BIOS
of my server to Fullspeed (12 Mbit/s) which is the USB 1.1 speed I am
able to get perfect results on the host but still on the guest the video
is jerky.
Are there some tuning parameters I can use or perhaps even kernel
configuration paramters on the host to solve this?
Cheers
Erik
Host: Motherboard Supermicro X8DTi-F, Intel Xeon L5630, 12MB
OS: Opensuse 11.3 64 bit
Guest: OS: Opensuse 11.3 64 bit
^ permalink raw reply [flat|nested] 19+ messages in thread* Re: USB Passthrough 1.1 performance problem... 2010-12-12 11:47 USB Passthrough 1.1 performance problem Erik Brakkee @ 2010-12-12 20:59 ` Erik Brakkee 2010-12-12 22:16 ` Jan Kiszka 2010-12-13 10:36 ` Gerd Hoffmann 1 sibling, 1 reply; 19+ messages in thread From: Erik Brakkee @ 2010-12-12 20:59 UTC (permalink / raw) To: kvm Erik Brakkee wrote: > Hi, > > > I am using a tv card in a VM and get jerky video.As I understand it, > the VM is using USB 1.1. However, when I set the USB controller in the > BIOS of my server to Fullspeed (12 Mbit/s) which is the USB 1.1 speed > I am able to get perfect results on the host but still on the guest > the video is jerky. > > Are there some tuning parameters I can use or perhaps even kernel > configuration paramters on the host to solve this? > > Cheers > Erik > > Host: Motherboard Supermicro X8DTi-F, Intel Xeon L5630, 12MB > OS: Opensuse 11.3 64 bit > > Guest: OS: Opensuse 11.3 64 bit I can say now that I am giving up on getting this to work. One alternative was to use PCI passthrough the USB hardware, but that didn't work for the USB that was on the motherboard. So I bought a USB PCI card and tried to use PCI passthrough for that. Unfortunately other problems occured there. For one, the problem with 4K alignment. But I could fix that by using the pci=resource_alignment=... kernel parameter. In my grub/menu.lst it says: kernel /vmlinuz-2.6.34.7-0.5-default root=/dev/hsystem/root quiet showopts intel_iommu=on pci=resource_alignment=01:04.0;01:04.1;01:04.2 noirqdebug vga=0x31a The noirqdebug flas was needed to avoid the host from disabling the IRQ (it was a shared IRQ). Using this, I could configure PCI passthrough and start the VM. Also the USB device showed up there. Only it did not work at all. Here is a summary of my journey up until know: The original approach I wanted to use was to pass my old PCI card (WinTV PVR-500) to a VM. This card is a well supported card and has been doing fine for me. Because of the PCI passthrough problems with the wintv card, I decided to try a USB card instead. This gave me a 'ctrl buffer too small' issue that I could solve by taking the source RPM for kvm and applying a known patch from red hat (increasing buffer size from 2048 to 8192). But then I got jerky video, probably due to USB 1.1 issues. To bypass these I could use PCI passthrough for USB. But with the PCI passthrough of this card I am again running into issues probably related to Shared IRQs. So, after all this I am back to square one. I have now modified my approach so instead of running a separate minimal host with my old server as a guest, I am now running the old server (same install) on the new hardware, using it as a host. I would definitely be interested in trying this out further in the future. I even tried Xen for a brief moment, only to realize that my host and guest felt slower (slower startup and execution) and much more difficult to handle. From the experience of the last two days fulltime trying to get things working I can only conclude that the following two features would be really important to have: * Extended PCI passthrough support o shared IRQ support o supporting cases where memory is not aligned on a 4K boundary * USB passthrough o support USB 2.0 o support USB 3.0 (but taking one step at a time, 2.0 would also be great). From the above, PCI passthrough improvements are most important as they will also allow (cheap) workarounds for USB passthrough issues. I am definitely interested in hearing about new releases from KVM. Is there a mailing list I should subscribe to get information about the latest releases without intermediate discussions? I would also be interested in using latest stable versions of KVM for opensuse. Is there any repository I can configure to get those? Cheers Erik ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-12 20:59 ` Erik Brakkee @ 2010-12-12 22:16 ` Jan Kiszka 2010-12-12 22:31 ` Erik Brakkee 0 siblings, 1 reply; 19+ messages in thread From: Jan Kiszka @ 2010-12-12 22:16 UTC (permalink / raw) To: Erik Brakkee; +Cc: kvm [-- Attachment #1: Type: text/plain, Size: 4101 bytes --] Am 12.12.2010 21:59, Erik Brakkee wrote: > Erik Brakkee wrote: >> Hi, >> >> >> I am using a tv card in a VM and get jerky video.As I understand it, >> the VM is using USB 1.1. However, when I set the USB controller in the >> BIOS of my server to Fullspeed (12 Mbit/s) which is the USB 1.1 speed >> I am able to get perfect results on the host but still on the guest >> the video is jerky. USB-passthrough at device level implies USB host controller emulation. This comes with some overhead and will probably never reach native performance. Virtualization also comes with occasion high latency spikes (due to host activity delaying time-critical guest jobs). Those issues are inherent. Moreover, you may run into emulation bugs, but they are fixable in principle. >> >> Are there some tuning parameters I can use or perhaps even kernel >> configuration paramters on the host to solve this? >> >> Cheers >> Erik >> >> Host: Motherboard Supermicro X8DTi-F, Intel Xeon L5630, 12MB >> OS: Opensuse 11.3 64 bit >> >> Guest: OS: Opensuse 11.3 64 bit > I can say now that I am giving up on getting this to work. One > alternative was to use PCI passthrough the USB hardware, but that > didn't work for the USB that was on the motherboard. So I bought a USB > PCI card and tried to use PCI passthrough for that. Unfortunately other > problems occured there. > > For one, the problem with 4K alignment. But I could fix that by using > the pci=resource_alignment=... kernel parameter. In my grub/menu.lst it > says: > > kernel /vmlinuz-2.6.34.7-0.5-default root=/dev/hsystem/root quiet > showopts intel_iommu=on > pci=resource_alignment=01:04.0;01:04.1;01:04.2 noirqdebug vga=0x31a > > > The noirqdebug flas was needed to avoid the host from disabling the IRQ > (it was a shared IRQ). > > Using this, I could configure PCI passthrough and start the VM. Also the > USB device showed up there. Only it did not work at all. > > Here is a summary of my journey up until know: > > The original approach I wanted to use was to pass my old PCI card (WinTV > PVR-500) to a VM. This card is a well supported card and has been doing > fine for me. Because of the PCI passthrough problems with the wintv > card, I decided to try a USB card instead. This gave me a 'ctrl buffer > too small' issue that I could solve by taking the source RPM for kvm and > applying a known patch from red hat (increasing buffer size from 2048 to > 8192). But then I got jerky video, probably due to USB 1.1 issues. To > bypass these I could use PCI passthrough for USB. But with the PCI > passthrough of this card I am again running into issues probably related > to Shared IRQs. So, after all this I am back to square one. > > I have now modified my approach so instead of running a separate minimal > host with my old server as a guest, I am now running the old server > (same install) on the new hardware, using it as a host. I would > definitely be interested in trying this out further in the future. I > even tried Xen for a brief moment, only to realize that my host and > guest felt slower (slower startup and execution) and much more difficult > to handle. > > From the experience of the last two days fulltime trying to get things > working I can only conclude that the following two features would be > really important to have: > > * Extended PCI passthrough support > o shared IRQ support Addressed by the series I sent out today. > o supporting cases where memory is not aligned on a 4K boundary Hmm, I'm seeing warnings here when passing through one of my EHCIs, but no fatal errors. > * USB passthrough > o support USB 2.0 > o support USB 3.0 (but taking one step at a time, 2.0 would > also be great). Note that this will not solve any real-time issue (if that is part of your problem). E.g.: While my EHCIs work nicely in PCI-passthrough scenarios, I'm unable to use certain webcams that sooner or later run out of sync. Jan [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 259 bytes --] ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-12 22:16 ` Jan Kiszka @ 2010-12-12 22:31 ` Erik Brakkee 2010-12-13 8:25 ` Alexander Graf ` (2 more replies) 0 siblings, 3 replies; 19+ messages in thread From: Erik Brakkee @ 2010-12-12 22:31 UTC (permalink / raw) To: Jan Kiszka, kvm Jan Kiszka wrote: > >>> Are there some tuning parameters I can use or perhaps even kernel >>> configuration paramters on the host to solve this? >>> >>> Cheers >>> Erik >>> >>> Host: Motherboard Supermicro X8DTi-F, Intel Xeon L5630, 12MB >>> OS: Opensuse 11.3 64 bit >>> >>> Guest: OS: Opensuse 11.3 64 bit >>> >> I can say now that I am giving up on getting this to work. One >> alternative was to use PCI passthrough the USB hardware, but that >> didn't work for the USB that was on the motherboard. So I bought a USB >> PCI card and tried to use PCI passthrough for that. Unfortunately other >> problems occured there. >> >> For one, the problem with 4K alignment. But I could fix that by using >> the pci=resource_alignment=... kernel parameter. In my grub/menu.lst it >> says: >> >> kernel /vmlinuz-2.6.34.7-0.5-default root=/dev/hsystem/root quiet >> showopts intel_iommu=on >> pci=resource_alignment=01:04.0;01:04.1;01:04.2 noirqdebug vga=0x31a >> >> >> The noirqdebug flas was needed to avoid the host from disabling the IRQ >> (it was a shared IRQ). >> >> Using this, I could configure PCI passthrough and start the VM. Also the >> USB device showed up there. Only it did not work at all. >> >> Here is a summary of my journey up until know: >> >> The original approach I wanted to use was to pass my old PCI card (WinTV >> PVR-500) to a VM. This card is a well supported card and has been doing >> fine for me. Because of the PCI passthrough problems with the wintv >> card, I decided to try a USB card instead. This gave me a 'ctrl buffer >> too small' issue that I could solve by taking the source RPM for kvm and >> applying a known patch from red hat (increasing buffer size from 2048 to >> 8192). But then I got jerky video, probably due to USB 1.1 issues. To >> bypass these I could use PCI passthrough for USB. But with the PCI >> passthrough of this card I am again running into issues probably related >> to Shared IRQs. So, after all this I am back to square one. >> >> I have now modified my approach so instead of running a separate minimal >> host with my old server as a guest, I am now running the old server >> (same install) on the new hardware, using it as a host. I would >> definitely be interested in trying this out further in the future. I >> even tried Xen for a brief moment, only to realize that my host and >> guest felt slower (slower startup and execution) and much more difficult >> to handle. >> >> From the experience of the last two days fulltime trying to get things >> working I can only conclude that the following two features would be >> really important to have: >> >> * Extended PCI passthrough support >> o shared IRQ support >> > Addressed by the series I sent out today. > Does this mean I have a chance now that PCI passthrough of my WinTV PVR-500 might work now? What version is this and where can I get this for opensuse? I still have the setup I used for testing with the host OS still installed but not running so it would be really easy to try out new releases of KVM (it is not a serious production server after all but mainly used to run some websites and mailing lists). > >> o supporting cases where memory is not aligned on a 4K boundary >> > Hmm, I'm seeing warnings here when passing through one of my EHCIs, but > no fatal errors. > In my case, the domain just didn't start. Btw. I was using 0.12.5 on opensuse 11.3 but could only find the sources for 0.12.3 on download.opensuse.org (perhaps I looked wrong) and I patched those for th 4K issue. PCI passthrough also did not work with my wintv pci card with KVM 0.12.5. > >> * USB passthrough >> o support USB 2.0 >> o support USB 3.0 (but taking one step at a time, 2.0 would >> also be great). >> > Note that this will not solve any real-time issue (if that is part of > your problem). E.g.: While my EHCIs work nicely in PCI-passthrough > scenarios, I'm unable to use certain webcams that sooner or later run > out of sync. > > Jan > > Is your point in this case that USB in a VM based on PCI passthrough will always have problems when it comes to more real-time issues or does this only apply to USB passthrough? I can imagine that PCI passthrough is better since it uses hardware support. By the way, I have seen issues in the past whereby the tv card stopped working because of high load on the server running natively so real-time issues also exist apart from virtualization. Apart from this, I am definitely interested in getting updates for KVM on opensuse. Is there a channel for that? ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-12 22:31 ` Erik Brakkee @ 2010-12-13 8:25 ` Alexander Graf 2010-12-14 10:02 ` Avi Kivity 2010-12-13 23:27 ` Jan Kiszka 2010-12-13 23:50 ` Kenni Lund 2 siblings, 1 reply; 19+ messages in thread From: Alexander Graf @ 2010-12-13 8:25 UTC (permalink / raw) To: Erik Brakkee; +Cc: Jan Kiszka, kvm On 12.12.2010, at 23:31, Erik Brakkee wrote: > Jan Kiszka wrote: >> >>>> Are there some tuning parameters I can use or perhaps even kernel >>>> configuration paramters on the host to solve this? >>>> >>>> Cheers >>>> Erik >>>> >>>> Host: Motherboard Supermicro X8DTi-F, Intel Xeon L5630, 12MB >>>> OS: Opensuse 11.3 64 bit >>>> >>>> Guest: OS: Opensuse 11.3 64 bit >>>> >>> I can say now that I am giving up on getting this to work. One >>> alternative was to use PCI passthrough the USB hardware, but that >>> didn't work for the USB that was on the motherboard. So I bought a USB >>> PCI card and tried to use PCI passthrough for that. Unfortunately other >>> problems occured there. >>> >>> For one, the problem with 4K alignment. But I could fix that by using >>> the pci=resource_alignment=... kernel parameter. In my grub/menu.lst it >>> says: >>> >>> kernel /vmlinuz-2.6.34.7-0.5-default root=/dev/hsystem/root quiet >>> showopts intel_iommu=on >>> pci=resource_alignment=01:04.0;01:04.1;01:04.2 noirqdebug vga=0x31a >>> >>> >>> The noirqdebug flas was needed to avoid the host from disabling the IRQ >>> (it was a shared IRQ). >>> >>> Using this, I could configure PCI passthrough and start the VM. Also the >>> USB device showed up there. Only it did not work at all. >>> >>> Here is a summary of my journey up until know: >>> >>> The original approach I wanted to use was to pass my old PCI card (WinTV >>> PVR-500) to a VM. This card is a well supported card and has been doing >>> fine for me. Because of the PCI passthrough problems with the wintv >>> card, I decided to try a USB card instead. This gave me a 'ctrl buffer >>> too small' issue that I could solve by taking the source RPM for kvm and >>> applying a known patch from red hat (increasing buffer size from 2048 to >>> 8192). But then I got jerky video, probably due to USB 1.1 issues. To >>> bypass these I could use PCI passthrough for USB. But with the PCI >>> passthrough of this card I am again running into issues probably related >>> to Shared IRQs. So, after all this I am back to square one. >>> >>> I have now modified my approach so instead of running a separate minimal >>> host with my old server as a guest, I am now running the old server >>> (same install) on the new hardware, using it as a host. I would >>> definitely be interested in trying this out further in the future. I >>> even tried Xen for a brief moment, only to realize that my host and >>> guest felt slower (slower startup and execution) and much more difficult >>> to handle. >>> >>> From the experience of the last two days fulltime trying to get things >>> working I can only conclude that the following two features would be >>> really important to have: >>> >>> * Extended PCI passthrough support >>> o shared IRQ support >>> >> Addressed by the series I sent out today. >> > Does this mean I have a chance now that PCI passthrough of my WinTV PVR-500 might work now? > What version is this and where can I get this for opensuse? > > I still have the setup I used for testing with the host OS still installed but not running so it would be really easy to try out new releases of KVM (it is not a serious production server after all but mainly used to run some websites and mailing lists). > >> >>> o supporting cases where memory is not aligned on a 4K boundary >>> >> Hmm, I'm seeing warnings here when passing through one of my EHCIs, but >> no fatal errors. >> > In my case, the domain just didn't start. > Btw. I was using 0.12.5 on opensuse 11.3 but could only find the sources for 0.12.3 on download.opensuse.org (perhaps I looked wrong) and I patched those for th 4K issue. PCI passthrough also did not work with my wintv pci card with KVM 0.12.5. The source rpm for the 11.3 update channel is here: http://download.opensuse.org/update/11.3/rpm/src/kvm-0.12.5-1.2.1.src.rpm >> >>> * USB passthrough >>> o support USB 2.0 >>> o support USB 3.0 (but taking one step at a time, 2.0 would >>> also be great). >>> >> Note that this will not solve any real-time issue (if that is part of >> your problem). E.g.: While my EHCIs work nicely in PCI-passthrough >> scenarios, I'm unable to use certain webcams that sooner or later run >> out of sync. >> >> Jan >> >> > Is your point in this case that USB in a VM based on PCI passthrough will always have problems when it comes to more real-time issues or does this only apply to USB passthrough? I can imagine that PCI passthrough is better since it uses hardware support. By the way, I have seen issues in the past whereby the tv card stopped working because of high load on the server running natively so real-time issues also exist apart from virtualization. IIRC the reason that PCI passthrough with EHCI performs as badly as it does is that BARs < 4k get passed through using the slow path (trap to qemu, issue MMIO in user space). Unfortunately, EHCI seems to have a 256 byte BAR region usually that is used for some handshaking: 00:12.2 USB Controller: ATI Technologies Inc SB700/SB800 USB EHCI Controller (prog-if 20 [EHCI]) Subsystem: ATI Technologies Inc SB700/SB800 USB EHCI Controller Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 64, Cache Line Size: 64 bytes Interrupt: pin B routed to IRQ 17 Region 0: Memory at c8014400 (32-bit, non-prefetchable) [size=256] > Apart from this, I am definitely interested in getting updates for KVM on opensuse. Is there a channel for that? The most current development version for the user space part is in the openSUSE build service on the Virtualization repo: http://download.opensuse.org/repositories/Virtualization/openSUSE_11.3/ Please be aware that that version is less tested than the one delivered with the distribution :). Alex ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-13 8:25 ` Alexander Graf @ 2010-12-14 10:02 ` Avi Kivity 2010-12-14 10:11 ` Alexander Graf 2010-12-31 17:00 ` Kevin O'Connor 0 siblings, 2 replies; 19+ messages in thread From: Avi Kivity @ 2010-12-14 10:02 UTC (permalink / raw) To: Alexander Graf; +Cc: Erik Brakkee, Jan Kiszka, kvm On 12/13/2010 10:25 AM, Alexander Graf wrote: > >> > > Is your point in this case that USB in a VM based on PCI passthrough will always have problems when it comes to more real-time issues or does this only apply to USB passthrough? I can imagine that PCI passthrough is better since it uses hardware support. By the way, I have seen issues in the past whereby the tv card stopped working because of high load on the server running natively so real-time issues also exist apart from virtualization. > > IIRC the reason that PCI passthrough with EHCI performs as badly as it does is that BARs< 4k get passed through using the slow path (trap to qemu, issue MMIO in user space). Unfortunately, EHCI seems to have a 256 byte BAR region usually that is used for some handshaking: > > 00:12.2 USB Controller: ATI Technologies Inc SB700/SB800 USB EHCI Controller (prog-if 20 [EHCI]) > Subsystem: ATI Technologies Inc SB700/SB800 USB EHCI Controller > Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- > Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium>TAbort-<TAbort-<MAbort->SERR-<PERR- INTx- > Latency: 64, Cache Line Size: 64 bytes > Interrupt: pin B routed to IRQ 17 > Region 0: Memory at c8014400 (32-bit, non-prefetchable) [size=256] > That could certainly be optimized. If the BAR is all along in its page, both on guest and host (if not, we can migrate it, at least on the host), we can use the same offset within the page on the host as it appears on the guest, and assign the entire page. We should make sure SeaBIOS uses a minimum alignment of 4k for mmio BARs. -- error compiling committee.c: too many arguments to function ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-14 10:02 ` Avi Kivity @ 2010-12-14 10:11 ` Alexander Graf 2010-12-31 17:00 ` Kevin O'Connor 1 sibling, 0 replies; 19+ messages in thread From: Alexander Graf @ 2010-12-14 10:11 UTC (permalink / raw) To: Avi Kivity; +Cc: Erik Brakkee, Jan Kiszka, kvm@vger.kernel.org Am 14.12.2010 um 11:02 schrieb Avi Kivity <avi@redhat.com>: > On 12/13/2010 10:25 AM, Alexander Graf wrote: >> >> >> > Is your point in this case that USB in a VM based on PCI passthrough will always have problems when it comes to more real-time issues or does this only apply to USB passthrough? I can imagine that PCI passthrough is better since it uses hardware support. By the way, I have seen issues in the past whereby the tv card stopped working because of high load on the server running natively so real-time issues also exist apart from virtualization. >> >> IIRC the reason that PCI passthrough with EHCI performs as badly as it does is that BARs< 4k get passed through using the slow path (trap to qemu, issue MMIO in user space). Unfortunately, EHCI seems to have a 256 byte BAR region usually that is used for some handshaking: >> >> 00:12.2 USB Controller: ATI Technologies Inc SB700/SB800 USB EHCI Controller (prog-if 20 [EHCI]) >> Subsystem: ATI Technologies Inc SB700/SB800 USB EHCI Controller >> Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV+ VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx- >> Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium>TAbort-<TAbort-<MAbort->SERR-<PERR- INTx- >> Latency: 64, Cache Line Size: 64 bytes >> Interrupt: pin B routed to IRQ 17 >> Region 0: Memory at c8014400 (32-bit, non-prefetchable) [size=256] >> > > That could certainly be optimized. If the BAR is all along in its page, both on guest and host (if not, we can migrate it, at least on the host), we can use the same offset within the page on the host as it appears on the guest, and assign the entire page. > > We should make sure SeaBIOS uses a minimum alignment of 4k for mmio BARs. Yep, I agree :). Back when I tried that, it seemed rather hard to change BAR mappings after init from user space. But it's certainly a thing the vfio stuff could easily tackle! Alex ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-14 10:02 ` Avi Kivity 2010-12-14 10:11 ` Alexander Graf @ 2010-12-31 17:00 ` Kevin O'Connor 1 sibling, 0 replies; 19+ messages in thread From: Kevin O'Connor @ 2010-12-31 17:00 UTC (permalink / raw) To: Avi Kivity; +Cc: Alexander Graf, Erik Brakkee, Jan Kiszka, kvm On Tue, Dec 14, 2010 at 12:02:03PM +0200, Avi Kivity wrote: > That could certainly be optimized. If the BAR is all along in its > page, both on guest and host (if not, we can migrate it, at least on > the host), we can use the same offset within the page on the host as > it appears on the guest, and assign the entire page. > > We should make sure SeaBIOS uses a minimum alignment of 4k for mmio BARs. Shouldn't be too hard to do that. -Kevin --- a/src/pciinit.c +++ b/src/pciinit.c @@ -10,6 +10,7 @@ #include "biosvar.h" // GET_EBDA #include "pci_ids.h" // PCI_VENDOR_ID_INTEL #include "pci_regs.h" // PCI_COMMAND +#include "memmap.h" // PAGE_SIZE #include "dev-i440fx.h" #define PCI_ROM_SLOT 6 @@ -90,6 +91,8 @@ static int pci_bios_allocate_region(u16 bdf, int region_num) type = "prefmem"; msg = "decrease BUILD_PCIMEM_SIZE and recompile. size %x"; } else { + if (size < PAGE_SIZE) + size = PAGE_SIZE; r = &pci_bios_mem_region; type = "mem"; msg = "increase BUILD_PCIMEM_SIZE and recompile."; ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-12 22:31 ` Erik Brakkee 2010-12-13 8:25 ` Alexander Graf @ 2010-12-13 23:27 ` Jan Kiszka 2010-12-13 23:50 ` Kenni Lund 2 siblings, 0 replies; 19+ messages in thread From: Jan Kiszka @ 2010-12-13 23:27 UTC (permalink / raw) To: Erik Brakkee; +Cc: kvm [-- Attachment #1: Type: text/plain, Size: 3436 bytes --] Am 12.12.2010 23:31, Erik Brakkee wrote: > Jan Kiszka wrote: >> >>>> Are there some tuning parameters I can use or perhaps even kernel >>>> configuration paramters on the host to solve this? >>>> >>>> Cheers >>>> Erik >>>> >>>> Host: Motherboard Supermicro X8DTi-F, Intel Xeon L5630, 12MB >>>> OS: Opensuse 11.3 64 bit >>>> >>>> Guest: OS: Opensuse 11.3 64 bit >>>> >>> I can say now that I am giving up on getting this to work. One >>> alternative was to use PCI passthrough the USB hardware, but that >>> didn't work for the USB that was on the motherboard. So I bought a USB >>> PCI card and tried to use PCI passthrough for that. Unfortunately other >>> problems occured there. >>> >>> For one, the problem with 4K alignment. But I could fix that by using >>> the pci=resource_alignment=... kernel parameter. In my grub/menu.lst it >>> says: >>> >>> kernel /vmlinuz-2.6.34.7-0.5-default root=/dev/hsystem/root quiet >>> showopts intel_iommu=on >>> pci=resource_alignment=01:04.0;01:04.1;01:04.2 noirqdebug vga=0x31a >>> >>> >>> The noirqdebug flas was needed to avoid the host from disabling the IRQ >>> (it was a shared IRQ). >>> >>> Using this, I could configure PCI passthrough and start the VM. Also the >>> USB device showed up there. Only it did not work at all. >>> >>> Here is a summary of my journey up until know: >>> >>> The original approach I wanted to use was to pass my old PCI card (WinTV >>> PVR-500) to a VM. This card is a well supported card and has been doing >>> fine for me. Because of the PCI passthrough problems with the wintv >>> card, I decided to try a USB card instead. This gave me a 'ctrl buffer >>> too small' issue that I could solve by taking the source RPM for kvm and >>> applying a known patch from red hat (increasing buffer size from 2048 to >>> 8192). But then I got jerky video, probably due to USB 1.1 issues. To >>> bypass these I could use PCI passthrough for USB. But with the PCI >>> passthrough of this card I am again running into issues probably related >>> to Shared IRQs. So, after all this I am back to square one. >>> >>> I have now modified my approach so instead of running a separate minimal >>> host with my old server as a guest, I am now running the old server >>> (same install) on the new hardware, using it as a host. I would >>> definitely be interested in trying this out further in the future. I >>> even tried Xen for a brief moment, only to realize that my host and >>> guest felt slower (slower startup and execution) and much more difficult >>> to handle. >>> >>> From the experience of the last two days fulltime trying to get things >>> working I can only conclude that the following two features would be >>> really important to have: >>> >>> * Extended PCI passthrough support >>> o shared IRQ support >>> >> Addressed by the series I sent out today. >> > Does this mean I have a chance now that PCI passthrough of my WinTV > PVR-500 might work now? > What version is this and where can I get this for opensuse? Currently you have to clone my git trees [1, 2], then build and install those to have the feature. Will take a while to see it in releases, and after that also Opensuse packages. Jan [1] git://git.kiszka.org/linux-kvm.git queues/dev-assign [2] git://git.kiszka.org/qemu-kvm.git queues/dev-assign [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 259 bytes --] ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-12 22:31 ` Erik Brakkee 2010-12-13 8:25 ` Alexander Graf 2010-12-13 23:27 ` Jan Kiszka @ 2010-12-13 23:50 ` Kenni Lund [not found] ` <3047113345.976756218@brakkee.org> 2 siblings, 1 reply; 19+ messages in thread From: Kenni Lund @ 2010-12-13 23:50 UTC (permalink / raw) To: Erik Brakkee; +Cc: Jan Kiszka, kvm 2010/12/12 Erik Brakkee <erik@brakkee.org>: > Does this mean I have a chance now that PCI passthrough of my WinTV PVR-500 > might work now? Passthrough of a PVR-500 has been working for a long time. I've been running with passthrough of a PVR-500 in my HTPC, since November/December 2009...so it should work with any recent kernel and any recent version of qemu-kvm you can find today - No patching needed. The only issue I had with the PVR-500 card, was when *I* didn't free up the shared interrupts...once I fixed that, it "just worked". On the other hand, I've never had success with passthrough of USB. I've spend a bunch of time trying to get various USB cards to work with passthrough, I even purchased 3 USB cards, just to test USB passthrough with different brands, interfaces and versions (PCI, PCIe, USB 2.0, USB 3.0, etc). I gave up on that 5 months ago - http://article.gmane.org/gmane.comp.emulators.kvm.devel/56719 > What version is this and where can I get this for opensuse? I can't remember if I started out with the PVR-500 card with 0.11 or 0.12 ...I think it was 0.11...but anyway, you'll hopefully not run with such an old version today, so any version should work. Best regards Kenni ^ permalink raw reply [flat|nested] 19+ messages in thread
[parent not found: <3047113345.976756218@brakkee.org>]
* Re: USB Passthrough 1.1 performance problem... [not found] ` <3047113345.976756218@brakkee.org> @ 2010-12-14 0:47 ` Kenni Lund [not found] ` <5085473063.976781602@brakkee.org> 0 siblings, 1 reply; 19+ messages in thread From: Kenni Lund @ 2010-12-14 0:47 UTC (permalink / raw) To: Erik Brakkee; +Cc: kvm 2010/12/14 Erik Brakkee <erik@brakkee.org>: >> From: Kenni Lund <kenni@kelu.dk> >>> Does this mean I have a chance now that PCI passthrough of my WinTV >>> PVR-500 >>> might work now? >> >> Passthrough of a PVR-500 has been working for a long time. I've been >> running with passthrough of a PVR-500 in my HTPC, since >> November/December 2009...so it should work with any recent kernel and >> any recent version of qemu-kvm you can find today - No patching >> needed. The only issue I had with the PVR-500 card, was when *I* >> didn't free up the shared interrupts...once I fixed that, it "just >> worked". > > How did you free up those shared interrupts then? I tried different slots > but always get conflicts with the USB irqs. I did an unbind of the conflicting device (eg. disabled it). I moved the PVR-500 card around in the different slots and once I got a conflict with the integrated sound card, I left the PVR-500 card in that slot (it's a headless machine, so no need for sound) and configured unbind of the sound card at boot time. On my old system I think it was conflicting with one of the USB controllers as well, but it didn't really matter, as I only lost a few of the ports on the back of the computer for that particular USB controller - I still had plenty of USB ports left and if I really needed more ports, I could just plug in an extra USB PCI card. My /etc/rc.local boot script looks like the following today: -- #Remove HDA conflicting with ivtv1 echo "0000:00:1b.0" > /sys/bus/pci/drivers/HDA\ Intel/unbind # ivtv0 echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/new_id echo "0000:04:08.0" > /sys/bus/pci/drivers/ivtv/unbind echo "0000:04:08.0" > /sys/bus/pci/drivers/pci-stub/bind echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/remove_id # ivtv1 echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/new_id echo "0000:04:09.0" > /sys/bus/pci/drivers/ivtv/unbind echo "0000:04:09.0" > /sys/bus/pci/drivers/pci-stub/bind echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/remove_id -- Best regards Kenni ^ permalink raw reply [flat|nested] 19+ messages in thread
[parent not found: <5085473063.976781602@brakkee.org>]
* Re: USB Passthrough 1.1 performance problem... [not found] ` <5085473063.976781602@brakkee.org> @ 2010-12-14 11:55 ` Kenni Lund 2010-12-14 12:05 ` Daniel P. Berrange 0 siblings, 1 reply; 19+ messages in thread From: Kenni Lund @ 2010-12-14 11:55 UTC (permalink / raw) To: Erik Brakkee; +Cc: kvm 2010/12/14 Erik Brakkee <erik@brakkee.org>: >> From: Kenni Lund <kenni@kelu.dk> >> 2010/12/14 Erik Brakkee <erik@brakkee.org>: >>>> >>>> From: Kenni Lund <kenni@kelu.dk> >>>>> >>>>> Does this mean I have a chance now that PCI passthrough of my WinTV >>>>> PVR-500 >>>>> might work now? >>>> >>>> Passthrough of a PVR-500 has been working for a long time. I've been >>>> running with passthrough of a PVR-500 in my HTPC, since >>>> November/December 2009...so it should work with any recent kernel and >>>> any recent version of qemu-kvm you can find today - No patching >>>> needed. The only issue I had with the PVR-500 card, was when *I* >>>> didn't free up the shared interrupts...once I fixed that, it "just >>>> worked". >>> >>> How did you free up those shared interrupts then? I tried different slots >>> but always get conflicts with the USB irqs. >> >> I did an unbind of the conflicting device (eg. disabled it). I moved >> the PVR-500 card around in the different slots and once I got a >> conflict with the integrated sound card, I left the PVR-500 card in >> that slot (it's a headless machine, so no need for sound) and >> configured unbind of the sound card at boot time. On my old system I >> think it was conflicting with one of the USB controllers as well, but >> it didn't really matter, as I only lost a few of the ports on the back >> of the computer for that particular USB controller - I still had >> plenty of USB ports left and if I really needed more ports, I could >> just plug in an extra USB PCI card. >> >> My /etc/rc.local boot script looks like the following today: >> -- >> #Remove HDA conflicting with ivtv1 >> echo "0000:00:1b.0" > /sys/bus/pci/drivers/HDA\ Intel/unbind >> >> # ivtv0 >> echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/new_id >> echo "0000:04:08.0" > /sys/bus/pci/drivers/ivtv/unbind >> echo "0000:04:08.0" > /sys/bus/pci/drivers/pci-stub/bind >> echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/remove_id >> >> # ivtv1 >> echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/new_id >> echo "0000:04:09.0" > /sys/bus/pci/drivers/ivtv/unbind >> echo "0000:04:09.0" > /sys/bus/pci/drivers/pci-stub/bind >> echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/remove_id > > I did not try unbinding the usb device so I can also try that. > > I don'.t understand what is happening with the 4444 0016. I configured the > pci card in kvm and I believe kvm does the binding to pci-stub in recent > versions. Where is the 4444 0016%oming from? Okay, qemu-kvm might do it today, I don't know - I haven't changed that script for the past year. But are you sure that it's not libvirt/virsh/virt-manager which does that for you? Anyway, it's coming from lspci -n. See the wiki page: http://www.linux-kvm.org/page/How_to_assign_devices_with_VT-d_in_KVM I can't remember why I run remove_id in the end, it's probably unneeded, but I can't remember (and it works, so I don't toch it). Best regards Kenni ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-14 11:55 ` Kenni Lund @ 2010-12-14 12:05 ` Daniel P. Berrange 2010-12-14 21:47 ` Erik Brakkee 0 siblings, 1 reply; 19+ messages in thread From: Daniel P. Berrange @ 2010-12-14 12:05 UTC (permalink / raw) To: Kenni Lund; +Cc: Erik Brakkee, kvm On Tue, Dec 14, 2010 at 12:55:04PM +0100, Kenni Lund wrote: > 2010/12/14 Erik Brakkee <erik@brakkee.org>: > >> From: Kenni Lund <kenni@kelu.dk> > >> 2010/12/14 Erik Brakkee <erik@brakkee.org>: > >>>> > >>>> From: Kenni Lund <kenni@kelu.dk> > >>>>> > >>>>> Does this mean I have a chance now that PCI passthrough of my WinTV > >>>>> PVR-500 > >>>>> might work now? > >>>> > >>>> Passthrough of a PVR-500 has been working for a long time. I've been > >>>> running with passthrough of a PVR-500 in my HTPC, since > >>>> November/December 2009...so it should work with any recent kernel and > >>>> any recent version of qemu-kvm you can find today - No patching > >>>> needed. The only issue I had with the PVR-500 card, was when *I* > >>>> didn't free up the shared interrupts...once I fixed that, it "just > >>>> worked". > >>> > >>> How did you free up those shared interrupts then? I tried different slots > >>> but always get conflicts with the USB irqs. > >> > >> I did an unbind of the conflicting device (eg. disabled it). I moved > >> the PVR-500 card around in the different slots and once I got a > >> conflict with the integrated sound card, I left the PVR-500 card in > >> that slot (it's a headless machine, so no need for sound) and > >> configured unbind of the sound card at boot time. On my old system I > >> think it was conflicting with one of the USB controllers as well, but > >> it didn't really matter, as I only lost a few of the ports on the back > >> of the computer for that particular USB controller - I still had > >> plenty of USB ports left and if I really needed more ports, I could > >> just plug in an extra USB PCI card. > >> > >> My /etc/rc.local boot script looks like the following today: > >> -- > >> #Remove HDA conflicting with ivtv1 > >> echo "0000:00:1b.0" > /sys/bus/pci/drivers/HDA\ Intel/unbind > >> > >> # ivtv0 > >> echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/new_id > >> echo "0000:04:08.0" > /sys/bus/pci/drivers/ivtv/unbind > >> echo "0000:04:08.0" > /sys/bus/pci/drivers/pci-stub/bind > >> echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/remove_id > >> > >> # ivtv1 > >> echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/new_id > >> echo "0000:04:09.0" > /sys/bus/pci/drivers/ivtv/unbind > >> echo "0000:04:09.0" > /sys/bus/pci/drivers/pci-stub/bind > >> echo "4444 0016" > /sys/bus/pci/drivers/pci-stub/remove_id > > > > I did not try unbinding the usb device so I can also try that. > > > > I don'.t understand what is happening with the 4444 0016. I configured the > > pci card in kvm and I believe kvm does the binding to pci-stub in recent > > versions. Where is the 4444 0016%oming from? > > Okay, qemu-kvm might do it today, I don't know - I haven't changed > that script for the past year. But are you sure that it's not > libvirt/virsh/virt-manager which does that for you? If you use the managed="yes" attribute on the <hostdev> in libvirt XML, then libvirt will automatically do the pcistub bind/unbind, followed by a device reset at guest startup & the reverse at shutdown. If you have conflicting devices on the bus though, libvirt won't attempt to unbind them, unless you had also explicitly assigned all those conflicting devices to the same guest. Daniel ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-14 12:05 ` Daniel P. Berrange @ 2010-12-14 21:47 ` Erik Brakkee 2010-12-14 23:44 ` Kenni Lund 0 siblings, 1 reply; 19+ messages in thread From: Erik Brakkee @ 2010-12-14 21:47 UTC (permalink / raw) To: Daniel P. Berrange; +Cc: Kenni Lund, kvm Daniel P. Berrange wrote: > On Tue, Dec 14, 2010 at 12:55:04PM +0100, Kenni Lund wrote: > >> 2010/12/14 Erik Brakkee<erik@brakkee.org>: >> >>>> From: Kenni Lund<kenni@kelu.dk> >>>> 2010/12/14 Erik Brakkee<erik@brakkee.org>: >>>> >>>>>> From: Kenni Lund<kenni@kelu.dk> >>>>>> >>>>>>> Does this mean I have a chance now that PCI passthrough of my WinTV >>>>>>> PVR-500 >>>>>>> might work now? >>>>>>> >>>>>> Passthrough of a PVR-500 has been working for a long time. I've been >>>>>> running with passthrough of a PVR-500 in my HTPC, since >>>>>> November/December 2009...so it should work with any recent kernel and >>>>>> any recent version of qemu-kvm you can find today - No patching >>>>>> needed. The only issue I had with the PVR-500 card, was when *I* >>>>>> didn't free up the shared interrupts...once I fixed that, it "just >>>>>> worked". >>>>>> >>>>> How did you free up those shared interrupts then? I tried different slots >>>>> but always get conflicts with the USB irqs. >>>>> >>>> I did an unbind of the conflicting device (eg. disabled it). I moved >>>> the PVR-500 card around in the different slots and once I got a >>>> conflict with the integrated sound card, I left the PVR-500 card in >>>> that slot (it's a headless machine, so no need for sound) and >>>> configured unbind of the sound card at boot time. On my old system I >>>> think it was conflicting with one of the USB controllers as well, but >>>> it didn't really matter, as I only lost a few of the ports on the back >>>> of the computer for that particular USB controller - I still had >>>> plenty of USB ports left and if I really needed more ports, I could >>>> just plug in an extra USB PCI card. >>>> >>>> My /etc/rc.local boot script looks like the following today: >>>> -- >>>> #Remove HDA conflicting with ivtv1 >>>> echo "0000:00:1b.0"> /sys/bus/pci/drivers/HDA\ Intel/unbind >>>> >>>> # ivtv0 >>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/new_id >>>> echo "0000:04:08.0"> /sys/bus/pci/drivers/ivtv/unbind >>>> echo "0000:04:08.0"> /sys/bus/pci/drivers/pci-stub/bind >>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/remove_id >>>> >>>> # ivtv1 >>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/new_id >>>> echo "0000:04:09.0"> /sys/bus/pci/drivers/ivtv/unbind >>>> echo "0000:04:09.0"> /sys/bus/pci/drivers/pci-stub/bind >>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/remove_id >>>> >>> I did not try unbinding the usb device so I can also try that. >>> >>> I don'.t understand what is happening with the 4444 0016. I configured the >>> pci card in kvm and I believe kvm does the binding to pci-stub in recent >>> versions. Where is the 4444 0016%oming from? >>> >> Okay, qemu-kvm might do it today, I don't know - I haven't changed >> that script for the past year. But are you sure that it's not >> libvirt/virsh/virt-manager which does that for you? >> > If you use the managed="yes" attribute on the<hostdev> in libvirt > XML, then libvirt will automatically do the pcistub bind/unbind, > followed by a device reset at guest startup& the reverse at shutdown. > If you have conflicting devices on the bus though, libvirt won't > attempt to unbind them, unless you had also explicitly assigned all > those conflicting devices to the same guest. > > Daniel > I definitely have to try again (right now having some stability problems on the server that I am debugging). The shared IRQs are as follows: 16: 0 0 0 0 0 0 0 0 IO-APIC-fasteoi uhci_hcd:usb3 18: 252995 0 0 0 0 0 0 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb8, ivtv0 19: 58281 0 0 0 0 0 0 0 IO-APIC-fasteoi ata_piix, ata_piix, uhci_hcd:usb5, uhci_hcd:usb7, ivtv1 21: 0 0 0 0 0 0 0 0 IO-APIC-fasteoi uhci_hcd:usb4 23: 713 6906 0 76919 0 0 0 0 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb6 So I have IRQ sharing with usb1, usb8, usb5, usb7. I have also read that ehci refers to USB 2.0 and uhci to USB 1.1 is that correct? Anyway, how would I now identify the USB PCI devices that I would need to unbind to get rid of the sharing with the USB ports? It also doesn't really matter in which slot I put the PVR-500 card because both cards share IRQs with USB in all cases. I have also used an add on USB PCI card but still got these conflicts. I was considering to get a PCIe USB card instead to try out in the hope that that would use different IRQs. Is that a realistic expectation? That way, I could disable all on-board USB (in the BIOS even) and use the add-on USB only. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-14 21:47 ` Erik Brakkee @ 2010-12-14 23:44 ` Kenni Lund 2010-12-16 16:23 ` Erik Brakkee 0 siblings, 1 reply; 19+ messages in thread From: Kenni Lund @ 2010-12-14 23:44 UTC (permalink / raw) To: Erik Brakkee; +Cc: kvm 2010/12/14 Erik Brakkee <erik@brakkee.org>: > Daniel P. Berrange wrote: >> >> On Tue, Dec 14, 2010 at 12:55:04PM +0100, Kenni Lund wrote: >> >>> >>> 2010/12/14 Erik Brakkee<erik@brakkee.org>: >>> >>>>> >>>>> From: Kenni Lund<kenni@kelu.dk> >>>>> 2010/12/14 Erik Brakkee<erik@brakkee.org>: >>>>> >>>>>>> >>>>>>> From: Kenni Lund<kenni@kelu.dk> >>>>>>> >>>>>>>> >>>>>>>> Does this mean I have a chance now that PCI passthrough of my WinTV >>>>>>>> PVR-500 >>>>>>>> might work now? >>>>>>>> >>>>>>> >>>>>>> Passthrough of a PVR-500 has been working for a long time. I've been >>>>>>> running with passthrough of a PVR-500 in my HTPC, since >>>>>>> November/December 2009...so it should work with any recent kernel and >>>>>>> any recent version of qemu-kvm you can find today - No patching >>>>>>> needed. The only issue I had with the PVR-500 card, was when *I* >>>>>>> didn't free up the shared interrupts...once I fixed that, it "just >>>>>>> worked". >>>>>>> >>>>>> >>>>>> How did you free up those shared interrupts then? I tried different >>>>>> slots >>>>>> but always get conflicts with the USB irqs. >>>>>> >>>>> >>>>> I did an unbind of the conflicting device (eg. disabled it). I moved >>>>> the PVR-500 card around in the different slots and once I got a >>>>> conflict with the integrated sound card, I left the PVR-500 card in >>>>> that slot (it's a headless machine, so no need for sound) and >>>>> configured unbind of the sound card at boot time. On my old system I >>>>> think it was conflicting with one of the USB controllers as well, but >>>>> it didn't really matter, as I only lost a few of the ports on the back >>>>> of the computer for that particular USB controller - I still had >>>>> plenty of USB ports left and if I really needed more ports, I could >>>>> just plug in an extra USB PCI card. >>>>> >>>>> My /etc/rc.local boot script looks like the following today: >>>>> -- >>>>> #Remove HDA conflicting with ivtv1 >>>>> echo "0000:00:1b.0"> /sys/bus/pci/drivers/HDA\ Intel/unbind >>>>> >>>>> # ivtv0 >>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/new_id >>>>> echo "0000:04:08.0"> /sys/bus/pci/drivers/ivtv/unbind >>>>> echo "0000:04:08.0"> /sys/bus/pci/drivers/pci-stub/bind >>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/remove_id >>>>> >>>>> # ivtv1 >>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/new_id >>>>> echo "0000:04:09.0"> /sys/bus/pci/drivers/ivtv/unbind >>>>> echo "0000:04:09.0"> /sys/bus/pci/drivers/pci-stub/bind >>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/remove_id >>>>> >>>> >>>> I did not try unbinding the usb device so I can also try that. >>>> >>>> I don'.t understand what is happening with the 4444 0016. I configured >>>> the >>>> pci card in kvm and I believe kvm does the binding to pci-stub in recent >>>> versions. Where is the 4444 0016%oming from? >>>> >>> >>> Okay, qemu-kvm might do it today, I don't know - I haven't changed >>> that script for the past year. But are you sure that it's not >>> libvirt/virsh/virt-manager which does that for you? >>> >> >> If you use the managed="yes" attribute on the<hostdev> in libvirt >> XML, then libvirt will automatically do the pcistub bind/unbind, >> followed by a device reset at guest startup& the reverse at shutdown. >> If you have conflicting devices on the bus though, libvirt won't >> attempt to unbind them, unless you had also explicitly assigned all >> those conflicting devices to the same guest. >> >> Daniel >> > > I definitely have to try again (right now having some stability problems on > the server that I am debugging). > > The shared IRQs are as follows: > > 16: 0 0 0 0 0 0 > 0 0 IO-APIC-fasteoi uhci_hcd:usb3 > 18: 252995 0 0 0 0 0 > 0 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb8, ivtv0 > 19: 58281 0 0 0 0 0 > 0 0 IO-APIC-fasteoi ata_piix, ata_piix, uhci_hcd:usb5, > uhci_hcd:usb7, ivtv1 > 21: 0 0 0 0 0 0 > 0 0 IO-APIC-fasteoi uhci_hcd:usb4 > 23: 713 6906 0 76919 0 0 > 0 0 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb6 > > So I have IRQ sharing with usb1, usb8, usb5, usb7. Uff....and your ata HDD controller. I guess i was much luckier than you are, my ivtv0 didn't conflict at all and ivtv1 only conflicted with USB. > I have also read that > ehci refers to USB 2.0 and uhci to USB 1.1 is that correct? Anyway, how > would I now identify the USB PCI devices that I would need to unbind to get > rid of the sharing with the USB ports? Play around with: lspci -v lspci -n lsusb -v lsusb -t You can also just start by unbinding the first one and take note when you hit the right ones...once you unbind one, it will disappear from cat /proc/interrupts. When you're down to having only ivtv0 on one interrupt and only ivtv1 on another interrupt, then you're ready to bind with pci-stub and boot your guest. > It also doesn't really matter in > which slot I put the PVR-500 card because both cards share IRQs with USB in > all cases. You also have your conflicting ata controller to take into consideration. I don't remember if "ata_piix" and "ata_piix" is IDE only, if it is, you might not even use it. Otherwise it might be easier for you to run qemu-kvm git with the new patches for shared interrupts...it really depends on your setup. > I have also used an add on USB PCI card but still got these conflicts. I was > considering to get a PCIe USB card instead to try out in the hope that that > would use different IRQs. Is that a realistic expectation? That way, I could > disable all on-board USB (in the BIOS even) and use the add-on USB only. Most likely, the PCIe USB 3.0 card I bought supported MSI-X, so it got its own unique IRQs which wasn't shared with anything. Best regards Kenni ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-14 23:44 ` Kenni Lund @ 2010-12-16 16:23 ` Erik Brakkee 2010-12-16 21:46 ` Erik Brakkee 0 siblings, 1 reply; 19+ messages in thread From: Erik Brakkee @ 2010-12-16 16:23 UTC (permalink / raw) To: Kenni Lund; +Cc: Erik Brakkee, kvm <quote who="Kenni Lund"> > 2010/12/14 Erik Brakkee <erik@brakkee.org>: >> Daniel P. Berrange wrote: >>> >>> On Tue, Dec 14, 2010 at 12:55:04PM +0100, Kenni Lund wrote: >>> >>>> >>>> 2010/12/14 Erik Brakkee<erik@brakkee.org>: >>>> >>>>>> >>>>>> From: Kenni Lund<kenni@kelu.dk> >>>>>> 2010/12/14 Erik Brakkee<erik@brakkee.org>: >>>>>> >>>>>>>> >>>>>>>> From: Kenni Lund<kenni@kelu.dk> >>>>>>>> >>>>>>>>> >>>>>>>>> Does this mean I have a chance now that PCI passthrough of my >>>>>>>>> WinTV >>>>>>>>> PVR-500 >>>>>>>>> might work now? >>>>>>>>> >>>>>>>> >>>>>>>> Passthrough of a PVR-500 has been working for a long time. I've >>>>>>>> been >>>>>>>> running with passthrough of a PVR-500 in my HTPC, since >>>>>>>> November/December 2009...so it should work with any recent kernel >>>>>>>> and >>>>>>>> any recent version of qemu-kvm you can find today - No patching >>>>>>>> needed. The only issue I had with the PVR-500 card, was when *I* >>>>>>>> didn't free up the shared interrupts...once I fixed that, it "just >>>>>>>> worked". >>>>>>>> >>>>>>> >>>>>>> How did you free up those shared interrupts then? I tried different >>>>>>> slots >>>>>>> but always get conflicts with the USB irqs. >>>>>>> >>>>>> >>>>>> I did an unbind of the conflicting device (eg. disabled it). I moved >>>>>> the PVR-500 card around in the different slots and once I got a >>>>>> conflict with the integrated sound card, I left the PVR-500 card in >>>>>> that slot (it's a headless machine, so no need for sound) and >>>>>> configured unbind of the sound card at boot time. On my old system I >>>>>> think it was conflicting with one of the USB controllers as well, >>>>>> but >>>>>> it didn't really matter, as I only lost a few of the ports on the >>>>>> back >>>>>> of the computer for that particular USB controller - I still had >>>>>> plenty of USB ports left and if I really needed more ports, I could >>>>>> just plug in an extra USB PCI card. >>>>>> >>>>>> My /etc/rc.local boot script looks like the following today: >>>>>> -- >>>>>> #Remove HDA conflicting with ivtv1 >>>>>> echo "0000:00:1b.0"> /sys/bus/pci/drivers/HDA\ Intel/unbind >>>>>> >>>>>> # ivtv0 >>>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/new_id >>>>>> echo "0000:04:08.0"> /sys/bus/pci/drivers/ivtv/unbind >>>>>> echo "0000:04:08.0"> /sys/bus/pci/drivers/pci-stub/bind >>>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/remove_id >>>>>> >>>>>> # ivtv1 >>>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/new_id >>>>>> echo "0000:04:09.0"> /sys/bus/pci/drivers/ivtv/unbind >>>>>> echo "0000:04:09.0"> /sys/bus/pci/drivers/pci-stub/bind >>>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/remove_id >>>>>> >>>>> >>>>> I did not try unbinding the usb device so I can also try that. >>>>> >>>>> I don'.t understand what is happening with the 4444 0016. I >>>>> configured >>>>> the >>>>> pci card in kvm and I believe kvm does the binding to pci-stub in >>>>> recent >>>>> versions. Where is the 4444 0016%oming from? >>>>> >>>> >>>> Okay, qemu-kvm might do it today, I don't know - I haven't changed >>>> that script for the past year. But are you sure that it's not >>>> libvirt/virsh/virt-manager which does that for you? >>>> >>> >>> If you use the managed="yes" attribute on the<hostdev> in libvirt >>> XML, then libvirt will automatically do the pcistub bind/unbind, >>> followed by a device reset at guest startup& the reverse at shutdown. >>> If you have conflicting devices on the bus though, libvirt won't >>> attempt to unbind them, unless you had also explicitly assigned all >>> those conflicting devices to the same guest. >>> >>> Daniel >>> >> >> I definitely have to try again (right now having some stability problems >> on >> the server that I am debugging). >> >> The shared IRQs are as follows: >> >> 16: 0 0 0 0 0 0 >> 0 0 IO-APIC-fasteoi uhci_hcd:usb3 >> 18: 252995 0 0 0 0 0 >> 0 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb8, ivtv0 >> 19: 58281 0 0 0 0 0 >> 0 0 IO-APIC-fasteoi ata_piix, ata_piix, uhci_hcd:usb5, >> uhci_hcd:usb7, ivtv1 >> 21: 0 0 0 0 0 0 >> 0 0 IO-APIC-fasteoi uhci_hcd:usb4 >> 23: 713 6906 0 76919 0 0 >> 0 0 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb6 >> >> So I have IRQ sharing with usb1, usb8, usb5, usb7. > > Uff....and your ata HDD controller. I guess i was much luckier than > you are, my ivtv0 didn't conflict at all and ivtv1 only conflicted > with USB. > >> I have also read that >> ehci refers to USB 2.0 and uhci to USB 1.1 is that correct? Anyway, how >> would I now identify the USB PCI devices that I would need to unbind to >> get >> rid of the sharing with the USB ports? > > Play around with: > lspci -v > lspci -n > lsusb -v > lsusb -t > > You can also just start by unbinding the first one and take note when > you hit the right ones...once you unbind one, it will disappear from > cat /proc/interrupts. When you're down to having only ivtv0 on one > interrupt and only ivtv1 on another interrupt, then you're ready to > bind with pci-stub and boot your guest. > >> It also doesn't really matter in >> which slot I put the PVR-500 card because both cards share IRQs with USB >> in >> all cases. > > You also have your conflicting ata controller to take into > consideration. I don't remember if "ata_piix" and "ata_piix" is IDE > only, if it is, you might not even use it. Otherwise it might be > easier for you to run qemu-kvm git with the new patches for shared > interrupts...it really depends on your setup. > >> I have also used an add on USB PCI card but still got these conflicts. I >> was >> considering to get a PCIe USB card instead to try out in the hope that >> that >> would use different IRQs. Is that a realistic expectation? That way, I >> could >> disable all on-board USB (in the BIOS even) and use the add-on USB only. > > Most likely, the PCIe USB 3.0 card I bought supported MSI-X, so it got > its own unique IRQs which wasn't shared with anything. > I think I am a bit out of luck here. The two IRQs that are interesting are 18 and 19. One of them has the SMBUS and the other one has SATA drives. I think the best for me is to wait until shared IRQ support in KVM is available. My only option is to try it out every once in a while. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-16 16:23 ` Erik Brakkee @ 2010-12-16 21:46 ` Erik Brakkee 2010-12-24 18:19 ` Erik Brakkee 0 siblings, 1 reply; 19+ messages in thread From: Erik Brakkee @ 2010-12-16 21:46 UTC (permalink / raw) To: erik; +Cc: Kenni Lund, kvm Erik Brakkee wrote: > <quote who="Kenni Lund"> > >> 2010/12/14 Erik Brakkee<erik@brakkee.org>: >> >>> Daniel P. Berrange wrote: >>> >>>> On Tue, Dec 14, 2010 at 12:55:04PM +0100, Kenni Lund wrote: >>>> >>>> >>>>> 2010/12/14 Erik Brakkee<erik@brakkee.org>: >>>>> >>>>> >>>>>>> From: Kenni Lund<kenni@kelu.dk> >>>>>>> 2010/12/14 Erik Brakkee<erik@brakkee.org>: >>>>>>> >>>>>>> >>>>>>>>> From: Kenni Lund<kenni@kelu.dk> >>>>>>>>> >>>>>>>>> >>>>>>>>>> Does this mean I have a chance now that PCI passthrough of my >>>>>>>>>> WinTV >>>>>>>>>> PVR-500 >>>>>>>>>> might work now? >>>>>>>>>> >>>>>>>>>> >>>>>>>>> Passthrough of a PVR-500 has been working for a long time. I've >>>>>>>>> been >>>>>>>>> running with passthrough of a PVR-500 in my HTPC, since >>>>>>>>> November/December 2009...so it should work with any recent kernel >>>>>>>>> and >>>>>>>>> any recent version of qemu-kvm you can find today - No patching >>>>>>>>> needed. The only issue I had with the PVR-500 card, was when *I* >>>>>>>>> didn't free up the shared interrupts...once I fixed that, it "just >>>>>>>>> worked". >>>>>>>>> >>>>>>>>> >>>>>>>> How did you free up those shared interrupts then? I tried different >>>>>>>> slots >>>>>>>> but always get conflicts with the USB irqs. >>>>>>>> >>>>>>>> >>>>>>> I did an unbind of the conflicting device (eg. disabled it). I moved >>>>>>> the PVR-500 card around in the different slots and once I got a >>>>>>> conflict with the integrated sound card, I left the PVR-500 card in >>>>>>> that slot (it's a headless machine, so no need for sound) and >>>>>>> configured unbind of the sound card at boot time. On my old system I >>>>>>> think it was conflicting with one of the USB controllers as well, >>>>>>> but >>>>>>> it didn't really matter, as I only lost a few of the ports on the >>>>>>> back >>>>>>> of the computer for that particular USB controller - I still had >>>>>>> plenty of USB ports left and if I really needed more ports, I could >>>>>>> just plug in an extra USB PCI card. >>>>>>> >>>>>>> My /etc/rc.local boot script looks like the following today: >>>>>>> -- >>>>>>> #Remove HDA conflicting with ivtv1 >>>>>>> echo "0000:00:1b.0"> /sys/bus/pci/drivers/HDA\ Intel/unbind >>>>>>> >>>>>>> # ivtv0 >>>>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/new_id >>>>>>> echo "0000:04:08.0"> /sys/bus/pci/drivers/ivtv/unbind >>>>>>> echo "0000:04:08.0"> /sys/bus/pci/drivers/pci-stub/bind >>>>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/remove_id >>>>>>> >>>>>>> # ivtv1 >>>>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/new_id >>>>>>> echo "0000:04:09.0"> /sys/bus/pci/drivers/ivtv/unbind >>>>>>> echo "0000:04:09.0"> /sys/bus/pci/drivers/pci-stub/bind >>>>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/remove_id >>>>>>> >>>>>>> >>>>>> I did not try unbinding the usb device so I can also try that. >>>>>> >>>>>> I don'.t understand what is happening with the 4444 0016. I >>>>>> configured >>>>>> the >>>>>> pci card in kvm and I believe kvm does the binding to pci-stub in >>>>>> recent >>>>>> versions. Where is the 4444 0016%oming from? >>>>>> >>>>>> >>>>> Okay, qemu-kvm might do it today, I don't know - I haven't changed >>>>> that script for the past year. But are you sure that it's not >>>>> libvirt/virsh/virt-manager which does that for you? >>>>> >>>>> >>>> If you use the managed="yes" attribute on the<hostdev> in libvirt >>>> XML, then libvirt will automatically do the pcistub bind/unbind, >>>> followed by a device reset at guest startup& the reverse at shutdown. >>>> If you have conflicting devices on the bus though, libvirt won't >>>> attempt to unbind them, unless you had also explicitly assigned all >>>> those conflicting devices to the same guest. >>>> >>>> Daniel >>>> >>>> >>> I definitely have to try again (right now having some stability problems >>> on >>> the server that I am debugging). >>> >>> The shared IRQs are as follows: >>> >>> 16: 0 0 0 0 0 0 >>> 0 0 IO-APIC-fasteoi uhci_hcd:usb3 >>> 18: 252995 0 0 0 0 0 >>> 0 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb8, ivtv0 >>> 19: 58281 0 0 0 0 0 >>> 0 0 IO-APIC-fasteoi ata_piix, ata_piix, uhci_hcd:usb5, >>> uhci_hcd:usb7, ivtv1 >>> 21: 0 0 0 0 0 0 >>> 0 0 IO-APIC-fasteoi uhci_hcd:usb4 >>> 23: 713 6906 0 76919 0 0 >>> 0 0 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb6 >>> >>> So I have IRQ sharing with usb1, usb8, usb5, usb7. >>> >> Uff....and your ata HDD controller. I guess i was much luckier than >> you are, my ivtv0 didn't conflict at all and ivtv1 only conflicted >> with USB. >> >> >>> I have also read that >>> ehci refers to USB 2.0 and uhci to USB 1.1 is that correct? Anyway, how >>> would I now identify the USB PCI devices that I would need to unbind to >>> get >>> rid of the sharing with the USB ports? >>> >> Play around with: >> lspci -v >> lspci -n >> lsusb -v >> lsusb -t >> >> You can also just start by unbinding the first one and take note when >> you hit the right ones...once you unbind one, it will disappear from >> cat /proc/interrupts. When you're down to having only ivtv0 on one >> interrupt and only ivtv1 on another interrupt, then you're ready to >> bind with pci-stub and boot your guest. >> >> >>> It also doesn't really matter in >>> which slot I put the PVR-500 card because both cards share IRQs with USB >>> in >>> all cases. >>> >> You also have your conflicting ata controller to take into >> consideration. I don't remember if "ata_piix" and "ata_piix" is IDE >> only, if it is, you might not even use it. Otherwise it might be >> easier for you to run qemu-kvm git with the new patches for shared >> interrupts...it really depends on your setup. >> >> >>> I have also used an add on USB PCI card but still got these conflicts. I >>> was >>> considering to get a PCIe USB card instead to try out in the hope that >>> that >>> would use different IRQs. Is that a realistic expectation? That way, I >>> could >>> disable all on-board USB (in the BIOS even) and use the add-on USB only. >>> >> Most likely, the PCIe USB 3.0 card I bought supported MSI-X, so it got >> its own unique IRQs which wasn't shared with anything. >> >> > I think I am a bit out of luck here. The two IRQs that are interesting are > 18 and 19. One of them has the SMBUS and the other one has SATA drives. I > think the best for me is to wait until shared IRQ support in KVM is > available. My only option is to try it out every once in a while. > > > > Meanwhile, I haven't given up and experimented with determining the effect of unbinding the various USB PCI devices. I haven't tried virtualization yet though. The problem is I managed to free up one tuner (ivtv0) from shared IRQs, all USB ports are still operational, but then how would I determine which USB ports still support USB 2.0? I have now at least found a way to make ivtv0 available without any shared IRQ by unbinding two USB PCI devices: one UHCI and one EHCI device. The list of USB PCI devices is: 00:1a.0 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #4 00:1a.1 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #5 00:1a.2 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #6 00:1a.7 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #2 00:1d.0 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #1 00:1d.1 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #2 00:1d.2 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB UHCI Controller #3 00:1d.7 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB2 EHCI Controller #1 I unbound 00:1a.7 and 00:1d.2. To my great surprise, all USB ports on the server are still operational. I tried this by inserting a USB memory stick and trying to mount it. The motherboard has a total of 8 USB connections with 6 USB in use, I don't really understand this. Was I simply in luck? The output of lsucb after doing the unbinding is: Bus 005 Device 003: ID 046b:ff10 American Megatrends, Inc. Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 006 Device 002: ID 045e:001e Microsoft Corp. IntelliMouse Explorer Bus 006 Device 003: ID 051d:0002 American Power Conversion Uninterruptible Power Supply Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Alternatively, I am also considering to by a new PCIe card. In particular, the ASUS U3S6 looks interesting because it has 2 PCIe ports and 2 USB 3.0 ports. This means that I could disable 2 more USB devices (00:1a.2 and 00:1d.1) and get some extra USB devices. The ata_piix drivers are being used for an internal disk and CDROM. The RAID array is managed through arcmsr (Areca) so I don't have a problem there. Of course, if I managed to get completely free of shared IRQs with this add-on card, then the issue of determining which of the remaining ports is still USB 2.0 is not that important anymore. So, enough ideas to try out. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-16 21:46 ` Erik Brakkee @ 2010-12-24 18:19 ` Erik Brakkee 0 siblings, 0 replies; 19+ messages in thread From: Erik Brakkee @ 2010-12-24 18:19 UTC (permalink / raw) To: Erik Brakkee; +Cc: Kenni Lund, kvm Erik Brakkee wrote: > Erik Brakkee wrote: >> <quote who="Kenni Lund"> >>> 2010/12/14 Erik Brakkee<erik@brakkee.org>: >>>> Daniel P. Berrange wrote: >>>>> On Tue, Dec 14, 2010 at 12:55:04PM +0100, Kenni Lund wrote: >>>>> >>>>>> 2010/12/14 Erik Brakkee<erik@brakkee.org>: >>>>>> >>>>>>>> From: Kenni Lund<kenni@kelu.dk> >>>>>>>> 2010/12/14 Erik Brakkee<erik@brakkee.org>: >>>>>>>> >>>>>>>>>> From: Kenni Lund<kenni@kelu.dk> >>>>>>>>>> >>>>>>>>>>> Does this mean I have a chance now that PCI passthrough of my >>>>>>>>>>> WinTV >>>>>>>>>>> PVR-500 >>>>>>>>>>> might work now? >>>>>>>>>>> >>>>>>>>>> Passthrough of a PVR-500 has been working for a long time. I've >>>>>>>>>> been >>>>>>>>>> running with passthrough of a PVR-500 in my HTPC, since >>>>>>>>>> November/December 2009...so it should work with any recent >>>>>>>>>> kernel >>>>>>>>>> and >>>>>>>>>> any recent version of qemu-kvm you can find today - No patching >>>>>>>>>> needed. The only issue I had with the PVR-500 card, was when *I* >>>>>>>>>> didn't free up the shared interrupts...once I fixed that, it >>>>>>>>>> "just >>>>>>>>>> worked". >>>>>>>>>> >>>>>>>>> How did you free up those shared interrupts then? I tried >>>>>>>>> different >>>>>>>>> slots >>>>>>>>> but always get conflicts with the USB irqs. >>>>>>>>> >>>>>>>> I did an unbind of the conflicting device (eg. disabled it). I >>>>>>>> moved >>>>>>>> the PVR-500 card around in the different slots and once I got a >>>>>>>> conflict with the integrated sound card, I left the PVR-500 >>>>>>>> card in >>>>>>>> that slot (it's a headless machine, so no need for sound) and >>>>>>>> configured unbind of the sound card at boot time. On my old >>>>>>>> system I >>>>>>>> think it was conflicting with one of the USB controllers as well, >>>>>>>> but >>>>>>>> it didn't really matter, as I only lost a few of the ports on the >>>>>>>> back >>>>>>>> of the computer for that particular USB controller - I still had >>>>>>>> plenty of USB ports left and if I really needed more ports, I >>>>>>>> could >>>>>>>> just plug in an extra USB PCI card. >>>>>>>> >>>>>>>> My /etc/rc.local boot script looks like the following today: >>>>>>>> -- >>>>>>>> #Remove HDA conflicting with ivtv1 >>>>>>>> echo "0000:00:1b.0"> /sys/bus/pci/drivers/HDA\ Intel/unbind >>>>>>>> >>>>>>>> # ivtv0 >>>>>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/new_id >>>>>>>> echo "0000:04:08.0"> /sys/bus/pci/drivers/ivtv/unbind >>>>>>>> echo "0000:04:08.0"> /sys/bus/pci/drivers/pci-stub/bind >>>>>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/remove_id >>>>>>>> >>>>>>>> # ivtv1 >>>>>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/new_id >>>>>>>> echo "0000:04:09.0"> /sys/bus/pci/drivers/ivtv/unbind >>>>>>>> echo "0000:04:09.0"> /sys/bus/pci/drivers/pci-stub/bind >>>>>>>> echo "4444 0016"> /sys/bus/pci/drivers/pci-stub/remove_id >>>>>>>> >>>>>>> I did not try unbinding the usb device so I can also try that. >>>>>>> >>>>>>> I don'.t understand what is happening with the 4444 0016. I >>>>>>> configured >>>>>>> the >>>>>>> pci card in kvm and I believe kvm does the binding to pci-stub in >>>>>>> recent >>>>>>> versions. Where is the 4444 0016%oming from? >>>>>>> >>>>>> Okay, qemu-kvm might do it today, I don't know - I haven't changed >>>>>> that script for the past year. But are you sure that it's not >>>>>> libvirt/virsh/virt-manager which does that for you? >>>>>> >>>>> If you use the managed="yes" attribute on the<hostdev> in libvirt >>>>> XML, then libvirt will automatically do the pcistub bind/unbind, >>>>> followed by a device reset at guest startup& the reverse at >>>>> shutdown. >>>>> If you have conflicting devices on the bus though, libvirt won't >>>>> attempt to unbind them, unless you had also explicitly assigned all >>>>> those conflicting devices to the same guest. >>>>> >>>>> Daniel >>>>> >>>> I definitely have to try again (right now having some stability >>>> problems >>>> on >>>> the server that I am debugging). >>>> >>>> The shared IRQs are as follows: >>>> >>>> 16: 0 0 0 0 >>>> 0 0 >>>> 0 0 IO-APIC-fasteoi uhci_hcd:usb3 >>>> 18: 252995 0 0 0 >>>> 0 0 >>>> 0 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb8, >>>> ivtv0 >>>> 19: 58281 0 0 0 >>>> 0 0 >>>> 0 0 IO-APIC-fasteoi ata_piix, ata_piix, >>>> uhci_hcd:usb5, >>>> uhci_hcd:usb7, ivtv1 >>>> 21: 0 0 0 0 >>>> 0 0 >>>> 0 0 IO-APIC-fasteoi uhci_hcd:usb4 >>>> 23: 713 6906 0 76919 >>>> 0 0 >>>> 0 0 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb6 >>>> >>>> So I have IRQ sharing with usb1, usb8, usb5, usb7. >>> Uff....and your ata HDD controller. I guess i was much luckier than >>> you are, my ivtv0 didn't conflict at all and ivtv1 only conflicted >>> with USB. >>> >>>> I have also read that >>>> ehci refers to USB 2.0 and uhci to USB 1.1 is that correct? Anyway, >>>> how >>>> would I now identify the USB PCI devices that I would need to >>>> unbind to >>>> get >>>> rid of the sharing with the USB ports? >>> Play around with: >>> lspci -v >>> lspci -n >>> lsusb -v >>> lsusb -t >>> >>> You can also just start by unbinding the first one and take note when >>> you hit the right ones...once you unbind one, it will disappear from >>> cat /proc/interrupts. When you're down to having only ivtv0 on one >>> interrupt and only ivtv1 on another interrupt, then you're ready to >>> bind with pci-stub and boot your guest. >>> >>>> It also doesn't really matter in >>>> which slot I put the PVR-500 card because both cards share IRQs >>>> with USB >>>> in >>>> all cases. >>> You also have your conflicting ata controller to take into >>> consideration. I don't remember if "ata_piix" and "ata_piix" is IDE >>> only, if it is, you might not even use it. Otherwise it might be >>> easier for you to run qemu-kvm git with the new patches for shared >>> interrupts...it really depends on your setup. >>> >>>> I have also used an add on USB PCI card but still got these >>>> conflicts. I >>>> was >>>> considering to get a PCIe USB card instead to try out in the hope that >>>> that >>>> would use different IRQs. Is that a realistic expectation? That way, I >>>> could >>>> disable all on-board USB (in the BIOS even) and use the add-on USB >>>> only. >>> Most likely, the PCIe USB 3.0 card I bought supported MSI-X, so it got >>> its own unique IRQs which wasn't shared with anything. >>> >> I think I am a bit out of luck here. The two IRQs that are >> interesting are >> 18 and 19. One of them has the SMBUS and the other one has SATA >> drives. I >> think the best for me is to wait until shared IRQ support in KVM is >> available. My only option is to try it out every once in a while. >> >> >> > Meanwhile, I haven't given up and experimented with determining the > effect of unbinding the various USB PCI devices. I haven't tried > virtualization yet though. The problem is I managed to free up one > tuner (ivtv0) from shared IRQs, all USB ports are still operational, > but then how would I determine which USB ports still support USB 2.0? > > I have now at least found a way to make ivtv0 available without any > shared IRQ by unbinding two USB PCI devices: one UHCI and one EHCI > device. > > The list of USB PCI devices is: > > 00:1a.0 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB > UHCI Controller #4 > 00:1a.1 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB > UHCI Controller #5 > 00:1a.2 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB > UHCI Controller #6 > 00:1a.7 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB2 > EHCI Controller #2 > 00:1d.0 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB > UHCI Controller #1 > 00:1d.1 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB > UHCI Controller #2 > 00:1d.2 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB > UHCI Controller #3 > 00:1d.7 USB Controller: Intel Corporation 82801JI (ICH10 Family) USB2 > EHCI Controller #1 > > I unbound 00:1a.7 and 00:1d.2. To my great surprise, all USB ports on > the server are still operational. I tried this by inserting a USB > memory stick and trying to mount it. The motherboard has a total of 8 > USB connections with 6 USB in use, I don't really understand this. Was > I simply in luck? > > The output of lsucb after doing the unbinding is: > > Bus 005 Device 003: ID 046b:ff10 American Megatrends, Inc. > Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub > Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub > Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub > Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub > Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub > Bus 006 Device 002: ID 045e:001e Microsoft Corp. IntelliMouse Explorer > Bus 006 Device 003: ID 051d:0002 American Power Conversion > Uninterruptible Power Supply > Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub > > Alternatively, I am also considering to by a new PCIe card. In > particular, the ASUS U3S6 looks interesting because it has 2 PCIe > ports and 2 USB 3.0 ports. This means that I could disable 2 more USB > devices (00:1a.2 and 00:1d.1) and get some extra USB devices. The > ata_piix drivers are being used for an internal disk and CDROM. The > RAID array is managed through arcmsr (Areca) so I don't have a problem > there. Of course, if I managed to get completely free of shared IRQs > with this add-on card, then the issue of determining which of the > remaining ports is still USB 2.0 is not that important anymore. > > So, enough ideas to try out. > In the mean while I figured it out completely. I disabled the 4 USB PCI devices as mentioned above which leads to one USB port becoming unusable (acceptable). Then I could configure the SATA 'handling' in the BIOS. The default was plain SATA, but I could also select Intel RAID, Adaptec RAID, and AHCI. In any case Intel RAID and AHCI solved the problem with the ata_piix shared IRQ (did not check), so I used the most modern one (Intel RAID). (motherboard Supermicro X8DTi-F). Meanwhile I did a successful PCI passthrough test recording two channels simultanesously and it worked! PS. I used to do backups to a backup SATA disk over USB but since I turned on the Intel RAID, the SATA ports on the motherboard became hot swappable so I can now backup over (e)SATA which gives me a 5 times speedup in bandwidth and frees up one USB port, compensating for the one I lost. So all is well and I can continue my virtualized setup according to my original plans. Cheers Erik ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: USB Passthrough 1.1 performance problem... 2010-12-12 11:47 USB Passthrough 1.1 performance problem Erik Brakkee 2010-12-12 20:59 ` Erik Brakkee @ 2010-12-13 10:36 ` Gerd Hoffmann 1 sibling, 0 replies; 19+ messages in thread From: Gerd Hoffmann @ 2010-12-13 10:36 UTC (permalink / raw) To: Erik Brakkee; +Cc: KVM mailing list Hi, > I am using a tv card in a VM and get jerky video.As I understand it, the > VM is using USB 1.1. However, when I set the USB controller in the BIOS > of my server to Fullspeed (12 Mbit/s) which is the USB 1.1 speed I am > able to get perfect results on the host but still on the guest the video > is jerky. There is a patch series from Hans de Goede on qemu-devel which adds buffering for isochronous usb transfers to the usb passthrough code. Certainly worth a try. cheers, Gerd ^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2010-12-31 17:00 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-12 11:47 USB Passthrough 1.1 performance problem Erik Brakkee
2010-12-12 20:59 ` Erik Brakkee
2010-12-12 22:16 ` Jan Kiszka
2010-12-12 22:31 ` Erik Brakkee
2010-12-13 8:25 ` Alexander Graf
2010-12-14 10:02 ` Avi Kivity
2010-12-14 10:11 ` Alexander Graf
2010-12-31 17:00 ` Kevin O'Connor
2010-12-13 23:27 ` Jan Kiszka
2010-12-13 23:50 ` Kenni Lund
[not found] ` <3047113345.976756218@brakkee.org>
2010-12-14 0:47 ` Kenni Lund
[not found] ` <5085473063.976781602@brakkee.org>
2010-12-14 11:55 ` Kenni Lund
2010-12-14 12:05 ` Daniel P. Berrange
2010-12-14 21:47 ` Erik Brakkee
2010-12-14 23:44 ` Kenni Lund
2010-12-16 16:23 ` Erik Brakkee
2010-12-16 21:46 ` Erik Brakkee
2010-12-24 18:19 ` Erik Brakkee
2010-12-13 10:36 ` Gerd Hoffmann
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox