Internships/ProjectIdeas/NVMePerformance

From QEMU
Revision as of 15:35, 20 March 2018 by Paolo Bonzini (talk | contribs) (Created page with " === QEMU NVMe Performance Optimization === '''Summary:''' QEMU's NVMe implementation uses traditional trap-and-emulation method to emulate I/Os, thus the performance suffer...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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:

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