Skip to content
Snippets Groups Projects
  1. Dec 18, 2013
  2. Dec 17, 2013
  3. Dec 16, 2013
  4. Dec 06, 2013
  5. Nov 28, 2013
  6. Oct 10, 2013
    • Avi Kivity's avatar
      build: define _KERNEL everywhere · 95ce17e3
      Avi Kivity authored
      We have _KERNEL defines scattered throughout the code, which makes
      understanding it difficult.
      
      Define it just once, and adjust the source to build.
      
      We define it in an overridable variable, so that non-kernel imported code
      can undo it.
      95ce17e3
  7. Oct 02, 2013
  8. Sep 15, 2013
    • Nadav Har'El's avatar
      Add copyright statement to drivers/* · c0e0ebf2
      Nadav Har'El authored
      Add Cloudius copyright and license statement to drivers/*.
      
      A couple of header files were based on Linux's BSD-licensed header files
      (e.g., include/uapi/linux/virtio_net.h) so they included the BSD license,
      but not any copyright statement, so we can just replace that by our own
      statement of the BSD license.
      c0e0ebf2
  9. Aug 12, 2013
  10. Jul 28, 2013
  11. Jul 24, 2013
  12. Jul 11, 2013
    • Dor Laor's avatar
      Move from a request array approach back to allocation. · 5bcb95d9
      Dor Laor authored
      virtio_blk pre-allocates requests into a cache to avoid re-allocation
      (possibly an unneeded optimization with the current allocator).  However,
      it doesn't take into account that requests can be completed out-of-order,
      and simply reuses requests in a cyclic order. Noted by Avi although
      I had it made using a peak into the index ring but its too complex
      solution. There is no performance degradation w/ smp due to the good
      allocator we have today.
      5bcb95d9
  13. Jul 10, 2013
    • Dor Laor's avatar
      Allow parallel execution of {add|get}_buff, prevent fast path allocs · 350fa518
      Dor Laor authored
      virtio-vring and it's users (net/blk) were changed so no request
      header will be allocated on run time except for init. In order to
      do that, I have to change get_buf and break it into multiple parts:
      
              // Get the top item from the used ring
              void* get_buf_elem(u32 *len);
              // Let the host know we consumed the used entry
              // We separate that from get_buf_elem so no one
              // will re-cycle the request header location until
              // we're finished with it in the upper layer
              void get_buf_finalize();
              // GC the used items that were already read to be emptied
              // within the ring. Should be called by add_buf
              // It was separated from the get_buf flow to allow parallelism of the two
              void get_buf_gc();
      
      As a result, it was simple to get rid of the shared lock that protected
      _avail_head variable before. Today only the thread that calls add_buf
      updates this variable (add_buf calls get_buf_gc internally).
      
      There are two new locks instead:
        - virtio-net tx_gc lock - very rarely it can be accessed
          by the tx_gc thread or normally by the tx xmit thread
        - virtio-blk make_requests - there are parallel requests
      350fa518
    • Dor Laor's avatar
      Trivial: Move code above, preparation for preventing past path allocations for... · cc8cc19e
      Dor Laor authored
      Trivial: Move code above, preparation for preventing past path allocations for the virtio request data
      cc8cc19e
  14. Jul 04, 2013
    • Dor Laor's avatar
      Trivial: get rid of sglist entirely · 18beb1b6
      Dor Laor authored
      18beb1b6
    • Dor Laor's avatar
      Sglist virtio usage refactore · ddef97f6
      Dor Laor authored
      Use a single instance per queue vector of sglist data.
      Before this patch sglist was implemented as a std::list
      which caused it to allocate heap memory and travel through pointers.
      Now we use a single vector per queue to temoprary keep the
      buffer data between the upper virtio layer and the lower one.
      ddef97f6
  15. Jul 03, 2013
    • Dor Laor's avatar
      Reduce singifincantly the amount of tx interrupts · 6a323929
      Dor Laor authored
      Instead of enabling interrupts for tx by the host when we have
      a single used pkt in the ring, wait until we have 1/2 ring.
      This improves the amount of tx irqs from one per pkt to practically
      zero (note that we actively call tx_gc if there is not place on the
      ring when doing tx). There was a 40% performance boost on the
      netperf rx test
      6a323929
  16. Jun 20, 2013
    • Dor Laor's avatar
      Add mergeable buffers support for virtio-net · d487ffd1
      Dor Laor authored
      The feature allows the hypervisor to batch several packets together
      as one large SG list. Once such header is received, the guest rx
      routine interates over the list and assembles a mega mbuf.
      
      The patch also simplifies the rx path by using a single buffer for
      the virtio data and its header. This shrinks the sg list from size of
      two into a single one.
      
      The issue is that at the moment I haven't seen packets w/ mbuf > 1
      being received. Linux guest does receives such packets here and there.
      It may be due to the use of offload features that enalrge the packet size
      d487ffd1
  17. Jun 17, 2013
  18. Jun 09, 2013
  19. Jun 06, 2013
    • Guy Zana's avatar
      msix: provide high priority handler when registering interrupt · 66066b07
      Guy Zana authored
      we have to disable virio interrupts before msix EOI so disabling
      must be done in the ISR handler context. This patch adds an std::function
      isr to the bindings.
      
      references to the rx and tx queues are saved as well (_rx_queue and _tx_queue),
      so they can be used in the ISR context.
      
      this patch reduces virtio net rx interrupts by a factor of 450.
      66066b07
  20. May 22, 2013
    • Dor Laor's avatar
      Use a free_deleter for unique_prt · 54be2062
      Dor Laor authored
      There was a bug caused by calling um.get() in the destructor
      still left the unique_ptr armed with the pointer. Using free_deleter
      is cleaner and works too.
      54be2062
    • Dor Laor's avatar
      Fix mbuf leak · ce35ec3f
      Dor Laor authored
      Put the right pointer into the smart pointer.
      Noted by Guy
      ce35ec3f
  21. May 16, 2013
    • Dor Laor's avatar
      Decrease the rx mbus size. · 090d9d61
      Dor Laor authored
      Use size of MCLBYTES which is 2k for the mbufs instead of the
      previous page size. As TODO I need to add an mtu change function
      that will take this number and uma alloc as param
      090d9d61
    • Dor Laor's avatar
      Track mbuf deallocation · 21eede3d
      Dor Laor authored
      Using unique_ptr and make sure we don't leak.
      Note that the FreeBSD convention is to let the upper protocols to
      free the mbuf in the receive path (without them increasing the ref count)
      21eede3d
  22. May 14, 2013
  23. Apr 29, 2013
    • Guy Zana's avatar
      ioctl: use osv/ioctl.h · 617dceed
      Guy Zana authored
          1. use osv/ioctl.h in the netport, main.c and various tests
          2. change ioctl prototype to agree with glibc.
             we now use the variadic prototype specified in sys/ioctl.h
      617dceed
  24. Apr 02, 2013
  25. Mar 22, 2013
Loading