1. 12 6月, 2011 2 次提交
  2. 02 6月, 2011 1 次提交
  3. 19 4月, 2011 1 次提交
  4. 04 4月, 2011 1 次提交
  5. 29 3月, 2011 1 次提交
    • M
      virtio-pci: fix bus master work around on load · 89c473fd
      Michael S. Tsirkin 提交于
      Commit c81131db
      detects old guests by comparing virtio and
      PCI status. It attempts to do this on load,
      as well, but load_config callback in a binding
      is invoked too early and so the virtio status
      isn't set yet.
      
      We could add yet another callback to the
      binding, to invoke after load, but it
      seems easier to reuse the existing vmstate
      callback.
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      Cc: Alexander Graf <agraf@suse.de>
      89c473fd
  6. 21 3月, 2011 2 次提交
  7. 02 2月, 2011 1 次提交
  8. 11 1月, 2011 1 次提交
  9. 10 1月, 2011 2 次提交
    • S
      virtio-pci: Use ioeventfd for virtqueue notify · 25db9ebe
      Stefan Hajnoczi 提交于
      Virtqueue notify is currently handled synchronously in userspace virtio.  This
      prevents the vcpu from executing guest code while hardware emulation code
      handles the notify.
      
      On systems that support KVM, the ioeventfd mechanism can be used to make
      virtqueue notify a lightweight exit by deferring hardware emulation to the
      iothread and allowing the VM to continue execution.  This model is similar to
      how vhost receives virtqueue notifies.
      
      The result of this change is improved performance for userspace virtio devices.
      Virtio-blk throughput increases especially for multithreaded scenarios and
      virtio-net transmit throughput increases substantially.
      
      Some virtio devices are known to have guest drivers which expect a notify to be
      processed synchronously and spin waiting for completion.
      For virtio-net, this also seems to interact with the guest stack in strange
      ways so that TCP throughput for small message sizes (~200bytes)
      is harmed. Only enable ioeventfd for virtio-blk for now.
      
      Care must be taken not to interfere with vhost-net, which uses host
      notifiers.  If the set_host_notifier() API is used by a device
      virtio-pci will disable virtio-ioeventfd and let the device deal with
      host notifiers as it wishes.
      
      Finally, there used to be a limit of 6 KVM io bus devices inside the
      kernel.  On such a kernel, don't use ioeventfd for virtqueue host
      notification since the limit is reached too easily.  This ensures that
      existing vhost-net setups (which always use ioeventfd) have ioeventfds
      available so they can continue to work.
      
      After migration and on VM change state (running/paused) virtio-ioeventfd
      will enable/disable itself.
      
       * VIRTIO_CONFIG_S_DRIVER_OK -> enable virtio-ioeventfd
       * !VIRTIO_CONFIG_S_DRIVER_OK -> disable virtio-ioeventfd
       * virtio_pci_set_host_notifier() -> disable virtio-ioeventfd
       * vm_change_state(running=0) -> disable virtio-ioeventfd
       * vm_change_state(running=1) -> enable virtio-ioeventfd
      Signed-off-by: NStefan Hajnoczi <stefanha@linux.vnet.ibm.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      25db9ebe
    • S
      virtio-pci: Rename bugs field to flags · 3dbca8e6
      Stefan Hajnoczi 提交于
      The VirtIOPCIProxy bugs field is currently used to enable workarounds
      for older guests.  Rename it to flags so that other per-device behavior
      can be tracked.
      
      A later patch uses the flags field to remember whether ioeventfd should
      be used for virtqueue host notification.
      Signed-off-by: NStefan Hajnoczi <stefanha@linux.vnet.ibm.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      3dbca8e6
  10. 12 12月, 2010 1 次提交
  11. 21 11月, 2010 2 次提交
  12. 07 10月, 2010 1 次提交
  13. 08 9月, 2010 3 次提交
    • A
      virtio-net: Introduce a new bottom half packet TX · a697a334
      Alex Williamson 提交于
      Based on a patch from Mark McLoughlin, this patch introduces a new
      bottom half packet transmitter that avoids the latency imposed by
      the tx_timer approach.  Rather than scheduling a timer when a TX
      packet comes in, schedule a bottom half to be run from the iothread.
      The bottom half handler first attempts to flush the queue with
      notification disabled (this is where we could race with a guest
      without txburst).  If we flush a full burst, reschedule immediately.
      If we send short of a full burst, try to re-enable notification.
      To avoid a race with TXs that may have occurred, we must then
      flush again.  If we find some packets to send, the guest it probably
      active, so we can reschedule again.
      
      tx_timer and tx_bh are mutually exclusive, so we can re-use the
      tx_waiting flag to indicate one or the other needs to be setup.
      This allows us to seamlessly migrate between timer and bh TX
      handling.
      
      The bottom half handler becomes the new default and we add a new
      tx= option to virtio-net-pci.  Usage:
      
      -device virtio-net-pci,tx=timer # select timer mitigation vs "bh"
      Signed-off-by: NAlex Williamson <alex.williamson@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      a697a334
    • A
      virtio-net: Limit number of packets sent per TX flush · e3f30488
      Alex Williamson 提交于
      If virtio_net_flush_tx() is called with notification disabled, we can
      race with the guest, processing packets at the same rate as they
      get produced.  The trouble is that this means we have no guaranteed
      exit condition from the function and can spend minutes in there.
      Currently flush_tx is only called with notification on, which seems
      to limit us to one pass through the queue per call.  An upcoming
      patch changes this.
      
      Also add an option to set this value on the command line as different
      workloads may wish to use different values.  We can't necessarily
      support any random value, so this is a developer option: x-txburst=
      Usage:
      
      -device virtio-net-pci,x-txburst=64 # 64 packets per tx flush
      
      One pass through the queue (256) seems to be a good default value
      for this, balancing latency with throughput.  We use a signed int
      for x-txburst because 2^31 packets in a burst would take many, many
      minutes to process and it allows us to easily return a negative
      value value from virtio_net_flush_tx() to indicate a back-off
      or error condition.
      Signed-off-by: NAlex Williamson <alex.williamson@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      e3f30488
    • A
      virtio-net: Make tx_timer timeout configurable · f0c07c7c
      Alex Williamson 提交于
      Add an option to make the TX mitigation timer adjustable as a device
      option.  The 150us hard coded default used currently is reasonable,
      but may not be suitable for all workloads, this gives us a way to
      adjust it using a single binary.  We can't support any random option
      though, so use the "x-" prefix to indicate this is a developer
      option.  Usage:
      
      -device virtio-net-pci,x-txtimer=500000,... # .5ms timeout
      Signed-off-by: NAlex Williamson <alex.williamson@redhat.com>
      Signed-off-by: NMichael S. Tsirkin <mst@redhat.com>
      f0c07c7c
  14. 24 8月, 2010 1 次提交
    • B
      Rearrange block headers · 2446333c
      Blue Swirl 提交于
      Changing block.h or blockdev.h resulted in recompiling most objects.
      
      Move DriveInfo typedef and BlockInterfaceType enum definitions
      to qemu-common.h and rearrange blockdev.h use to decrease churn.
      Signed-off-by: NBlue Swirl <blauwirbel@gmail.com>
      2446333c
  15. 23 8月, 2010 1 次提交
  16. 26 7月, 2010 1 次提交
  17. 13 7月, 2010 2 次提交
  18. 12 7月, 2010 1 次提交
    • I
      pci: don't overwrite multi functio bit in pci header type. · b80d4a98
      Isaku Yamahata 提交于
      Don't overwrite pci header type.
      Otherwise, multi function bit which pci_init_header_type() sets
      appropriately is lost.
      Anyway PCI_HEADER_TYPE_NORMAL is zero, so it is unnecessary to zero
      which is already zero cleared.
      
      how to test:
      run qemu and issue info pci to see whether a device in question is
      normal device, not pci-to-pci bridge.
      This is handy because guest os isn't required.
      
      tested changes:
      The following files are covered by using following commands.
      sparc64-softmmu
        apb_pci.c, vga-pci.c, cmd646.c, ne2k_pci.c, sun4u.c
      ppc-softmmu
        grackle_pci.c, cmd646.c, ne2k_pci.c, vga-pci.c, macio.c
      ppc-softmmu -M mac99
        unin_pci.c(uni-north, uni-north-agp)
      ppc64-softmmu
        pci-ohci, ne2k_pci, vga-pci, unin_pci.c(u3-agp)
      x86_64-softmmu
        acpi_piix4.c, ide/piix.c, piix_pci.c
        -vga vmware vmware_vga.c
        -watchdog i6300esb wdt_i6300esb.c
        -usb usb-uhci.c
        -sound ac97 ac97.c
        -nic model=rtl8139 rtl8139.c
        -nic model=pcnet pcnet.c
        -balloon virtio virtio-pci.c:
      
      untested changes:
      The following changes aren't tested.
      prep_pci.c: ppc-softmmu -M prep should cover, but core dumped.
      unin_pci.c(uni-north-pci): the caller is commented out.
      openpic.c: the caller is commented out in ppc_prep.c
      Signed-off-by: NIsaku Yamahata <yamahata@valinux.co.jp>
      Signed-off-by: NBlue Swirl <blauwirbel@gmail.com>
      b80d4a98
  19. 02 7月, 2010 2 次提交
    • M
      qdev: Decouple qdev_prop_drive from DriveInfo · f8b6cc00
      Markus Armbruster 提交于
      Make the property point to BlockDriverState, cutting out the DriveInfo
      middleman.  This prepares the ground for block devices that don't have
      a DriveInfo.
      
      Currently all user-defined ones have a DriveInfo, because the only way
      to define one is -drive & friends (they go through drive_init()).
      DriveInfo is closely tied to -drive, and like -drive, it mixes
      information about host and guest part of the block device.  I'm
      working towards a new way to define block devices, with clean
      host/guest separation, and I need to get DriveInfo out of the way for
      that.
      
      Fortunately, the device models are perfectly happy with
      BlockDriverState, except for two places: ide_drive_initfn() and
      scsi_disk_initfn() need to check the DriveInfo for a serial number set
      with legacy -drive serial=...  Use drive_get_by_blockdev() there.
      
      Device model code should now use DriveInfo only when explicitly
      dealing with drives defined the old way, i.e. without -device.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Reviewed-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      f8b6cc00
    • M
      blockdev: Clean up automatic drive deletion · 14bafc54
      Markus Armbruster 提交于
      We automatically delete blockdev host parts on unplug of the guest
      device.  Too much magic, but we can't change that now.
      
      The delete happens early in the guest device teardown, before the
      connection to the host part is severed.  Thus, the guest part's
      pointer to the host part dangles for a brief time.  No actual harm
      comes from this, but we'll catch such dangling pointers a few commits
      down the road.  Clean up the dangling pointers by delaying the
      automatic deletion until the guest part's pointer is gone.
      
      Device usb-storage deliberately makes two qdev properties refer to the
      same drive, because it automatically creates a second device.  Again,
      too much magic we can't change now.  Multiple references worked okay
      before, but now free_drive() dies for the second one.  Zap the extra
      reference.
      Signed-off-by: NMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      14bafc54
  20. 23 6月, 2010 2 次提交
  21. 04 6月, 2010 1 次提交
  22. 04 5月, 2010 1 次提交
  23. 02 4月, 2010 2 次提交
  24. 01 4月, 2010 1 次提交
    • A
      Don't check for bus master for old guests · c81131db
      Alexander Graf 提交于
      Older Linux guests don't activate the bus master enable bit. So for those we
      can just try to be clever and track if they set the DEVICE_OK bit even though
      bus mastering is still disabled.
      
      Under that condition we can disable the windows safety check. With that logic
      in place both guests should work just fine. Without PCI hotplug breaks
      virtio-net in Linux < 2.6.34 guests.
      Signed-off-by: NAlexander Graf <agraf@suse.de>
      CC: Michael S. Tsirkin <mst@redhat.com>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      c81131db
  25. 16 3月, 2010 2 次提交
  26. 09 3月, 2010 1 次提交
  27. 20 2月, 2010 1 次提交
  28. 11 2月, 2010 1 次提交
    • C
      block: add topology qdev properties · 428c149b
      Christoph Hellwig 提交于
      Add three new qdev properties to export block topology information to
      the guest.  This is needed to get optimal I/O alignment for RAID arrays
      or SSDs.
      
      The options are:
      
       - physical_block_size to specify the physical block size of the device,
         this is going to increase from 512 bytes to 4096 kilobytes for many
         modern storage devices
       - min_io_size to specify the minimal I/O size without performance impact,
         this is typically set to the RAID chunk size for arrays.
       - opt_io_size to specify the optimal sustained I/O size, this is
         typically the RAID stripe width for arrays.
      
      I decided to not auto-probe these values from blkid which might easily
      be possible as I don't know how to deal with these issues on migration.
      
      Note that we specificly only set the physical_block_size, and not the
      logial one which is the unit all I/O is described in.  The reason for
      that is that IDE does not support increasing the logical block size and
      at last for now I want to stick to one meachnisms in queue and allow
      for easy switching of transports for a given backing image which would
      not be possible if scsi and virtio use real 4k sectors, while ide only
      uses the physical block exponent.
      
      To make this more common for the different block drivers introduce a
      new BlockConf structure holding all common block properties and a
      DEFINE_BLOCK_PROPERTIES macro to add them all together, mirroring
      what is done for network drivers.  Also switch over all block drivers
      to use it, except for the floppy driver which has weird driveA/driveB
      properties and probably won't require any advanced block options ever.
      
      Example usage for a virtio device with 4k physical block size and
      8k optimal I/O size:
      
        -drive file=scratch.img,media=disk,cache=none,id=scratch \
        -device virtio-blk-pci,drive=scratch,physical_block_size=4096,opt_io_size=8192
      
      aliguori: updated patch to take into account BLOCK events
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
      428c149b
  29. 20 1月, 2010 1 次提交