Features/QED: Difference between revisions

From QEMU
(Clarify that qed is deprecated)
 
(56 intermediate revisions by 9 users not shown)
Line 1: Line 1:
=Specification=
= Overview =


The file format looks like this:
QED was an attempt at creating a better performing image format by removing some features compared to qcow2. However, it turned out that the achieved performance improvements were mostly related to an improved implementation rather than the file format per se. These improvements, as well as a few format extensions, have been merged back into qcow2 since. The development of QED has been abandoned.


+--------+--------------+---------+---------+-----+
'''It is not recommended to use QED for any new images.''' For existing images, converting to qcow2 should be considered as today qcow2 provides both more features and better performance, and has an actively maintained code base.
| header | extent table | extent0 | extent1 | ... |
+--------+--------------+---------+---------+-----+


==Header==
QED supports backing files and sparse images.
Header {
    uint32_t magic;              /* COW2 */
    uint32_t features;            /* format feature bits */
    uint32_t cluster_size;        /* in bytes */
    uint32_t table_size;          /* table chunk size, in clusters */
    uint64_t l1_table_offset;    /* L1 table offset, in cluster */
    uint64_t image_size;          /* total image size, in clusters */
    uint32_t backing_file_offset; /* in bytes from start of header */
    uint32_t backing_file_size;  /* in bytes */
}


==Extent table==
= Status =


#define TABLE_NOFFSETS (table_size * chunk_size / sizeof(uint64_t))
* '''QED is deprecated and only supported for compatibility with existing images''' (similar to qcow1)
 
* Base QED is in qemu.git since [http://git.qemu.org/qemu.git/commit/?id=75411d236d93d79d8052e0116c3eeebe23e2778b 2010-12-17] and will form part of QEMU 0.14.
Table {
* No additional features are planned to get merged
    uint64_t offsets[TABLE_NOFFSETS];
}


The extent tables are organized as follows:
= Features =


                    +----------+
* [[Features/QED/Specification|Open specification]]
                    | L1 table |
* Fully asynchronous I/O path
                    +----------+
* Strong data integrity due to simple design
              ,------'  |  '------.
* Backing files
          +----------+  |    +----------+
** Backing files may be smaller than the QED image
          | L2 table |  ...  | L2 table |
* Sparse files
          +----------+        +----------+
** Retains sparseness over non-sparse channels (e.g. HTTP)
      ,------'  |  '------.
* Zero clusters
+----------+  |    +----------+
* Periodic dirty flag flush
|  Data  |  ...  |  Data  |
+----------+        +----------+


=Operations=
= Uncompleted work =


==Read==
* [[Features/QED/OutstandingWork|Outstanding work]]
# If L2 table is not present in L1, read from backing image.
* [[Features/QED/Streaming|Streaming]]
# If data cluster is not present in L2, read from backing image.
* [[Features/QED/OnlineDefrag|Online defragmentation]]
# Otherwise read data from cluster.
* [[Features/QED/ParallelSubmission|Parallel submission]]
* [[Features/QED/ScanAvoidance|Meta-data scan avoidance]]


==Write==
[[Category:Obsolete feature pages]]
# If L2 table is not present in L1, allocate new cluster and L2.  Perform L2 and L1 link after writing data.
# If data cluster is not present in L2, allocate new cluster.  Perform L1 link after writing data.
# Otherwise overwrite data cluster.
 
==Grow==
# If table_size * TABLE_NOFFSETS < new_image_size, fail -EOVERFLOW.  The L1 table is not big enough.
# Write new image_size header field.

Latest revision as of 14:42, 16 October 2017

Overview

QED was an attempt at creating a better performing image format by removing some features compared to qcow2. However, it turned out that the achieved performance improvements were mostly related to an improved implementation rather than the file format per se. These improvements, as well as a few format extensions, have been merged back into qcow2 since. The development of QED has been abandoned.

It is not recommended to use QED for any new images. For existing images, converting to qcow2 should be considered as today qcow2 provides both more features and better performance, and has an actively maintained code base.

QED supports backing files and sparse images.

Status

  • QED is deprecated and only supported for compatibility with existing images (similar to qcow1)
  • Base QED is in qemu.git since 2010-12-17 and will form part of QEMU 0.14.
  • No additional features are planned to get merged

Features

  • Open specification
  • Fully asynchronous I/O path
  • Strong data integrity due to simple design
  • Backing files
    • Backing files may be smaller than the QED image
  • Sparse files
    • Retains sparseness over non-sparse channels (e.g. HTTP)
  • Zero clusters
  • Periodic dirty flag flush

Uncompleted work