Internships/ProjectIdeas/NVMePerformance
QEMU NVMe Performance Optimization
Summary: QEMU's NVMe implementation uses traditional trap-and-emulation method to emulate I/Os, thus the performance suffers due to frequent VM-exits. NVMe Specification 1.3 defines a new feature to update doorbell registers using a Shadow Doorbell Buffer. This can be utilized to enhance performance of emulated controllers like QEMU NVMe. The goal of this summer of code is to add such support in QEMU and apply polling techniques to achieve comparable performance as virtio-blk dataplane. Specifically, this project includes the following parts: (1) add shadow doorbell buffer and ioeventfd support into QEMU NVMe emulation, which will reduce the number of VM-exits and make them less expensive (reducing VCPU latency); (2) add iothread support to QEMU NVMe emulation to reduce or eliminate VM-exits; (3) add a RAM disk back-end for debugging; (4) implement an interrupt coalescing scheme for efficient host-to-guest communication (at least one of (3) and (4)).
Links:
- https://nvmexpress.org/wp-content/uploads/NVM_Express_Revision_1.3.pdf
- http://ucare.cs.uchicago.edu/pdf/fast18-femu.pdf
- https://github.com/ucare-uchicago/femu
- https://vmsplice.net/~stefan/stefanha-kvm-forum-2017.pdf
Details:
- Skill level: intermediate-advanced
- Language: C
- Mentor: Paolo Bonzini <pbonzini@redhat.com>, bonzini on IRC
- Suggested by: Huaicheng Li <huaicheng@cs.uchicago.edu>, Paolo Bonzini