NetworkingTodo: Difference between revisions

From KVM
No edit summary
(add links and more info. link to low latency net patches)
Line 30: Line 30:
   to program mac/vlan filtering in NIC
   to program mac/vlan filtering in NIC
   Helps performance and security on noisy LANs
   Helps performance and security on noisy LANs
  http://comments.gmane.org/gmane.linux.network/266546
   Developer: Vlad Yasevich
   Developer: Vlad Yasevich


* allow handling short packets from softirq or VCPU context
* reduce networking latency:
  allow handling short packets from softirq or VCPU context
  Plan:
    We are going through the scheduler 3 times
    (could be up to 5 if softirqd is involved)
    Consider RX: host irq -> io thread -> VCPU thread ->
    guest irq -> guest thread.
    This adds a lot of latency.
    We can cut it by some 1.5x if we do a bit of work
    either in the VCPU or softirq context.
   Testing: netperf TCP RR - should be improved drastically
   Testing: netperf TCP RR - should be improved drastically
           netperf TCP STREAM guest to host - no regression
           netperf TCP STREAM guest to host - no regression
Line 38: Line 48:


* Flexible buffers: put virtio header inline with packet data
* Flexible buffers: put virtio header inline with packet data
  https://patchwork.kernel.org/patch/1540471/
   Developer: MST
   Developer: MST


Line 51: Line 62:


=== projects that are not started yet - no owner ===
=== projects that are not started yet - no owner ===
* netdev polling for virtio.
  See http://lkml.indiana.edu/hypermail/linux/kernel/1303.0/00553.html


* receive side zero copy
* receive side zero copy

Revision as of 06:41, 23 May 2013

This page should cover all networking related activity in KVM, currently most info is related to virtio-net.

TODO: add bugzilla entry links.

=== projects in progress. contributions are still very wellcome!

  • vhost-net scalability tuning: threading for many VMs
     Plan: switch to workqueue shared by many VMs
     Developer: Shirley Ma?, MST
     Testing: netperf guest to guest
  • multiqueue support in macvtap
      multiqueue is only supported for tun.
      Add support for macvtap.
      Developer: Jason Wang
  • enable multiqueue by default
      Multiqueue causes regression in some workloads, thus
      it is off by default. Detect and enable/disable
      automatically so we can make it on by default
      Developer: Jason Wang
  • guest programmable mac/vlan filtering with macvtap
       Developer: Dragos Tatulea?, Amos Kong
       Status: GuestProgrammableMacVlanFiltering
  • bridge without promisc mode in NIC
 given hardware support, teach bridge
 to program mac/vlan filtering in NIC
 Helps performance and security on noisy LANs
 http://comments.gmane.org/gmane.linux.network/266546
 Developer: Vlad Yasevich
  • reduce networking latency:
 allow handling short packets from softirq or VCPU context
 Plan:
   We are going through the scheduler 3 times
   (could be up to 5 if softirqd is involved)
   Consider RX: host irq -> io thread -> VCPU thread ->
   guest irq -> guest thread.
   This adds a lot of latency.
   We can cut it by some 1.5x if we do a bit of work
   either in the VCPU or softirq context.
 Testing: netperf TCP RR - should be improved drastically
          netperf TCP STREAM guest to host - no regression
 Developer: MST
  • Flexible buffers: put virtio header inline with packet data
 https://patchwork.kernel.org/patch/1540471/
 Developer: MST
  • device failover to allow migration with assigned devices
 https://fedoraproject.org/wiki/Features/Virt_Device_Failover
 Developer: Gal Hammer, Cole Robinson, Laine Stump, MST
  • Reuse vringh code for better maintainability
 Developer: Rusty Russell
  • Improve stats, make them more helpful for per analysis
 Developer: Sriram Narasimhan

projects that are not started yet - no owner

  • netdev polling for virtio.
 See http://lkml.indiana.edu/hypermail/linux/kernel/1303.0/00553.html
  • receive side zero copy
 The ideal is a NIC with accelerated RFS support,
 So we can feed the virtio rx buffers into the correct NIC queue.
 Depends on non promisc NIC support in bridge.
  • IPoIB infiniband bridging
 Plan: implement macvtap for ipoib and virtio-ipoib
  • RDMA bridging
  • use kvm eventfd support for injecting level interrupts,
 enable vhost by default for level interrupts
  • DMA emgine (IOAT) use in tun
  • virtio API extension: improve small packet/large buffer performance:
 support "reposting" buffers for mergeable buffers,
 support pool for indirect buffers

=== vague ideas: path to implementation not clear

  • ring redesign:
     find a way to test raw ring performance 
     fix cacheline bounces 
     reduce interrupts


  • support more queues
    We limit TUN to 8 queues 
  • irq/numa affinity:
    networking goes much faster with irq pinning:
    both with and without numa.
    what can be done to make the non-pinned setup go faster?
  • reduce conflict with VCPU thread
   if VCPU and networking run on same CPU,
   they conflict resulting in bad performance.
   Fix that, push vhost thread out to another CPU
   more aggressively.
  • rx mac filtering in tun
       the need for this is still not understood as we have filtering in bridge
       we have a small table of addresses, need to make it larger
       if we only need filtering for unicast (multicast is handled by IMP filtering)
  • vlan filtering in tun
       the need for this is still not understood as we have filtering in bridge
  • vlan filtering in bridge
       IGMP snooping in bridge should take vlans into account


testing projects

Keeping networking stable is highest priority.

  • Run weekly test on upstream HEAD covering test matrix with autotest

non-virtio-net devices

  • e1000: stabilize

test matrix

DOA test matrix (all combinations should work):

       vhost: test both on and off, obviously
       test: hotplug/unplug, vlan/mac filtering, netperf,
            file copy both ways: scp, NFS, NTFS
       guests: linux: release and debug kernels, windows
       conditions: plain run, run while under migration,
               vhost on/off migration
       networking setup: simple, qos with cgroups
       host configuration: host-guest, external-guest