lkml.org 
[lkml]   [2023]   [Feb]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH v3 00/11] VDUSE: Improve performance
    Date
    Hi all,

    This series introduces some ways to improve VDUSE performance.

    Patch 1 ~ 6 bring current interrupt affinity spreading mechanism
    to vduse device and make it possible for the virtio-blk driver
    to build the blk-mq queues based on it. This would be useful to
    mitigate the virtqueue lock contention in virtio-blk driver. In
    our test, with those patches, we could get ~50% improvement (600k
    iops -> 900k iops) when using per-cpu virtqueue.

    Patch 7 adds a sysfs interface for each vduse virtqueue to change
    the affinity for IRQ callback. It would be helpful for performance
    tuning when the affinity mask contains more than one CPU.

    Patch 8 ~ 9 associate an eventfd to the vdpa callback so that
    we can signal it directly during irq injection without scheduling
    an additional workqueue thread to do that.

    Patch 10, 11 add a sysfs interface to support specifying bounce
    buffer size in virtio-vdpa case. The high throughput workloads
    can benefit from it. And we can also use it to reduce the memory
    overhead for small throughput workloads.

    Please review, thanks!

    V2 to V3:
    - Rebased to newest kernel tree
    - Export group_cpus_evenly() instead of irq_create_affinity_masks() [MST]
    - Remove the sysfs for workqueue control [Jason]
    - Associate an eventfd to the vdpa callback [Jason]
    - Signal the eventfd directly in vhost-vdpa case [Jason]
    - Use round-robin to spread IRQs between CPUs in the affinity mask [Jason]
    - Handle the cpu hotplug case on IRQ injection [Jason]
    - Remove effective IRQ affinity and balance mechanism for IRQ allocation

    V1 to V2:
    - Export irq_create_affinity_masks()
    - Add set/get_vq_affinity and set_irq_affinity callbacks in vDPA
    framework
    - Add automatic irq callback affinity support in VDUSE driver [Jason]
    - Add more backgrounds information in commit log [Jason]
    - Only support changing effective affinity when the value is a subset
    of the IRQ callback affinity mask

    Xie Yongji (11):
    lib/group_cpus: Export group_cpus_evenly()
    vdpa: Add set/get_vq_affinity callbacks in vdpa_config_ops
    vdpa: Add set_irq_affinity callback in vdpa_config_ops
    vduse: Refactor allocation for vduse virtqueues
    vduse: Support automatic irq callback affinity
    vduse: Support set/get_vq_affinity callbacks
    vduse: Add sysfs interface for irq callback affinity
    vdpa: Add eventfd for the vdpa callback
    vduse: Signal interrupt's eventfd directly in vhost-vdpa case
    vduse: Delay iova domain creation
    vduse: Support specifying bounce buffer size via sysfs

    drivers/vdpa/vdpa_user/vduse_dev.c | 490 +++++++++++++++++++++++++----
    drivers/vhost/vdpa.c | 2 +
    drivers/virtio/virtio_vdpa.c | 33 ++
    include/linux/vdpa.h | 25 ++
    lib/group_cpus.c | 1 +
    5 files changed, 488 insertions(+), 63 deletions(-)

    --
    2.20.1

    \
     
     \ /
      Last update: 2023-03-27 00:38    [W:4.555 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site