From patchwork Mon Jan 4 14:55:53 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?b?SsO8cmdlbiBHcm/Dnw==?= X-Patchwork-Id: 7948301 Return-Path: X-Original-To: patchwork-xen-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 4A3B8BEEE5 for ; Mon, 4 Jan 2016 14:57:53 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 5E2B92035E for ; Mon, 4 Jan 2016 14:57:52 +0000 (UTC) Received: from lists.xen.org (lists.xenproject.org [50.57.142.19]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 646362017E for ; Mon, 4 Jan 2016 14:57:51 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xen.org) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1aG6YC-0000ZA-P1; Mon, 04 Jan 2016 14:56:00 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1aG6YB-0000Yw-NX for xen-devel@lists.xen.org; Mon, 04 Jan 2016 14:55:59 +0000 Received: from [85.158.139.211] by server-3.bemta-5.messagelabs.com id E2/4B-13487-EF78A865; Mon, 04 Jan 2016 14:55:58 +0000 X-Env-Sender: jgross@suse.com X-Msg-Ref: server-14.tower-206.messagelabs.com!1451919358!13529515!1 X-Originating-IP: [195.135.220.15] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 7.35.1; banners=-,-,- X-VirusChecked: Checked Received: (qmail 4308 invoked from network); 4 Jan 2016 14:55:58 -0000 Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by server-14.tower-206.messagelabs.com with DHE-RSA-CAMELLIA256-SHA encrypted SMTP; 4 Jan 2016 14:55:58 -0000 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 50A39AD1E; Mon, 4 Jan 2016 14:55:57 +0000 (UTC) From: Juergen Gross To: xen-devel@lists.xen.org, Ian.Campbell@citrix.com, ian.jackson@eu.citrix.com, stefano.stabellini@eu.citrix.com, wei.liu2@citrix.com Date: Mon, 4 Jan 2016 15:55:53 +0100 Message-Id: <1451919353-11547-4-git-send-email-jgross@suse.com> X-Mailer: git-send-email 2.6.2 In-Reply-To: <1451919353-11547-1-git-send-email-jgross@suse.com> References: <1451919353-11547-1-git-send-email-jgross@suse.com> Cc: Juergen Gross Subject: [Xen-devel] [PATCH v2 3/3] xenstat: handle more than 1024 domains X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP get_domain_ids() in libxenstat used by read_attributes_qdisk() is limited to 1024 domains. Remove that limit. Signed-off-by: Juergen Gross Reviewed-by: Wei Liu --- tools/xenstat/libxenstat/src/xenstat_qmp.c | 67 +++++++++++++----------------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/tools/xenstat/libxenstat/src/xenstat_qmp.c b/tools/xenstat/libxenstat/src/xenstat_qmp.c index 5e261af..5104afb 100644 --- a/tools/xenstat/libxenstat/src/xenstat_qmp.c +++ b/tools/xenstat/libxenstat/src/xenstat_qmp.c @@ -356,18 +356,6 @@ static int qmp_connect(char *path) return s; } -/* Get up to 1024 active domains */ -static xc_domaininfo_t *get_domain_ids(xc_interface *xc_handle, int *num_doms) -{ - xc_domaininfo_t *dominfo; - - dominfo = calloc(1024, sizeof(xc_domaininfo_t)); - if (dominfo == NULL) - return NULL; - *num_doms = xc_domain_getinfolist(xc_handle, 0, 1024, dominfo); - return dominfo; -} - /* Gather the qdisk statistics by querying QMP Resources: http://wiki.qemu.org/QMP and qmp-commands.hx from the qemu code QMP Syntax for entering command mode. This command must be issued before @@ -398,44 +386,47 @@ void read_attributes_qdisk(xenstat_node * node) { char *cmd_mode = "{ \"execute\": \"qmp_capabilities\" }"; char *query_blockstats_cmd = "{ \"execute\": \"query-blockstats\" }"; - xc_domaininfo_t *dominfo = NULL; + xc_domaininfo_t dominfo[1024]; unsigned char *qmp_stats, *val; char path[80]; int i, qfd, num_doms; + domid_t next_domid = 0; - dominfo = get_domain_ids(node->handle->xc_handle, &num_doms); - if (dominfo == NULL) - return; + for (;;) { + num_doms = xc_domain_getinfolist(node->handle->xc_handle, next_domid, 1024, dominfo); + if (num_doms <= 0) + return; - for (i=0; ihandle->xshandle, XBT_NULL, path, NULL)) == NULL) - continue; - free(val); + /* Verify that qdisk disks are used with this VM */ + snprintf(path, sizeof(path),"/local/domain/0/backend/qdisk/%i", dominfo[i].domain); + if ((val = xs_read(node->handle->xshandle, XBT_NULL, path, NULL)) == NULL) + continue; + free(val); - /* Connect to this VMs QMP socket */ - snprintf(path, sizeof(path), "/var/run/xen/qmp-libxenstat-%i", dominfo[i].domain); - if ((qfd = qmp_connect(path)) < 0) { - continue; - } + /* Connect to this VMs QMP socket */ + snprintf(path, sizeof(path), "/var/run/xen/qmp-libxenstat-%i", dominfo[i].domain); + if ((qfd = qmp_connect(path)) < 0) { + continue; + } - /* First enable QMP capabilities so that we can query for data */ - if ((qmp_stats = qmp_query(qfd, cmd_mode)) != NULL) { - free(qmp_stats); - /* Query QMP for this VMs blockstats */ - if ((qmp_stats = qmp_query(qfd, query_blockstats_cmd)) != NULL) { - qmp_parse_stats(node, dominfo[i].domain, qmp_stats, qfd); + /* First enable QMP capabilities so that we can query for data */ + if ((qmp_stats = qmp_query(qfd, cmd_mode)) != NULL) { free(qmp_stats); + /* Query QMP for this VMs blockstats */ + if ((qmp_stats = qmp_query(qfd, query_blockstats_cmd)) != NULL) { + qmp_parse_stats(node, dominfo[i].domain, qmp_stats, qfd); + free(qmp_stats); + } } + close(qfd); } - close(qfd); - } - free(dominfo); + next_domid = dominfo[num_doms - 1].domain + 1; + } } #else /* !HAVE_YAJL_V2 */