On Tue, Feb 22, 2022 at 09:48:06AM +0000, Stefan Hajnoczi wrote: > On Mon, 21 Feb 2022 at 12:00, Klaus Jensen <its@xxxxxxxxxxxxx> wrote: > > > > Yes, I'll go ahead as mentor for this. > > > > @Keith, if you want to join in, let us know :) Thank you for setting this up, I would be happy assist with the cause! > > Suggested updated summary: > > > > QEMU's NVMe emulation uses the traditional trap-and-emulation method to > > emulate I/Os, thus the performance suffers due to frequent VM-exits. > > Version 1.3 of the NVMe specification defines a new feature to update > > doorbell registers using a Shadow Doorbell Buffer. This can be utilized > > to enhance performance of emulated controllers by reducing the number of > > Submission Queue Tail Doorbell writes. > > > > Further more, it is possible to run emulation in a dedicated thread > > called an IOThread. Emulating NVMe in a separate thread allows the vcpu > > thread to continue execution and results in better performance. > > > > Finally, it is possible for the emulation code to watch for changes to > > the queue memory instead of waiting for doorbell writes. This technique > > is called polling and reduces notification latency at the expense of an > > another thread consuming CPU to detect queue activity. > > > > The goal of this project is to add implement these optimizations so > > QEMU's NVMe emulation performance becomes comparable to virtio-blk > > performance. > > > > Tasks include: > > > > Add Shadow Doorbell Buffer support to reduce doorbell writes > > Add Submission Queue polling > > Add IOThread support so emulation can run in a dedicated thread > > > > Maybe add a link to this previous discussion as well: > > > > https://lore.kernel.org/qemu-devel/1447825624-17011-1-git-send-email-mlin@xxxxxxxxxx/T/#u > > Great, I have added the project idea. I left in the sq doorbell > ioeventfd task but moved it after the Shadow Doorbell Buffer support > task and made it clear that the ioeventfd can only be used when the > Shadow Doorbell Buffer is enabled: > https://wiki.qemu.org/Google_Summer_of_Code_2022#NVMe_Emulation_Performance_Optimization Looks great, this seems like a very useful addition to have. I like that the feature can be broken down into two parts. Hopefully that makes it more approachable.