Introduce QEMUDevice, making the ioport/iomem->device relationship visible.
At the moment it only contains a lock, but could be extended. With it the following is possible: - vcpu's to read/write via ioports/iomem while the iothread is working on some unrelated device, or just copying data from the kernel. - vcpu's to read/write via ioports/iomem to different devices simultaneously. This patchset is only a proof of concept kind of thing, so only serial+raw image are supported. Tried two benchmarks, iperf and tiobench. With tiobench the reported latency is significantly lower (20%+), but throughput with IDE is only slightly higher. Expect to see larger improvements with a higher performing IO scheme (SCSI still buggy, looking at it). The iperf numbers are pretty good. Performance of UP guests increase slightly but SMP is quite significant. Note that workloads with multiple busy devices (such as databases, web servers) should be the real winners. What is the feeling on this? Its not _that_ intrusive and can be easily NOP'ed out for QEMU. iperf -c 4 -i 60 ---- e1000 UP guest: global lock [SUM] 0.0-10.0 sec 156 MBytes 131 Mbits/sec [SUM] 0.0-10.0 sec 151 MBytes 126 Mbits/sec [SUM] 0.0-10.0 sec 151 MBytes 126 Mbits/sec [SUM] 0.0-10.0 sec 151 MBytes 127 Mbits/sec per-device lock [SUM] 0.0-10.0 sec 164 MBytes 137 Mbits/sec [SUM] 0.0-10.0 sec 161 MBytes 135 Mbits/sec [SUM] 0.0-10.0 sec 158 MBytes 133 Mbits/sec [SUM] 0.0-10.0 sec 171 MBytes 143 Mbits/sec SMP guest (4-way) global lock [SUM] 0.0-13.0 sec 402 MBytes 259 Mbits/sec [SUM] 0.0-10.1 sec 469 MBytes 391 Mbits/sec [SUM] 0.0-10.1 sec 477 MBytes 397 Mbits/sec [SUM] 0.0-10.0 sec 469 MBytes 393 Mbits/sec per-device lock [SUM] 0.0-13.0 sec 471 MBytes 304 Mbits/sec [SUM] 0.0-10.2 sec 532 MBytes 439 Mbits/sec [SUM] 0.0-10.1 sec 510 MBytes 423 Mbits/sec [SUM] 0.0-10.1 sec 529 MBytes 441 Mbits/sec ----- virtio-net UP guest: global lock [SUM] 0.0-13.0 sec 192 MBytes 124 Mbits/sec [SUM] 0.0-10.0 sec 213 MBytes 178 Mbits/sec [SUM] 0.0-10.0 sec 213 MBytes 178 Mbits/sec [SUM] 0.0-10.0 sec 213 MBytes 178 Mbits/sec per-device lock [SUM] 0.0-13.0 sec 193 MBytes 125 Mbits/sec [SUM] 0.0-10.0 sec 210 MBytes 176 Mbits/sec [SUM] 0.0-10.0 sec 218 MBytes 183 Mbits/sec [SUM] 0.0-10.0 sec 216 MBytes 181 Mbits/sec SMP guest: global lock [SUM] 0.0-13.0 sec 446 MBytes 288 Mbits/sec [SUM] 0.0-10.0 sec 521 MBytes 437 Mbits/sec [SUM] 0.0-10.0 sec 525 MBytes 440 Mbits/sec [SUM] 0.0-10.0 sec 533 MBytes 446 Mbits/sec per-device lock [SUM] 0.0-13.0 sec 512 MBytes 331 Mbits/sec [SUM] 0.0-10.0 sec 617 MBytes 517 Mbits/sec [SUM] 0.0-10.1 sec 631 MBytes 527 Mbits/sec [SUM] 0.0-10.0 sec 626 MBytes 524 Mbits/sec -- ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ kvm-devel mailing list kvm-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/kvm-devel