On Jul 5 22:24, Jinhao Fan wrote: > Add property "ioeventfd" which is enabled by default. When this is > enabled, updates on the doorbell registers will cause KVM to signal > an event to the QEMU main loop to handle the doorbell updates. > Therefore, instead of letting the vcpu thread run both guest VM and > IO emulation, we now use the main loop thread to do IO emulation and > thus the vcpu thread has more cycles for the guest VM. > > Since ioeventfd does not tell us the exact value that is written, it is > only useful when shadow doorbell buffer is enabled, where we check > for the value in the shadow doorbell buffer when we get the doorbell > update event. > > IOPS comparison on Linux 5.19-rc2: (Unit: KIOPS) > > qd 1 4 16 64 > qemu 35 121 176 153 > ioeventfd 41 133 258 313 > > Changes since v3: > - Do not deregister ioeventfd when it was not enabled on a SQ/CQ > > Signed-off-by: Jinhao Fan > --- > hw/nvme/ctrl.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++++- > hw/nvme/nvme.h | 5 +++ > 2 files changed, 118 insertions(+), 1 deletion(-) > We have a regression following this patch that we need to address. With this patch, issuing a reset on the device (`nvme reset /dev/nvme0` will do the trick) causes QEMU to hog my host cpu at 100%. I'm still not sure what causes this. The trace output is a bit inconclusive still. I'll keep looking into it.