qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] USB 2.0 printer passthrough very slow


From: Reeted
Subject: [Qemu-devel] USB 2.0 printer passthrough very slow
Date: Tue, 03 Apr 2012 14:26:37 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:10.0.2) Gecko/20120216 Thunderbird/10.0.2

Hello all,
I have virtualized a Windows 2000 machine, using usb-passthrough as in:

http://fossies.org/unix/privat/qemu-1.0.1.tar.gz:a/qemu-1.0.1/docs/usb2.txt

in companion controller mode, i.e. specifying "bus=ehci.0" for both 1.1 devices and 2.0 devices.

I used "companion mode" because in my tests I had problems with two separate busses: attaching a 1.1 device to the emulated ehci bus was notifying errors of incompatible speed and would not work, while attaching it to the emulated 1.1 bus had another problem which I don't remember exactly... I think either it was not possible or qemu was crashing. But with companion mode it appeared to work.

In my early tests I did notice that ehci emulation was rather slow: reading an USB flash key sequentially was yelding 6.5MB/sec (from the host it was much faster like 20MB/sec afair), but I guessed that would be enough for an USB printer. I have not actually tested if non-companion mode would be faster, maybe I could have tried that... If you think it would be faster please tell.

After virtualizing Windows 2000 the problem became very apparent in printing! My canon IP4700 now takes 3 to 4 minutes for a print job to execute and clear from the queue. That's almost unusable.

Note that the speed is normal once the actual printing initiates, I can print 10 pages in a row (in a single job) at normal speed, but it's very slow during the phase of submitting a new print job to the queue, and removing it from the queue, or submitting a "go-poweroff" command to the queue, or changing anything about printer state.

I am guessing that maybe when the stream of data is mainly one way, it performs reasonably, while things like handshake with many message/response it probably goes very slow.

Note that I have blacklisted usblp module in the host and noone is claiming the printer from the host.

Dmesg since connecting the printer: (only 3 messages)
[ 6870.292017] usb 1-3: new high speed USB device number 3 using ehci_hcd
[ 6872.676028] usb 1-3: reset high speed USB device number 3 using ehci_hcd
[ 6873.144032] usb 1-3: reset high speed USB device number 3 using ehci_hcd

Qemu version is: Ubuntu Precise's qemu-kvm 1.0+noroms-0ubuntu6

info usbhost:
  Bus 1, Addr 3, Port 3, Speed 480 Mb/s
    Class 00: USB device 04a9:10d2, iP4700 series
  Auto filters:
    Bus 1, Addr *, Port 5, ID *:*
    Bus 1, Addr *, Port 4, ID *:*
    Bus 1, Addr *, Port 3, ID *:*
    Bus 4, Addr *, Port 1, ID *:*
    Bus 3, Addr *, Port 2, ID *:*
    Bus 3, Addr *, Port 1, ID *:*

info usb:
  Device 0.2, Port 1, Speed 12 Mb/s, Product QEMU USB Tablet
  Device 1.0, Port 1, Speed 1.5 Mb/s, Product USB Host Device
  Device 1.0, Port 2, Speed 1.5 Mb/s, Product USB Host Device
  Device 1.1, Port 3, Speed 480 Mb/s, Product iP4700 series
  Device 1.0, Port 4, Speed 1.5 Mb/s, Product USB Host Device
  Device 1.0, Port 5, Speed 1.5 Mb/s, Product USB Host Device
  Device 1.2, Port 6, Speed 12 Mb/s, Product QEMU USB Hub
  Device 1.0, Port 6.1, Speed 1.5 Mb/s, Product USB Host Device

Note I am also using usb tablet... I might remove that if you say that an ehci-only setup is likely to go faster.

Libvirt usb part:
<qemu:commandline>
<qemu:arg value='-device'/>
<qemu:arg value='ich9-usb-ehci1,id=ehci,addr=1d.7,multifunction=on'/>
<qemu:arg value='-device'/>
<qemu:arg value='ich9-usb-uhci1,id=uhci-1,addr=1d.0,multifunction=on,masterbus=ehci.0,firstport=0'/>
<qemu:arg value='-device'/>
<qemu:arg value='ich9-usb-uhci2,id=uhci-2,addr=1d.1,multifunction=on,masterbus=ehci.0,firstport=2'/>
<qemu:arg value='-device'/>
<qemu:arg value='ich9-usb-uhci3,id=uhci-3,addr=1d.2,multifunction=on,masterbus=ehci.0,firstport=4'/>
<qemu:arg value='-device'/>
<qemu:arg value='usb-host,bus=ehci.0,hostbus=1,hostport=5'/>
<qemu:arg value='-device'/>
<qemu:arg value='usb-host,bus=ehci.0,hostbus=1,hostport=4'/>
<qemu:arg value='-device'/>
<qemu:arg value='usb-host,bus=ehci.0,hostbus=1,hostport=3'/>
<qemu:arg value='-device'/>
<qemu:arg value='usb-host,bus=ehci.0,hostbus=4,hostport=1'/>
<qemu:arg value='-device'/>
<qemu:arg value='usb-host,bus=ehci.0,hostbus=3,hostport=2'/>
<qemu:arg value='-device'/>
<qemu:arg value='usb-host,bus=ehci.0,hostbus=3,hostport=1'/>
</qemu:commandline>

generated command line:
/usr/bin/kvm -S -M pc-1.0 -enable-kvm -m 2048 -smp 2,sockets=2,cores=1,threads=1 -name windows_cl3_v3.1 -uuid 0779e165-b11a-6d1c-fa92-f60ec5bdd9a7 -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/windows_cl3_v3.1.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=2012-04-02T20:37:15 -no-shutdown -boot order=c,menu=on -drive file=/dev/mapper/vg1-lv_cl3_v3.1,if=none,id=drive-ide0-0-0,format=raw,cache=writethrough,aio=native -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -drive file=/home/virtual_machines/ISO/ubuntu-11.10-desktop-amd64.iso,if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw,cache=writethrough,aio=native -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -netdev tap,fd=18,id=hostnet0 -device virtio-net-pci,event_idx=off,netdev=hostnet0,id=net0,mac=52:54:00:12:45:88,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -usb -device usb-tablet,id=input0 -vnc 127.0.0.1:0 -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4 -device ich9-usb-ehci1,id=ehci,addr=1d.7,multifunction=on -device ich9-usb-uhci1,id=uhci-1,addr=1d.0,multifunction=on,masterbus=ehci.0,firstport=0 -device ich9-usb-uhci2,id=uhci-2,addr=1d.1,multifunction=on,masterbus=ehci.0,firstport=2 -device ich9-usb-uhci3,id=uhci-3,addr=1d.2,multifunction=on,masterbus=ehci.0,firstport=4 -device usb-host,bus=ehci.0,hostbus=1,hostport=5 -device usb-host,bus=ehci.0,hostbus=1,hostport=4 -device usb-host,bus=ehci.0,hostbus=1,hostport=3 -device usb-host,bus=ehci.0,hostbus=4,hostport=1 -device usb-host,bus=ehci.0,hostbus=3,hostport=2 -device usb-host,bus=ehci.0,hostbus=3,hostport=1


Is this kind of performance to be expected with current status of ehci emulation in 1.0? Are there patches already I can backport to 1.0 (or use qemu development branch) to get higher speed?

Thanks for any help
R.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]