ToDo/Block/old

From QEMU

QEMU 1.0

Coroutines in the block layer [Kevin]

  • Programming model to simplify block drivers without blocking QEMU threads
  • All synchronous drivers converted to asynchronous

VMDK enhancements [Fam, GSoC 2011]

  • Implement latest VMDK specs to support modern image files
  • Patches currently being reviewed and merged

iSCSI block device integration

  • Enable userspace-only remote access to disk images

QEMU 1.1

Generic copy-on-read [Stefan]

  • Populate image file to avoid fetching same block from backing file again later

Generic image streaming [Stefan]

  • Make block_stream commands available for all image formats that support backing files

Block I/O limits [Zhi Yong]

  • Resource control for guest I/O bandwidth/iops consumption
  • Usable with virtio on QEMU 1.0

snapshot_blkdev and Backup API [Jeff]

  • Support for consistent disk snapshots

NBD asynchronous I/O [Paolo]

  • Improved performance

virtio-scsi [Paolo/Stefan]

  • The next step after virtio-blk, full SCSI command set and appears as SCSI HBA in guest
  • Real /dev/sda devices in guest
  • No more modifying guest drivers to add simple storage protocol features

QEMU 1.2

Runtime WCE toggling [Paolo]

  • IDE, SCSI, virtio device can toggle write cache at runtime
    • Idea: replace O_DSYNC with manual bdrv_flush calls after each write
    • Minor speedups on qcow2 metadata updates too
  • virtio automatically enables writethrough for old guests that cannot flush properly, even with cache=writeback (of course not with cache=unsafe)
  • We can switch the default to cache=writeback!
  • Future improvement: move the option to the guest side, host side can use cache=off|on|unsafe and deprecate none/directsync/writeback/writethrough

Live block operations [Paolo]

  • Copy the contents of an image file while a guest is using it
    • Various implementations: active/synchronous (guest sees I/O completion when data reaches both source and destination), passive/asynchronous (guest sees I/O completion when data reaches source only)
  • Improved error handling, similar to -drive rerror/werror
    • Errors can pause or cancel the job (with possibly separate handling for ENOSPC)

Material for next QEMU release

In-place qcow2 <-> qed conversion [Devin, GSoC 2011]:

  • Fast conversion between qcow2 and qed image formats without copy all data
  • Patches currently being reviewed and merged

Block migration [Juan?]

  • Block migration working with a separate migration thread
  • Perhaps just drop it.

IDE CD-ROM passthrough [Paolo/Markus?]

  • Track host tray state

Unified request object

  • Unify BdrvTrackedRequest, RwCo etc. in a single struct.
  • Perhaps expose make_request to device models and do_request to drivers to allow specifying more flags (FUA, write zeros,...)

Future changes

Cow overlay [Dong Xu "Robert"]

  • Allow live block copy and image streaming to raw destination files

-blockdev [Markus?]

  • Explicit user control over block device trees
  • Perhaps base this on QEMU Object Model right away

QCOW3 [Kevin]

  • Extend qcow2 format to address current and future image format challenges
    • Feature bits for fine-grained file format extensions
    • Sub-clusters to reduce metadata size and fragmentation
    • Zero clusters for efficient sparse images and copy-on-read
    • luks-like key scheme that allows changing passphrase without re-encrypting data

NBD server for block device migration [Stefan?]

  • Enable remote access to live disk images for external backup software

Avoid blocking QEMU threads

  • Today loss of NFS connectivity can hang guests
  • It's critical never to block the vcpu thread
  • The iothread should also not block while the qemu mutex is held
  • All blocking operations must be done asynchronously or in a worker thread

tcm_vhost [Zhi Yong]

  • Directly connect virtio-scsi with Linux in-kernel SCSI target
  • Pass-through of host SCSI devices

qcow2 online resize [Zhi Yong]

  • Handle snapshots
  • Support shrinking

qed online resize [Zhi Yong]

  • Support shrinking