From patchwork Tue Mar 18 12:24:18 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gonglei (Arei)" X-Patchwork-Id: 331392 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id A804A2C00AC for ; Tue, 18 Mar 2014 23:26:18 +1100 (EST) Received: from localhost ([::1]:34978 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WPt60-00008g-6G for incoming@patchwork.ozlabs.org; Tue, 18 Mar 2014 08:26:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45502) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WPt56-0008MM-4J for qemu-devel@nongnu.org; Tue, 18 Mar 2014 08:25:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WPt50-0002Ii-DC for qemu-devel@nongnu.org; Tue, 18 Mar 2014 08:25:20 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:50870) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WPt4z-0002I6-ID for qemu-devel@nongnu.org; Tue, 18 Mar 2014 08:25:14 -0400 Received: from 172.24.2.119 (EHLO szxeml205-edg.china.huawei.com) ([172.24.2.119]) by szxrg02-dlp.huawei.com (MOS 4.3.7-GA FastPath queued) with ESMTP id BRG13660; Tue, 18 Mar 2014 20:25:03 +0800 (CST) Received: from SZXEML451-HUB.china.huawei.com (10.82.67.194) by szxeml205-edg.china.huawei.com (172.24.2.58) with Microsoft SMTP Server (TLS) id 14.3.158.1; Tue, 18 Mar 2014 20:25:00 +0800 Received: from localhost (10.177.19.102) by szxeml451-hub.china.huawei.com (10.82.67.194) with Microsoft SMTP Server id 14.3.158.1; Tue, 18 Mar 2014 20:24:53 +0800 From: To: Date: Tue, 18 Mar 2014 20:24:18 +0800 Message-ID: <1395145464-5524-5-git-send-email-arei.gonglei@huawei.com> X-Mailer: git-send-email 1.7.3.1.msysgit.0 In-Reply-To: <1395145464-5524-1-git-send-email-arei.gonglei@huawei.com> References: <1395145464-5524-1-git-send-email-arei.gonglei@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.177.19.102] X-CFilter-Loop: Reflected X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] X-Received-From: 119.145.14.65 Cc: ChenLiang , weidong.huang@huawei.com, quintela@redhat.com, owasserm@redhat.com, Gonglei , pbonzini@redhat.com Subject: [Qemu-devel] [PATCH v3 04/10] migration: expose xbzrle cache miss rate 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 From: ChenLiang expose xbzrle cache miss rate Signed-off-by: ChenLiang Signed-off-by: Gonglei --- arch_init.c | 18 ++++++++++++++++++ hmp.c | 2 ++ include/migration/migration.h | 1 + migration.c | 1 + qapi-schema.json | 5 ++++- qmp-commands.hx | 2 ++ 6 files changed, 28 insertions(+), 1 deletion(-) diff --git a/arch_init.c b/arch_init.c index a4f9a87..9ceb22e 100644 --- a/arch_init.c +++ b/arch_init.c @@ -235,6 +235,7 @@ typedef struct AccountingInfo { uint64_t xbzrle_bytes; uint64_t xbzrle_pages; uint64_t xbzrle_cache_miss; + double xbzrle_cache_miss_rate; uint64_t xbzrle_overflows; } AccountingInfo; @@ -290,6 +291,11 @@ uint64_t xbzrle_mig_pages_cache_miss(void) return acct_info.xbzrle_cache_miss; } +double xbzrle_mig_cache_miss_rate(void) +{ + return acct_info.xbzrle_cache_miss_rate; +} + uint64_t xbzrle_mig_pages_overflow(void) { return acct_info.xbzrle_overflows; @@ -488,6 +494,8 @@ static void migration_bitmap_sync(void) static int64_t num_dirty_pages_period; int64_t end_time; int64_t bytes_xfer_now; + static uint64_t xbzrle_cache_miss_prev; + static uint64_t iterations_prev; bitmap_sync_counter++; @@ -531,6 +539,16 @@ static void migration_bitmap_sync(void) } else { mig_throttle_on = false; } + if (migrate_use_xbzrle()) { + if (iterations_prev != 0) { + acct_info.xbzrle_cache_miss_rate = + (double)(acct_info.xbzrle_cache_miss - + xbzrle_cache_miss_prev) / + (acct_info.iterations - iterations_prev); + } + iterations_prev = acct_info.iterations; + xbzrle_cache_miss_prev = acct_info.xbzrle_cache_miss; + } s->dirty_pages_rate = num_dirty_pages_period * 1000 / (end_time - start_time); s->dirty_bytes_rate = s->dirty_pages_rate * TARGET_PAGE_SIZE; diff --git a/hmp.c b/hmp.c index fd493be..79dc996 100644 --- a/hmp.c +++ b/hmp.c @@ -214,6 +214,8 @@ void hmp_info_migrate(Monitor *mon, const QDict *qdict) info->xbzrle_cache->pages); monitor_printf(mon, "xbzrle cache miss: %" PRIu64 "\n", info->xbzrle_cache->cache_miss); + monitor_printf(mon, "xbzrle cache miss rate: %0.2f\n", + info->xbzrle_cache->cache_miss_rate); monitor_printf(mon, "xbzrle overflow : %" PRIu64 "\n", info->xbzrle_cache->overflow); } diff --git a/include/migration/migration.h b/include/migration/migration.h index ef8b965..125721c 100644 --- a/include/migration/migration.h +++ b/include/migration/migration.h @@ -126,6 +126,7 @@ uint64_t xbzrle_mig_bytes_transferred(void); uint64_t xbzrle_mig_pages_transferred(void); uint64_t xbzrle_mig_pages_overflow(void); uint64_t xbzrle_mig_pages_cache_miss(void); +double xbzrle_mig_cache_miss_rate(void); void ram_handle_compressed(void *host, uint8_t ch, uint64_t size); diff --git a/migration.c b/migration.c index d2478e4..8db6553 100644 --- a/migration.c +++ b/migration.c @@ -179,6 +179,7 @@ static void get_xbzrle_cache_stats(MigrationInfo *info) info->xbzrle_cache->bytes = xbzrle_mig_bytes_transferred(); info->xbzrle_cache->pages = xbzrle_mig_pages_transferred(); info->xbzrle_cache->cache_miss = xbzrle_mig_pages_cache_miss(); + info->xbzrle_cache->cache_miss_rate = xbzrle_mig_cache_miss_rate(); info->xbzrle_cache->overflow = xbzrle_mig_pages_overflow(); } } diff --git a/qapi-schema.json b/qapi-schema.json index e26a2d0..3078a02 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -674,13 +674,16 @@ # # @cache-miss: number of cache miss # +# @cache-miss-rate: rate of cache miss +# # @overflow: number of overflows # # Since: 1.2 ## { 'type': 'XBZRLECacheStats', 'data': {'cache-size': 'int', 'bytes': 'int', 'pages': 'int', - 'cache-miss': 'int', 'overflow': 'int' } } + 'cache-miss': 'int', 'cache-miss-rate': 'number', + 'overflow': 'int' } } ## # @MigrationInfo diff --git a/qmp-commands.hx b/qmp-commands.hx index 5fd89cf..1db17c6 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -2940,6 +2940,7 @@ The main json-object contains the following: - "bytes": number of bytes transferred for XBZRLE compressed pages - "pages": number of XBZRLE compressed pages - "cache-miss": number of XBRZRLE page cache misses + - "cache-miss-rate": rate of XBRZRLE page cache misses - "overflow": number of times XBZRLE overflows. This means that the XBZRLE encoding was bigger than just sent the whole page, and then we sent the whole page instead (as as @@ -3048,6 +3049,7 @@ Examples: "bytes":20971520, "pages":2444343, "cache-miss":2244, + "cache-miss-rate":0.123, "overflow":34434 } }