Avi Kivity wrote:
Anthony Liguori wrote:
Why not merge these bits prior to merging virtio? They aren't kvm
specific and would be good in mainline qemu.
I'd rather have a consumer of an interface before merging the actual
infrastructure.
So merge them all into qemu at the same time (as separate patches, if
you like).
But that will require refactoring a lot of these optimizations. In
order to do that right, they need to be presented on qemu-devel.
It's a whole lot easier to do that incrementally so that people can
digest it all instead of blasting a big series.
Can you elaborate? Which interfaces will need rework, and why?
Last time I tried, virtio-net doesn't work with slirp. I believe it's
either because of the GSO changes (unlikely) or because of the
can_receive changes (more likely). The can_receive changes probably
need some refactoring to be more slirp friendly. The GSO changes are a
bit vlan unfriendly.
Right now, you could construct something like -net tap -net
nic,model=virtio -net model=e1000. e1000 doesn't support GSO and bad
things will happen from this. It's very centric to the single-nic,
single-host driver model. Also, exposing something like
tap_has_vnet_hdr() to the actual network cards violates the layering.
The network cards shouldn't have any knowledge of what types of host
drivers there are, just what features a particular VLAN supports.
It's also unclear how you handle things like NIC hot-plug. What if you
add a nic that doesn't support GSO to a VLAN that is using GSO? What
about migration? What if you migrate from a host that has GSO support
to a host that doesn't support GSO? This later problem is hard and
would require either a feature renegotiation mechanism in virtio or
software implementation of GSO within QEMU.
The amount of code duplication is frightening.
I've already got that worked out. I need to prepare and commit a
patch to fix stw/lduw in upstream QEMU and then we can switch to
always using those functions in KVM. I've done some performance
testing and that seems to be enough. With that, there is no longer
any scary code duplication.
Yes, your patch on qemu-devel looks good. Even if we do have a
performance problem (which may well turn out after we optimize things
some more), it's easy to have a cached pointer along with the phys
address.
And I don't think that patch matters anymore :-/ I was doing
measurements with iperf doing TX in the guest. The numbers are very
erratic and I mistakenly attributed a boost to that patch.
Measuring based on RX seems to be more reliable since we're pegging the
CPU. We idle too much in TX due to the tx mitigation timeouts.
Regards,
Anthony Liguori
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html