From patchwork Wed Feb 6 12:32:17 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Beno=C3=AEt_Canet?= X-Patchwork-Id: 218585 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 0D4952C02C5 for ; Wed, 6 Feb 2013 23:40:54 +1100 (EST) Received: from localhost ([::1]:39012 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U34J2-0000x2-RY for incoming@patchwork.ozlabs.org; Wed, 06 Feb 2013 07:40:52 -0500 Received: from eggs.gnu.org ([208.118.235.92]:57761) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U34It-0000wq-T3 for qemu-devel@nongnu.org; Wed, 06 Feb 2013 07:40:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1U34Ip-0007Ei-KG for qemu-devel@nongnu.org; Wed, 06 Feb 2013 07:40:43 -0500 Received: from nodalink.pck.nerim.net ([62.212.105.220]:43769 helo=paradis.irqsave.net) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1U34DO-0005kT-1b for qemu-devel@nongnu.org; Wed, 06 Feb 2013 07:35:02 -0500 Received: by paradis.irqsave.net (Postfix, from userid 1002) id 279C1874326; Wed, 6 Feb 2013 13:35:01 +0100 (CET) Received: from localhost.localdomain (unknown [192.168.77.1]) by paradis.irqsave.net (Postfix) with ESMTP id 6CD8687434F; Wed, 6 Feb 2013 13:31:32 +0100 (CET) From: =?UTF-8?q?Beno=C3=AEt=20Canet?= To: qemu-devel@nongnu.org Date: Wed, 6 Feb 2013 13:32:17 +0100 Message-Id: <1360153939-9563-15-git-send-email-benoit@irqsave.net> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1360153939-9563-1-git-send-email-benoit@irqsave.net> References: <1360153939-9563-1-git-send-email-benoit@irqsave.net> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 62.212.105.220 Cc: kwolf@redhat.com, =?UTF-8?q?Beno=C3=AEt=20Canet?= , stefanha@redhat.com Subject: [Qemu-devel] [RFC V2 14/16] qcow2: Add qcow2_dedup_update_metrics to compute dedup RAM usage. X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org --- block/qcow2-dedup.c | 11 +++++++++++ block/qcow2.h | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/block/qcow2-dedup.c b/block/qcow2-dedup.c index 308b4f6..72ce1d7 100644 --- a/block/qcow2-dedup.c +++ b/block/qcow2-dedup.c @@ -1311,3 +1311,14 @@ void qcow2_dedup_close(BlockDriverState *bs) { qcow2_dedup_free(bs); } + +void qcow2_dedup_update_metrics(BlockDriverState *bs) +{ + BDRVQcowState *s = bs->opaque; + + uint64_t nb_hashs = s->dedup_metrics.ram_hash_creations - + s->dedup_metrics.ram_hash_deletions; + + s->dedup_metrics.ram_usage = nb_hashs * sizeof(GTreeNode_Copy) * 2; + s->dedup_metrics.ram_usage += nb_hashs * sizeof(QCowHashNode); +} diff --git a/block/qcow2.h b/block/qcow2.h index fc393d5..191b272 100644 --- a/block/qcow2.h +++ b/block/qcow2.h @@ -76,6 +76,23 @@ #define QCOW_STRATEGY_DISK (1 << 1) #define QCOW_STRATEGY_RUNNING (1 << 2) +/* This is an internal structure of glib gtree.c + * copy it here so we can compute it's size + * from glib/gtree.c in glib sources + */ +typedef struct _GTreeNode_Copy GTreeNode_Copy; + +struct _GTreeNode_Copy +{ + gpointer key; /* key for this node */ + gpointer value; /* value stored at this node */ + GTreeNode_Copy *left; /* left subtree */ + GTreeNode_Copy *right; /* right subtree */ + gint8 balance; /* height (right) - height (left) */ + guint8 left_child; + guint8 right_child; +}; + typedef enum { QCOW_HASH_SHA256 = 0, QCOW_HASH_SHA3 = 1, @@ -507,5 +524,6 @@ void qcow2_dedup_refcount_half_max_reached(BlockDriverState *bs, bool qcow2_dedup_is_running(BlockDriverState *bs); int qcow2_dedup_init(BlockDriverState *bs); void qcow2_dedup_close(BlockDriverState *bs); +void qcow2_dedup_update_metrics(BlockDriverState *bs); #endif