[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC V2 03/20] qcow2: Add deduplication structures and fiel
From: |
Benoît Canet |
Subject: |
[Qemu-devel] [RFC V2 03/20] qcow2: Add deduplication structures and fields. |
Date: |
Wed, 17 Oct 2012 18:00:12 +0200 |
---
block/qcow2.h | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/block/qcow2.h b/block/qcow2.h
index b4eb654..e38667c 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -26,6 +26,7 @@
#define BLOCK_QCOW2_H
#include "aes.h"
+#include "rbtree.h"
#include "qemu-coroutine.h"
//#define DEBUG_ALLOC
@@ -58,6 +59,19 @@
#define DEFAULT_CLUSTER_SIZE 65536
+/* Red Black Tree deduplication node */
+typedef struct {
+ struct rb_node node;
+ uint8_t *hash; /* SHA256 hash of a given cluster */
+ uint64_t offset; /* offset where the cluster is stored (sectors) */
+} QCowHashNode;
+
+/* Undedupable hashes that must be written later to disk */
+typedef struct QCowHashElement {
+ uint8_t *hash;
+ QTAILQ_ENTRY(QCowHashElement) next;
+} QCowHashElement;
+
typedef struct QCowHeader {
uint32_t magic;
uint32_t version;
@@ -114,8 +128,10 @@ enum {
enum {
QCOW2_INCOMPAT_DIRTY_BITNR = 0,
QCOW2_INCOMPAT_DIRTY = 1 << QCOW2_INCOMPAT_DIRTY_BITNR,
+ QCOW2_INCOMPAT_DEDUP_BITNR = 1,
+ QCOW2_INCOMPAT_DEDUP = 1 << QCOW2_INCOMPAT_DEDUP_BITNR,
- QCOW2_INCOMPAT_MASK = QCOW2_INCOMPAT_DIRTY,
+ QCOW2_INCOMPAT_MASK = QCOW2_INCOMPAT_DIRTY | QCOW2_INCOMPAT_DEDUP,
};
/* Compatible feature bits */
@@ -148,6 +164,7 @@ typedef struct BDRVQcowState {
Qcow2Cache* l2_table_cache;
Qcow2Cache* refcount_block_cache;
+ Qcow2Cache *dedup_cluster_cache;
uint8_t *cluster_cache;
uint8_t *cluster_data;
@@ -160,6 +177,12 @@ typedef struct BDRVQcowState {
int64_t free_cluster_index;
int64_t free_byte_offset;
+ bool has_dedup;
+ uint64_t *dedup_table;
+ uint64_t dedup_table_offset;
+ int32_t dedup_table_size;
+ struct rb_root dedup_rb_tree;
+ QTAILQ_HEAD(, QCowHashElement) undedupable_hashes;
CoMutex lock;
uint32_t crypt_method; /* current crypt method, 0 if no key yet */
--
1.7.10.4
- [Qemu-devel] [RFC V2 00/20] QCOW2 deduplication, Benoît Canet, 2012/10/17
- [Qemu-devel] [RFC V2 03/20] qcow2: Add deduplication structures and fields.,
Benoît Canet <=
- [Qemu-devel] [RFC V2 06/20] qcow2: Add qcow2_dedup and related functions., Benoît Canet, 2012/10/17
- [Qemu-devel] [RFC V2 07/20] qcow2: Add qcow2_dedup_write_new_hashes., Benoît Canet, 2012/10/17
- [Qemu-devel] [RFC V2 08/20] qcow2: Implement qcow2_compute_cluster_hash., Benoît Canet, 2012/10/17
- [Qemu-devel] [RFC V2 09/20] qcow2: Add qcow2_co_load_dedup_hashes., Benoît Canet, 2012/10/17
- [Qemu-devel] [RFC V2 05/20] qcow2: Rename update_refcount into qcow2_update_refcount., Benoît Canet, 2012/10/17
- [Qemu-devel] [RFC V2 04/20] qcow2: Add qcow2_de dup_read_missing_and_concatenate, Benoît Canet, 2012/10/17
- [Qemu-devel] [RFC V2 15/20] block: Add dedup image create option., Benoît Canet, 2012/10/17
- [Qemu-devel] [RFC V2 01/20] qcow2: Add deduplication to the qcow2 specification., Benoît Canet, 2012/10/17