Bug 1806887

Summary: High IOPS storage performance optimizations
Product: Red Hat Enterprise Linux Advanced Virtualization Reporter: Stefan Hajnoczi <stefanha>
Component: qemu-kvmAssignee: Stefan Hajnoczi <stefanha>
qemu-kvm sub component: Storage QA Contact: Yanhui Ma <yama>
Status: CLOSED NOTABUG Docs Contact:
Severity: medium    
Priority: high CC: chayang, coli, jinzhao, juzhang, virt-maint, wquan, yama
Version: 8.2Keywords: Triaged
Target Milestone: rc   
Target Release: 8.0   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2020-08-26 10:10:06 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1803785    

Description Stefan Hajnoczi 2020-02-25 09:34:36 UTC
A number of storage performance optimizations for high IOPS devices are being developed for QEMU.  They should be included in RHEL-AV qemu-kvm once complete.

The list of commits so far is:

7391d34c3c aio-posix: make AioHandler dispatch O(1) with epoll
4749079ce0 aio-posix: make AioHandler deletion O(1)
195ed8cb36 qemu/queue.h: add QLIST_SAFE_REMOVE()
ca8c6b2275 aio-posix: don't pass ns timeout to epoll_wait()
ff29ed3a33 aio-posix: fix use after leaving scope in aio_poll()
8c6b0356b5 util/async: make bh_aio_poll() O(1)
f25c0b5479 aio-posix: avoid reacquiring rcu_read_lock() when polling

Comment 1 Stefan Hajnoczi 2020-02-26 14:39:08 UTC
920d557e5a memory: batch allocate ioeventfds[] in address_space_update_ioeventfds()

Comment 2 Stefan Hajnoczi 2020-03-14 13:22:52 UTC
d37d0e365a aio-posix: remove idle poll handlers to improve scalability
aa38e19f05 aio-posix: support userspace polling of fd monitoring
73fd282e7b aio-posix: add io_uring fd monitoring implementation
b321051cf4 aio-posix: simplify FDMonOps->update() prototype
1f050a4690 aio-posix: extract ppoll(2) and epoll(7) fd monitoring
3aa221b382 aio-posix: move RCU_READ_LOCK() into run_poll_handlers()
e4346192f1 aio-posix: completely stop polling when disabled
c39cbedb54 aio-posix: remove confusing QLIST_SAFE_REMOVE()
a31ca6801c qemu/queue.h: clear linked list pointers on remove

Comment 3 Stefan Hajnoczi 2020-04-06 10:08:02 UTC
ff807d5592 aio-posix: fix io_uring with external events
ae60ab7eb2 aio-posix: fix test-aio /aio/event/wait with fdmon-io_uring

Comment 4 Stefan Hajnoczi 2020-04-15 11:36:37 UTC
636b836d5f aio-posix: signal-proof fdmon-io_uring

Comment 5 Stefan Hajnoczi 2020-08-25 14:53:53 UTC
44277bf914 aio-posix: keep aio_notify_me disabled during polling
601829f88e async: always set ctx->notified in aio_notify()
c13be5a1bf async: rename event_notifier_dummy_cb/poll()

Comment 6 Stefan Hajnoczi 2020-08-26 10:10:06 UTC
All commits before Comment 5 are in v5.1.0 and will be included in the downstream rebase.

Most commits improve scalability so that multi-queue can be enabled when there are 100+ devices. However, multi-queue is not yet enabled by default.

Therefore I am closing this BZ for now. There is no new feature to track here.

I will file BZs for specific features as they become ready.