From nobody Sat May 4 04:28:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@gnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@gnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 150695497012931.563483523442528; Mon, 2 Oct 2017 07:36:10 -0700 (PDT) Received: from localhost ([::1]:52613 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dz1pF-0006mX-Ql for importer@patchew.org; Mon, 02 Oct 2017 10:36:05 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50451) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dz1nN-0005Ys-K7 for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:11 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dz1nI-0007tZ-Tv for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:09 -0400 Received: from mail-wr0-x242.google.com ([2a00:1450:400c:c0c::242]:34474) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dz1nI-0007tC-JR for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:04 -0400 Received: by mail-wr0-x242.google.com with SMTP id z1so3951956wre.1 for ; Mon, 02 Oct 2017 07:34:04 -0700 (PDT) Received: from localhost.localdomain.localdomain ([217.110.131.66]) by smtp.gmail.com with ESMTPSA id b89sm28440668wrd.42.2017.10.02.07.34.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Oct 2017 07:34:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=rfK5WW4XYxkGYby0FSmEktuuJsFonFskEsOi3xG4b6g=; b=Wfwng4ihpybR/EEDLWKf+taBb+aQEB3hOLOvi9BogFFsHKM4gaCFnn896jGOWtm24o 0YP+YguA77J8G0a5mNtDslFbM4Xp0u4RYBRUYvkidSuRqDcj17+83unOCUOYW5yJMDI5 KVuUL5KtxzVD4NGLELuBeodX1MSOESXFrsK6gCB/L5OISXl+9KV1bTj32S/2m1xFgr7U qXIWo4YoLcYCBZcQqRIwVJEVTgh3LjkBeB2qjZpTDgdMFa+V0sxn62Pzw9JITYGHPsn7 AnB2Av4kFosOIkWmsTU9goXG+Abwn2GwFXFbioZiddIdWtd4ayAPJU78NUP23tBoVAVy g8Wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=rfK5WW4XYxkGYby0FSmEktuuJsFonFskEsOi3xG4b6g=; b=lPD3wU7phPyljH5I/+cnGn2nbceZKZC0xv+IMUOkXovNjj2DIUktVdiQTq4Xy2E6iN AlktLsyN0nBrbBLJlbsIQfuQIM7743kWTGfMVnnaPaLJqipKZFv4Dz3a0E25kZKhgBT5 PPDw6oNqJYsCYltEyIWtZkvBIej02nSvdzCG6w8G7iwYlfQe+IMuyukI+otNCwNxObi4 94mlM6O2wR6wt5IV9xA0tkMI8RhN6z675Pj+8xuHF7v8pEsPJI8jPnv3S70GooBk0oZ9 2YzrM0zwUTQBdIj5p8ghpJS7PYNe9CGjzMOGlq4pKeIN6c30YSJuNOhsYryGOQHmPZ03 6UEQ== X-Gm-Message-State: AMCzsaUHs4jzPt9Spj1reUQMGhZWZ59AtnBsg9wuAz03YL2cKIwS3Hrk iBvspN7BSfXN8RicLZLClN0= X-Google-Smtp-Source: AOwi7QASrACUPdqkDUHDIBDd2sUxVsVrDOzY4U9dm2tW+lAYTyvBhLE3Qa4cJNZbyOdyCTp3WwxjIQ== X-Received: by 10.223.179.18 with SMTP id j18mr2004543wrd.262.1506954843415; Mon, 02 Oct 2017 07:34:03 -0700 (PDT) From: Pradeep Jagadeesh X-Google-Original-From: Pradeep Jagadeesh To: "eric blake" , "greg kurz" Date: Mon, 2 Oct 2017 10:33:27 -0400 Message-Id: <1506954812-6552-2-git-send-email-pradeep.jagadeesh@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506954812-6552-1-git-send-email-pradeep.jagadeesh@huawei.com> References: <1506954812-6552-1-git-send-email-pradeep.jagadeesh@huawei.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::242 Subject: [Qemu-devel] [PATCH v13 1/6] throttle: factor out duplicate code X-BeenThere: qemu-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alberto garcia , Manos Pitsidianakis , qemu-devel@nongnu.org, Markus Armbruster , Pradeep Jagadeesh , jani kokkonen Errors-To: qemu-devel-bounces+importer=patchew.org@gnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch factors out the duplicate throttle code that was still present in block and fsdev devices. Signed-off-by: Pradeep Jagadeesh Reviewed-by: Alberto Garcia Reviewed-by: Greg Kurz Reviewed-by: Eric Blake --- blockdev.c | 44 +------------------------- fsdev/qemu-fsdev-throttle.c | 44 ++------------------------ include/qemu/throttle-options.h | 3 ++ include/qemu/throttle.h | 4 +-- include/qemu/typedefs.h | 1 + util/throttle.c | 70 +++++++++++++++++++++++++++++++++++++= ++++ 6 files changed, 79 insertions(+), 87 deletions(-) diff --git a/blockdev.c b/blockdev.c index 153bc42..43f706d 100644 --- a/blockdev.c +++ b/blockdev.c @@ -388,49 +388,7 @@ static void extract_common_blockdev_options(QemuOpts *= opts, int *bdrv_flags, } =20 if (throttle_cfg) { - throttle_config_init(throttle_cfg); - throttle_cfg->buckets[THROTTLE_BPS_TOTAL].avg =3D - qemu_opt_get_number(opts, "throttling.bps-total", 0); - throttle_cfg->buckets[THROTTLE_BPS_READ].avg =3D - qemu_opt_get_number(opts, "throttling.bps-read", 0); - throttle_cfg->buckets[THROTTLE_BPS_WRITE].avg =3D - qemu_opt_get_number(opts, "throttling.bps-write", 0); - throttle_cfg->buckets[THROTTLE_OPS_TOTAL].avg =3D - qemu_opt_get_number(opts, "throttling.iops-total", 0); - throttle_cfg->buckets[THROTTLE_OPS_READ].avg =3D - qemu_opt_get_number(opts, "throttling.iops-read", 0); - throttle_cfg->buckets[THROTTLE_OPS_WRITE].avg =3D - qemu_opt_get_number(opts, "throttling.iops-write", 0); - - throttle_cfg->buckets[THROTTLE_BPS_TOTAL].max =3D - qemu_opt_get_number(opts, "throttling.bps-total-max", 0); - throttle_cfg->buckets[THROTTLE_BPS_READ].max =3D - qemu_opt_get_number(opts, "throttling.bps-read-max", 0); - throttle_cfg->buckets[THROTTLE_BPS_WRITE].max =3D - qemu_opt_get_number(opts, "throttling.bps-write-max", 0); - throttle_cfg->buckets[THROTTLE_OPS_TOTAL].max =3D - qemu_opt_get_number(opts, "throttling.iops-total-max", 0); - throttle_cfg->buckets[THROTTLE_OPS_READ].max =3D - qemu_opt_get_number(opts, "throttling.iops-read-max", 0); - throttle_cfg->buckets[THROTTLE_OPS_WRITE].max =3D - qemu_opt_get_number(opts, "throttling.iops-write-max", 0); - - throttle_cfg->buckets[THROTTLE_BPS_TOTAL].burst_length =3D - qemu_opt_get_number(opts, "throttling.bps-total-max-length", 1= ); - throttle_cfg->buckets[THROTTLE_BPS_READ].burst_length =3D - qemu_opt_get_number(opts, "throttling.bps-read-max-length", 1); - throttle_cfg->buckets[THROTTLE_BPS_WRITE].burst_length =3D - qemu_opt_get_number(opts, "throttling.bps-write-max-length", 1= ); - throttle_cfg->buckets[THROTTLE_OPS_TOTAL].burst_length =3D - qemu_opt_get_number(opts, "throttling.iops-total-max-length", = 1); - throttle_cfg->buckets[THROTTLE_OPS_READ].burst_length =3D - qemu_opt_get_number(opts, "throttling.iops-read-max-length", 1= ); - throttle_cfg->buckets[THROTTLE_OPS_WRITE].burst_length =3D - qemu_opt_get_number(opts, "throttling.iops-write-max-length", = 1); - - throttle_cfg->op_size =3D - qemu_opt_get_number(opts, "throttling.iops-size", 0); - + throttle_parse_options(throttle_cfg, opts); if (!throttle_is_valid(throttle_cfg, errp)) { return; } diff --git a/fsdev/qemu-fsdev-throttle.c b/fsdev/qemu-fsdev-throttle.c index 49eebb5..0e6fb86 100644 --- a/fsdev/qemu-fsdev-throttle.c +++ b/fsdev/qemu-fsdev-throttle.c @@ -16,6 +16,7 @@ #include "qemu/error-report.h" #include "qemu-fsdev-throttle.h" #include "qemu/iov.h" +#include "qemu/throttle-options.h" =20 static void fsdev_throttle_read_timer_cb(void *opaque) { @@ -31,48 +32,7 @@ static void fsdev_throttle_write_timer_cb(void *opaque) =20 void fsdev_throttle_parse_opts(QemuOpts *opts, FsThrottle *fst, Error **er= rp) { - throttle_config_init(&fst->cfg); - fst->cfg.buckets[THROTTLE_BPS_TOTAL].avg =3D - qemu_opt_get_number(opts, "throttling.bps-total", 0); - fst->cfg.buckets[THROTTLE_BPS_READ].avg =3D - qemu_opt_get_number(opts, "throttling.bps-read", 0); - fst->cfg.buckets[THROTTLE_BPS_WRITE].avg =3D - qemu_opt_get_number(opts, "throttling.bps-write", 0); - fst->cfg.buckets[THROTTLE_OPS_TOTAL].avg =3D - qemu_opt_get_number(opts, "throttling.iops-total", 0); - fst->cfg.buckets[THROTTLE_OPS_READ].avg =3D - qemu_opt_get_number(opts, "throttling.iops-read", 0); - fst->cfg.buckets[THROTTLE_OPS_WRITE].avg =3D - qemu_opt_get_number(opts, "throttling.iops-write", 0); - - fst->cfg.buckets[THROTTLE_BPS_TOTAL].max =3D - qemu_opt_get_number(opts, "throttling.bps-total-max", 0); - fst->cfg.buckets[THROTTLE_BPS_READ].max =3D - qemu_opt_get_number(opts, "throttling.bps-read-max", 0); - fst->cfg.buckets[THROTTLE_BPS_WRITE].max =3D - qemu_opt_get_number(opts, "throttling.bps-write-max", 0); - fst->cfg.buckets[THROTTLE_OPS_TOTAL].max =3D - qemu_opt_get_number(opts, "throttling.iops-total-max", 0); - fst->cfg.buckets[THROTTLE_OPS_READ].max =3D - qemu_opt_get_number(opts, "throttling.iops-read-max", 0); - fst->cfg.buckets[THROTTLE_OPS_WRITE].max =3D - qemu_opt_get_number(opts, "throttling.iops-write-max", 0); - - fst->cfg.buckets[THROTTLE_BPS_TOTAL].burst_length =3D - qemu_opt_get_number(opts, "throttling.bps-total-max-length", 1); - fst->cfg.buckets[THROTTLE_BPS_READ].burst_length =3D - qemu_opt_get_number(opts, "throttling.bps-read-max-length", 1); - fst->cfg.buckets[THROTTLE_BPS_WRITE].burst_length =3D - qemu_opt_get_number(opts, "throttling.bps-write-max-length", 1); - fst->cfg.buckets[THROTTLE_OPS_TOTAL].burst_length =3D - qemu_opt_get_number(opts, "throttling.iops-total-max-length", 1); - fst->cfg.buckets[THROTTLE_OPS_READ].burst_length =3D - qemu_opt_get_number(opts, "throttling.iops-read-max-length", 1); - fst->cfg.buckets[THROTTLE_OPS_WRITE].burst_length =3D - qemu_opt_get_number(opts, "throttling.iops-write-max-length", 1); - fst->cfg.op_size =3D - qemu_opt_get_number(opts, "throttling.iops-size", 0); - + throttle_parse_options(&fst->cfg, opts); throttle_is_valid(&fst->cfg, errp); } =20 diff --git a/include/qemu/throttle-options.h b/include/qemu/throttle-option= s.h index 3528a8f..9709dcd 100644 --- a/include/qemu/throttle-options.h +++ b/include/qemu/throttle-options.h @@ -9,6 +9,7 @@ */ #ifndef THROTTLE_OPTIONS_H #define THROTTLE_OPTIONS_H +#include "typedefs.h" =20 #define QEMU_OPT_IOPS_TOTAL "iops-total" #define QEMU_OPT_IOPS_TOTAL_MAX "iops-total-max" @@ -111,4 +112,6 @@ .help =3D "when limiting by iops max size of an I/O in bytes",\ } =20 +void throttle_parse_options(ThrottleConfig *, QemuOpts *); + #endif diff --git a/include/qemu/throttle.h b/include/qemu/throttle.h index 8c93237..b6ebc6d 100644 --- a/include/qemu/throttle.h +++ b/include/qemu/throttle.h @@ -89,10 +89,10 @@ typedef struct LeakyBucket { * However it allows to keep the code clean and the bucket field is reset = to * zero at the right time. */ -typedef struct ThrottleConfig { +struct ThrottleConfig { LeakyBucket buckets[BUCKETS_COUNT]; /* leaky buckets */ uint64_t op_size; /* size of an operation in bytes */ -} ThrottleConfig; +}; =20 typedef struct ThrottleState { ThrottleConfig cfg; /* configuration */ diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h index 980d2b3..a28ccf0 100644 --- a/include/qemu/typedefs.h +++ b/include/qemu/typedefs.h @@ -102,6 +102,7 @@ typedef struct uWireSlave uWireSlave; typedef struct VirtIODevice VirtIODevice; typedef struct Visitor Visitor; typedef struct node_info NodeInfo; +typedef struct ThrottleConfig ThrottleConfig; typedef void SaveStateHandler(QEMUFile *f, void *opaque); typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id); =20 diff --git a/util/throttle.c b/util/throttle.c index b38e742..82210c3 100644 --- a/util/throttle.c +++ b/util/throttle.c @@ -27,6 +27,7 @@ #include "qemu/throttle.h" #include "qemu/timer.h" #include "block/aio.h" +#include "qemu/throttle-options.h" =20 /* This function make a bucket leak * @@ -636,3 +637,72 @@ void throttle_config_to_limits(ThrottleConfig *cfg, Th= rottleLimits *var) var->has_iops_write_max_length =3D true; var->has_iops_size =3D true; } + +/* parse the throttle options + * + * @opts: qemu options + * @throttle_cfg: throttle configuration + */ +void throttle_parse_options(ThrottleConfig *throttle_cfg, QemuOpts *opts) +{ + throttle_config_init(throttle_cfg); + throttle_cfg->buckets[THROTTLE_BPS_TOTAL].avg =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_BPS_TOTAL, 0); + throttle_cfg->buckets[THROTTLE_BPS_READ].avg =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_BPS_READ, 0); + throttle_cfg->buckets[THROTTLE_BPS_WRITE].avg =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_BPS_WRITE, 0); + throttle_cfg->buckets[THROTTLE_OPS_TOTAL].avg =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_IOPS_TOTAL, 0); + throttle_cfg->buckets[THROTTLE_OPS_READ].avg =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_IOPS_READ, 0); + throttle_cfg->buckets[THROTTLE_OPS_WRITE].avg =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_IOPS_WRITE, 0); + + throttle_cfg->buckets[THROTTLE_BPS_TOTAL].max =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_BPS_TOTAL_MAX, 0); + throttle_cfg->buckets[THROTTLE_BPS_READ].max =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_BPS_READ_MAX, 0); + throttle_cfg->buckets[THROTTLE_BPS_WRITE].max =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_BPS_WRITE_MAX, 0); + throttle_cfg->buckets[THROTTLE_OPS_TOTAL].max =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_IOPS_TOTAL_MAX, 0); + throttle_cfg->buckets[THROTTLE_OPS_READ].max =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_IOPS_READ_MAX, 0); + throttle_cfg->buckets[THROTTLE_OPS_WRITE].max =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_IOPS_WRITE_MAX, 0); + + throttle_cfg->buckets[THROTTLE_BPS_TOTAL].burst_length =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_BPS_TOTAL_MAX_LENGTH, 1); + throttle_cfg->buckets[THROTTLE_BPS_READ].burst_length =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_BPS_READ_MAX_LENGTH, 1); + throttle_cfg->buckets[THROTTLE_BPS_WRITE].burst_length =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_BPS_WRITE_MAX_LENGTH, 1); + throttle_cfg->buckets[THROTTLE_OPS_TOTAL].burst_length =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_IOPS_TOTAL_MAX_LENGTH, 1); + throttle_cfg->buckets[THROTTLE_OPS_READ].burst_length =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_IOPS_READ_MAX_LENGTH, 1); + throttle_cfg->buckets[THROTTLE_OPS_WRITE].burst_length =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX + QEMU_OPT_IOPS_WRITE_MAX_LENGTH, 1); + + throttle_cfg->op_size =3D + qemu_opt_get_number(opts, THROTTLE_OPT_PREFIX QEMU_OPT_IOPS_SIZE, = 0); +} --=20 1.8.3.1 From nobody Sat May 4 04:28:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@gnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@gnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 150695498538595.30743923022658; Mon, 2 Oct 2017 07:36:25 -0700 (PDT) Received: from localhost ([::1]:52614 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dz1pI-0006qC-IK for importer@patchew.org; Mon, 02 Oct 2017 10:36:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50462) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dz1nO-0005ZB-4f for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dz1nK-0007tx-1j for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:10 -0400 Received: from mail-wr0-x243.google.com ([2a00:1450:400c:c0c::243]:33266) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dz1nJ-0007ti-OV for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:05 -0400 Received: by mail-wr0-x243.google.com with SMTP id z96so2646525wrb.0 for ; Mon, 02 Oct 2017 07:34:05 -0700 (PDT) Received: from localhost.localdomain.localdomain ([217.110.131.66]) by smtp.gmail.com with ESMTPSA id b89sm28440668wrd.42.2017.10.02.07.34.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Oct 2017 07:34:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0w5v6rB769+z/nD7wJAwaPqhcU70kPOHmfMh2+Q10u4=; b=VtKhLzdbzoyrBuR2WLf6hHHy/Sq20GLq/Rgu/znJ72A2edyxISmxJdWqwDZe0eu3ac Y8Tk9XKT98bg2fyDkLmHtpm2LB1cWkdavIpChlcxzP68z7if0EZWC9L3mcGcr2Nh+8jq znD6aKCFhwyAk412AW3rXrbTfG77J4X5If4NXKl+z1xR0AtvlcbTIX/aztNnCuEDto/P Quf25ovCBQ9ntNFjLW4rzwqsl2uofLz4/FGBe2rNNQ0OJ5eOTanIAWrWcAOK5rWkfwlA LOhUxEm+S6Jc5dB3YzWBKcQk9WNoA2aFeqOnfpOUvaSDZkYRgtwIQIecb8dczGtc0/yD TeUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0w5v6rB769+z/nD7wJAwaPqhcU70kPOHmfMh2+Q10u4=; b=puDofaAxMmlVCLjho/2RS2Pe/0RwYsJCBbl7sB9pqm4shSSGVlrZTg/VSGs0v/DHSR PYVOkUoXy5kzNHBUqq68shPIzff4SMJaOiSZS9cQ68FGlB2cNGTgrGZHZytNsJRBoEEW gIchieCA8mrYd+WT27fuoMWUyISrABqvV1+kkvae9vbg8oyF3u2OPNnd1Abj9wXE7dvr Mk3QLGaRzpVjMBNGT/cvlZrMUR6y8mlbKOR9DzM4gn124Jdo5XY5PmyFV+kaw47A/fbZ bBGJYN+s2ip0AW0Aio84u9M66D6xXxadS5AFE0bYr+IbEAhB71kJfHSK/jMpvd+kHtBY Mrog== X-Gm-Message-State: AMCzsaVKgr/WoeKLmyvmzHPCMuWQLlO6PUsGiJZu77j9txWyHvC6pUz1 9j8HV4wH+sfVRVrrPJWdvbs= X-Google-Smtp-Source: AOwi7QD9V2biNF63zhhL9AtI1IRqaCCCldlhG8+I5CmqUXg5wIF/j5WRHiKPpoPNCNR4g8paGhmBGQ== X-Received: by 10.223.136.218 with SMTP id g26mr2606559wrg.86.1506954844654; Mon, 02 Oct 2017 07:34:04 -0700 (PDT) From: Pradeep Jagadeesh X-Google-Original-From: Pradeep Jagadeesh To: "eric blake" , "greg kurz" Date: Mon, 2 Oct 2017 10:33:28 -0400 Message-Id: <1506954812-6552-3-git-send-email-pradeep.jagadeesh@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506954812-6552-1-git-send-email-pradeep.jagadeesh@huawei.com> References: <1506954812-6552-1-git-send-email-pradeep.jagadeesh@huawei.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::243 Subject: [Qemu-devel] [PATCH v13 2/6] qmp: Use ThrottleLimits structure X-BeenThere: qemu-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, jani kokkonen , alberto garcia , Pradeep Jagadeesh , Manos Pitsidianakis Errors-To: qemu-devel-bounces+importer=patchew.org@gnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch factors out code to use the ThrottleLimits structure. Signed-off-by: Pradeep Jagadeesh --- qapi/block-core.json | 75 +++---------------------------------------------= ---- 1 file changed, 3 insertions(+), 72 deletions(-) diff --git a/qapi/block-core.json b/qapi/block-core.json index 750bb0c..f1d2c13 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -1824,86 +1824,17 @@ # # A set of parameters describing block throttling. # -# @device: Block device name (deprecated, use @id instead) -# # @id: The name or QOM path of the guest device (since: 2.8) # -# @bps: total throughput limit in bytes per second -# -# @bps_rd: read throughput limit in bytes per second -# -# @bps_wr: write throughput limit in bytes per second -# -# @iops: total I/O operations per second -# -# @iops_rd: read I/O operations per second -# -# @iops_wr: write I/O operations per second -# -# @bps_max: total throughput limit during bursts, -# in bytes (Since 1.7) -# -# @bps_rd_max: read throughput limit during bursts, -# in bytes (Since 1.7) -# -# @bps_wr_max: write throughput limit during bursts, -# in bytes (Since 1.7) -# -# @iops_max: total I/O operations per second during bursts, -# in bytes (Since 1.7) -# -# @iops_rd_max: read I/O operations per second during bursts, -# in bytes (Since 1.7) -# -# @iops_wr_max: write I/O operations per second during bursts, -# in bytes (Since 1.7) -# -# @bps_max_length: maximum length of the @bps_max burst -# period, in seconds. It must only -# be set if @bps_max is set as well. -# Defaults to 1. (Since 2.6) -# -# @bps_rd_max_length: maximum length of the @bps_rd_max -# burst period, in seconds. It must only -# be set if @bps_rd_max is set as well. -# Defaults to 1. (Since 2.6) -# -# @bps_wr_max_length: maximum length of the @bps_wr_max -# burst period, in seconds. It must only -# be set if @bps_wr_max is set as well. -# Defaults to 1. (Since 2.6) -# -# @iops_max_length: maximum length of the @iops burst -# period, in seconds. It must only -# be set if @iops_max is set as well. -# Defaults to 1. (Since 2.6) -# -# @iops_rd_max_length: maximum length of the @iops_rd_max -# burst period, in seconds. It must only -# be set if @iops_rd_max is set as well. -# Defaults to 1. (Since 2.6) -# -# @iops_wr_max_length: maximum length of the @iops_wr_max -# burst period, in seconds. It must only -# be set if @iops_wr_max is set as well. -# Defaults to 1. (Since 2.6) -# -# @iops_size: an I/O size in bytes (Since 1.7) +# @device: Block device name (deprecated, use @id instead) # # @group: throttle group name (Since 2.4) # # Since: 1.1 ## { 'struct': 'BlockIOThrottle', - 'data': { '*device': 'str', '*id': 'str', 'bps': 'int', 'bps_rd': 'int', - 'bps_wr': 'int', 'iops': 'int', 'iops_rd': 'int', 'iops_wr': '= int', - '*bps_max': 'int', '*bps_rd_max': 'int', - '*bps_wr_max': 'int', '*iops_max': 'int', - '*iops_rd_max': 'int', '*iops_wr_max': 'int', - '*bps_max_length': 'int', '*bps_rd_max_length': 'int', - '*bps_wr_max_length': 'int', '*iops_max_length': 'int', - '*iops_rd_max_length': 'int', '*iops_wr_max_length': 'int', - '*iops_size': 'int', '*group': 'str' } } + 'base': 'ThrottleLimits', + 'data': { '*device': 'str', '*id': 'str', '*group': 'str' } } =20 ## # @ThrottleLimits: --=20 1.8.3.1 From nobody Sat May 4 04:28:25 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@gnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@gnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506955264934232.43400314842597; Mon, 2 Oct 2017 07:41:04 -0700 (PDT) Received: from localhost ([::1]:52637 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dz1tr-0002VH-4k for importer@patchew.org; Mon, 02 Oct 2017 10:40:51 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50518) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dz1nQ-0005bi-T7 for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dz1nK-0007uF-Qk for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:12 -0400 Received: from mail-wr0-x243.google.com ([2a00:1450:400c:c0c::243]:37884) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dz1nK-0007tu-KN for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:06 -0400 Received: by mail-wr0-x243.google.com with SMTP id v38so946576wrc.4 for ; Mon, 02 Oct 2017 07:34:06 -0700 (PDT) Received: from localhost.localdomain.localdomain ([217.110.131.66]) by smtp.gmail.com with ESMTPSA id b89sm28440668wrd.42.2017.10.02.07.34.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Oct 2017 07:34:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=m3NAjA+cvXsRviwHqSSZXq4D/GYGgIOWt6wrE/wZ8aQ=; b=YZpVraJorg4d5C+iND1eG+dlhStQRbRAcMcv1COW/fWjJKrJHXR0vbjAAXfz7IPJGl a5cIzPfGEuwbZd09q+2Zk+VAssYzvNMAZtLXUUh/PjvysYUcuIH2P2m2jxHmyX9+UGJs yuqayNuRYYeUWRrABLL1hrJUzpFzpSWPpIBypBp+HkeCslL9Vj5KW1R/Ur4BBS76kR9v sUDubADxm4urj+JloTpVkQ3RXyQZBOZnhEe6VyrOH8YOz0sjiJEksJdF1VjOAkROoLmY V8xvUlj0v/cWKAHyeHOAq8Tr1R53HbFb/4Hc5p+XaeMMYq8cPzzlLbhsSCdOaAyb9xk2 w9WQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=m3NAjA+cvXsRviwHqSSZXq4D/GYGgIOWt6wrE/wZ8aQ=; b=LrQHoYhBBC9RIVkfuHAGuCU4r+NELydiJrJAlWYh+pzurD+ajyz5gDOxoODjxDkUZP FxBVKbeie1AwogYeJdFT7L4bUlmYp9c7BMzsPdkA35xwmIUPFxpMyx2PTOaezG2hw9vw 3oRIn4+bHEL5IQIq8W9gk36hUhG2q5FUpkX0B/ROW1pzeoJP4JXNVMW+6RzJsgYo7CQa ZNnpmvSGm+OSJ/aDwDILhdAY68JXsGtaNNzw3H8LqEp/XoekrqUMl9JUUN94qoo6R9TB 5Tt7mSlSTmcLhQ0O7hcWnT/jity54DWZh0lmqWX3Ws8YtRVEPI5ZnZCooj4f2KUsDkde vTdg== X-Gm-Message-State: AMCzsaWkOaoVeRp4SoS4QkGQPXMg1hvPBLq/57H0qh2eslnle7K1BckF 0TkdC6I7McCtKL+bQUEEH/Q= X-Google-Smtp-Source: AOwi7QDyhGyzo4mXB/8Uj0AxHn9eu2C3x2VCx4q2dYbWKle1pDe5H5COp7rWy/sROR7txkoTpQliyg== X-Received: by 10.223.146.101 with SMTP id 92mr6813111wrj.21.1506954845577; Mon, 02 Oct 2017 07:34:05 -0700 (PDT) From: Pradeep Jagadeesh X-Google-Original-From: Pradeep Jagadeesh To: "eric blake" , "greg kurz" Date: Mon, 2 Oct 2017 10:33:29 -0400 Message-Id: <1506954812-6552-4-git-send-email-pradeep.jagadeesh@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506954812-6552-1-git-send-email-pradeep.jagadeesh@huawei.com> References: <1506954812-6552-1-git-send-email-pradeep.jagadeesh@huawei.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::243 Subject: [Qemu-devel] [PATCH v13 3/6] qmp: factor out throttle code to reuse code X-BeenThere: qemu-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, jani kokkonen , alberto garcia , Pradeep Jagadeesh , Markus Armbruster Errors-To: qemu-devel-bounces+importer=patchew.org@gnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_6 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch reuses the code to set throttle limits. Signed-off-by: Pradeep Jagadeesh --- blockdev.c | 53 +++-------------------------------------------------- 1 file changed, 3 insertions(+), 50 deletions(-) diff --git a/blockdev.c b/blockdev.c index 43f706d..364df4d 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2570,6 +2570,7 @@ void qmp_block_set_io_throttle(BlockIOThrottle *arg, = Error **errp) BlockDriverState *bs; BlockBackend *blk; AioContext *aio_context; + ThrottleLimits *tlimit; =20 blk =3D qmp_get_blk(arg->has_device ? arg->device : NULL, arg->has_id ? arg->id : NULL, @@ -2587,56 +2588,8 @@ void qmp_block_set_io_throttle(BlockIOThrottle *arg,= Error **errp) goto out; } =20 - throttle_config_init(&cfg); - cfg.buckets[THROTTLE_BPS_TOTAL].avg =3D arg->bps; - cfg.buckets[THROTTLE_BPS_READ].avg =3D arg->bps_rd; - cfg.buckets[THROTTLE_BPS_WRITE].avg =3D arg->bps_wr; - - cfg.buckets[THROTTLE_OPS_TOTAL].avg =3D arg->iops; - cfg.buckets[THROTTLE_OPS_READ].avg =3D arg->iops_rd; - cfg.buckets[THROTTLE_OPS_WRITE].avg =3D arg->iops_wr; - - if (arg->has_bps_max) { - cfg.buckets[THROTTLE_BPS_TOTAL].max =3D arg->bps_max; - } - if (arg->has_bps_rd_max) { - cfg.buckets[THROTTLE_BPS_READ].max =3D arg->bps_rd_max; - } - if (arg->has_bps_wr_max) { - cfg.buckets[THROTTLE_BPS_WRITE].max =3D arg->bps_wr_max; - } - if (arg->has_iops_max) { - cfg.buckets[THROTTLE_OPS_TOTAL].max =3D arg->iops_max; - } - if (arg->has_iops_rd_max) { - cfg.buckets[THROTTLE_OPS_READ].max =3D arg->iops_rd_max; - } - if (arg->has_iops_wr_max) { - cfg.buckets[THROTTLE_OPS_WRITE].max =3D arg->iops_wr_max; - } - - if (arg->has_bps_max_length) { - cfg.buckets[THROTTLE_BPS_TOTAL].burst_length =3D arg->bps_max_leng= th; - } - if (arg->has_bps_rd_max_length) { - cfg.buckets[THROTTLE_BPS_READ].burst_length =3D arg->bps_rd_max_le= ngth; - } - if (arg->has_bps_wr_max_length) { - cfg.buckets[THROTTLE_BPS_WRITE].burst_length =3D arg->bps_wr_max_l= ength; - } - if (arg->has_iops_max_length) { - cfg.buckets[THROTTLE_OPS_TOTAL].burst_length =3D arg->iops_max_len= gth; - } - if (arg->has_iops_rd_max_length) { - cfg.buckets[THROTTLE_OPS_READ].burst_length =3D arg->iops_rd_max_l= ength; - } - if (arg->has_iops_wr_max_length) { - cfg.buckets[THROTTLE_OPS_WRITE].burst_length =3D arg->iops_wr_max_= length; - } - - if (arg->has_iops_size) { - cfg.op_size =3D arg->iops_size; - } + tlimit =3D qapi_BlockIOThrottle_base(arg); + throttle_config_to_limits(&cfg, tlimit); =20 if (!throttle_is_valid(&cfg, errp)) { goto out; --=20 1.8.3.1 From nobody Sat May 4 04:28:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@gnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@gnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 150695497311178.9088841619731; Mon, 2 Oct 2017 07:36:13 -0700 (PDT) Received: from localhost ([::1]:52616 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dz1pM-0006tk-B3 for importer@patchew.org; Mon, 02 Oct 2017 10:36:12 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50525) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dz1nS-0005co-1K for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dz1nM-0007uh-3K for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:14 -0400 Received: from mail-wr0-x241.google.com ([2a00:1450:400c:c0c::241]:37885) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dz1nL-0007uL-T2 for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:08 -0400 Received: by mail-wr0-x241.google.com with SMTP id v38so946608wrc.4 for ; Mon, 02 Oct 2017 07:34:07 -0700 (PDT) Received: from localhost.localdomain.localdomain ([217.110.131.66]) by smtp.gmail.com with ESMTPSA id b89sm28440668wrd.42.2017.10.02.07.34.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Oct 2017 07:34:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=KPljf64mzBI3rA7EhRwQ5L/FPvDUv+hIHgYdBfdiRBQ=; b=LE70LLxccx5BnUxkmuhh4A4qS5i5vw0j5NhJDT/XuZHXKPfUEqIznZ2GRDl+PdDo7Q 8CXjsNQMExYi8hHQFJuGEJseZbILUZyBvC5Q7OO2RBWcU6KplHV5hy76QaQJsSxuEzno EKeSd1FiYD+ys9T0voQLVZ5fPv9AD0eDkSMUYAEKzm6/uQz+JD8nnyCoqqDfC0CKRDA5 p3lTJisK7WmRP3QcLxSEIjPJzV+xfu59hXQvwVZq5zl8XWJvnQJTe++CrZ53FD9k05CT mftI2O/L3D4DeiaaFWdHZ4Lb0OFcyjxR/YPoAs1GqTvZcltbB/lCb3Zm0pWf5M0joVbL ZnzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=KPljf64mzBI3rA7EhRwQ5L/FPvDUv+hIHgYdBfdiRBQ=; b=tffVDISuUFfv5DJUKz22F5oY326+93Wxl4Qoe1wSZXzc4pIi/jPHtK9y0Bm4byi5N3 p113oQQTpUosjYooWkU1zcdX/6mJhibB7HSSbIiWJIdSwN/wqCUYi2AAgejF30o7frVQ KtDYK/YODYyzgNueprXSmQDEEHmqd8/iEt0/0xkmQu5KoCg1WmYNxrsBjcRIVp+KG4kq LnLWOVtms4uQUiS7KEcyFSs9d0ds6nZ5JTr0xFcqB6ta5gqbMDsaYGXMPIPOTcTnib1t UfBkWtoMptLREKi3HkoHPHzewd1kw2SYfU89OqGo2uN3LMQgsVVqjyQGq8lG5XzXl0Cl W/Ew== X-Gm-Message-State: AMCzsaWrYnN4R1h49WTRRFXA5mmtngGhZpgfBMivQNnNU24KL36Www/7 zHJx97F3/11UIVJ1Vx2zN6g= X-Google-Smtp-Source: AOwi7QCzAqNqBPW4a+Npju6hCfbBYIfkGYmgyY0cCpsk4sxXaOm+Fr5kK/J/KHEYTbZHY+HWLUI01w== X-Received: by 10.223.136.246 with SMTP id g51mr2119716wrg.226.1506954846692; Mon, 02 Oct 2017 07:34:06 -0700 (PDT) From: Pradeep Jagadeesh X-Google-Original-From: Pradeep Jagadeesh To: "eric blake" , "greg kurz" Date: Mon, 2 Oct 2017 10:33:30 -0400 Message-Id: <1506954812-6552-5-git-send-email-pradeep.jagadeesh@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506954812-6552-1-git-send-email-pradeep.jagadeesh@huawei.com> References: <1506954812-6552-1-git-send-email-pradeep.jagadeesh@huawei.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::241 Subject: [Qemu-devel] [PATCH v13 4/6] hmp: create a throttle initialization function for code reuse X-BeenThere: qemu-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, jani kokkonen , alberto garcia , Pradeep Jagadeesh , "Dr. David Alan Gilbert" Errors-To: qemu-devel-bounces+importer=patchew.org@gnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch creates a throttle initialization function to maximize the code reusability. The same code is also used by fsdev. Signed-off-by: Pradeep Jagadeesh Reviewed-by: Alberto Garcia Reviewed-by: Greg Kurz Acked-by: Dr. David Alan Gilbert --- hmp.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/hmp.c b/hmp.c index ace729d..904fc4a 100644 --- a/hmp.c +++ b/hmp.c @@ -1766,20 +1766,28 @@ void hmp_change(Monitor *mon, const QDict *qdict) hmp_handle_error(mon, &err); } =20 +static void hmp_initialize_throttle_limits(ThrottleLimits *iot, + const QDict *qdict) +{ + iot->bps_total =3D qdict_get_int(qdict, "bps"); + iot->bps_read =3D qdict_get_int(qdict, "bps_rd"); + iot->bps_write =3D qdict_get_int(qdict, "bps_wr"); + iot->iops_total =3D qdict_get_int(qdict, "iops"); + iot->iops_read =3D qdict_get_int(qdict, "iops_rd"); + iot->iops_write =3D qdict_get_int(qdict, "iops_wr"); +} + void hmp_block_set_io_throttle(Monitor *mon, const QDict *qdict) { Error *err =3D NULL; + ThrottleLimits *tlimits; BlockIOThrottle throttle =3D { .has_device =3D true, .device =3D (char *) qdict_get_str(qdict, "device"), - .bps =3D qdict_get_int(qdict, "bps"), - .bps_rd =3D qdict_get_int(qdict, "bps_rd"), - .bps_wr =3D qdict_get_int(qdict, "bps_wr"), - .iops =3D qdict_get_int(qdict, "iops"), - .iops_rd =3D qdict_get_int(qdict, "iops_rd"), - .iops_wr =3D qdict_get_int(qdict, "iops_wr"), }; =20 + tlimits =3D qapi_BlockIOThrottle_base(&throttle); + hmp_initialize_throttle_limits(tlimits, qdict); qmp_block_set_io_throttle(&throttle, &err); hmp_handle_error(mon, &err); } --=20 1.8.3.1 From nobody Sat May 4 04:28:25 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@gnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@gnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506955126782849.2258417480534; Mon, 2 Oct 2017 07:38:46 -0700 (PDT) Received: from localhost ([::1]:52624 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dz1rh-0000ZC-VJ for importer@patchew.org; Mon, 02 Oct 2017 10:38:38 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50541) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dz1nT-0005eR-Dz for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dz1nN-0007v6-0m for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:15 -0400 Received: from mail-wr0-x243.google.com ([2a00:1450:400c:c0c::243]:37885) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dz1nM-0007ul-NI for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:08 -0400 Received: by mail-wr0-x243.google.com with SMTP id v38so946633wrc.4 for ; Mon, 02 Oct 2017 07:34:08 -0700 (PDT) Received: from localhost.localdomain.localdomain ([217.110.131.66]) by smtp.gmail.com with ESMTPSA id b89sm28440668wrd.42.2017.10.02.07.34.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Oct 2017 07:34:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ciLgGFJe7LfTO5QHt96NqeY7iVJDkqgH31QjLoNpUqo=; b=pLdagDxkNShOdI3JYNIWksCE02eXdce/Sok6qCpBMfqm/UITr4oLUQQq/Awo/hHJyP KCt4lGMCFFlJ/Prxfww77UyvHTAH2q2zEpsMPXQCCRHSTHpKqXQZ7YrJ6RuHSvhgpPkO gulaDRCDQEg8iWPKz9EGItiobTsGF0HlxoV4Ju8L61fUswdxQc3sUiVbsbjcuurD+xnd eRApunHnlUIAbtkrIWhD33zUK/rrG/47JbY33KY55+GWy6S+qo2tW1qjZD8d0hx6TGVC ACAhOBYvDBGOwqxW3VGykDMj18wzZ+Rzg/WHZSAjWAJdbI0HACMakl0gYZGan0Rj0D97 TDdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ciLgGFJe7LfTO5QHt96NqeY7iVJDkqgH31QjLoNpUqo=; b=J3hTD2xi0oEjuVqmVHcSx2vsYpPMS0dP8UX4K0MYaP4/lLTF+dp2CQhdvVV8RzuSda p6G+7ct2sKAY20mzo1VD4ix3ZWfPC8O3IxQp/G08/eRhUQyAplt9VFP5drRcJacPro3A /cKdxzZEcgq5M5c/Kb5G9UEG2Orp4pM4Q12eMg35wJBqf66LjAT54Y1+cfYqplRYtuVj +DJBJfU69tYd50oL3ecXfFWwoRfwKw9TPuoRk+uUaEAxCl/AUH8MBlenFB/EwT0SKjhA s4pb1Mg0lnIoytp7evVDdlez68QFtGlwSM6+V+L0Nijk1HZ/Nw8L+EINtR9Eq4mTAG8/ k0kA== X-Gm-Message-State: AMCzsaUTpPZ1FT3Z9JrDt08qKYypo9Ctbubczp5Xd9mMBJ8KQTa+VRvm xE1qRG7894geaAmhQgypT/4= X-Google-Smtp-Source: AOwi7QC+kcNd+7Fvm4mtUFmEhs9b50FjB/TrWPVJgXkY03xUqcqDu+wXNEk1JzPfFCTGnf0ToFeowg== X-Received: by 10.223.179.18 with SMTP id j18mr2004736wrd.262.1506954847588; Mon, 02 Oct 2017 07:34:07 -0700 (PDT) From: Pradeep Jagadeesh X-Google-Original-From: Pradeep Jagadeesh To: "eric blake" , "greg kurz" Date: Mon, 2 Oct 2017 10:33:31 -0400 Message-Id: <1506954812-6552-6-git-send-email-pradeep.jagadeesh@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506954812-6552-1-git-send-email-pradeep.jagadeesh@huawei.com> References: <1506954812-6552-1-git-send-email-pradeep.jagadeesh@huawei.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::243 Subject: [Qemu-devel] [PATCH v13 5/6] fsdev: QMP interface for throttling X-BeenThere: qemu-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: alberto garcia , Markus Armbruster , qemu-devel@nongnu.org, "Dr. David Alan Gilbert" , Pradeep Jagadeesh , jani kokkonen Errors-To: qemu-devel-bounces+importer=patchew.org@gnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch introduces qmp interfaces for the fsdev devices. This provides two interfaces one for querying info of all the fsdev devices. The second one to set the IO limits for the required fsdev device. Signed-off-by: Pradeep Jagadeesh Reviewed-by: Dr. David Alan Gilbert --- Makefile | 3 +- fsdev/qemu-fsdev-dummy.c | 11 +++++ fsdev/qemu-fsdev-throttle.c | 100 ++++++++++++++++++++++++++++++++++++++++= +--- fsdev/qemu-fsdev-throttle.h | 9 +++- fsdev/qemu-fsdev.c | 30 +++++++++++++ monitor.c | 5 +++ qapi-schema.json | 4 ++ qapi/fsdev.json | 94 +++++++++++++++++++++++++++++++++++++++++ qmp.c | 14 +++++++ 9 files changed, 261 insertions(+), 9 deletions(-) create mode 100644 qapi/fsdev.json diff --git a/Makefile b/Makefile index cee6e28..018cae1 100644 --- a/Makefile +++ b/Makefile @@ -417,7 +417,8 @@ qapi-modules =3D $(SRC_PATH)/qapi-schema.json $(SRC_PAT= H)/qapi/common.json \ $(SRC_PATH)/qapi/tpm.json \ $(SRC_PATH)/qapi/trace.json \ $(SRC_PATH)/qapi/transaction.json \ - $(SRC_PATH)/qapi/ui.json + $(SRC_PATH)/qapi/ui.json \ + $(SRC_PATH)/qapi/fsdev.json =20 qapi-types.c qapi-types.h :\ $(qapi-modules) $(SRC_PATH)/scripts/qapi-types.py $(qapi-py) diff --git a/fsdev/qemu-fsdev-dummy.c b/fsdev/qemu-fsdev-dummy.c index 6dc0fbc..b775e66 100644 --- a/fsdev/qemu-fsdev-dummy.c +++ b/fsdev/qemu-fsdev-dummy.c @@ -14,8 +14,19 @@ #include "qemu-fsdev.h" #include "qemu/config-file.h" #include "qemu/module.h" +#include "qmp-commands.h" =20 int qemu_fsdev_add(QemuOpts *opts) { return 0; } + +void qmp_fsdev_set_io_throttle(FsdevIOThrottle *arg, Error **errp) +{ + return; +} + +FsdevIOThrottleList *qmp_query_fsdev_io_throttle(Error **errp) +{ + return NULL; +} diff --git a/fsdev/qemu-fsdev-throttle.c b/fsdev/qemu-fsdev-throttle.c index 0e6fb86..7825be8 100644 --- a/fsdev/qemu-fsdev-throttle.c +++ b/fsdev/qemu-fsdev-throttle.c @@ -16,6 +16,7 @@ #include "qemu/error-report.h" #include "qemu-fsdev-throttle.h" #include "qemu/iov.h" +#include "qemu/main-loop.h" #include "qemu/throttle-options.h" =20 static void fsdev_throttle_read_timer_cb(void *opaque) @@ -30,6 +31,96 @@ static void fsdev_throttle_write_timer_cb(void *opaque) qemu_co_enter_next(&fst->throttled_reqs[true]); } =20 +typedef struct { + FsThrottle *fst; + bool is_write; +} RestartData; + +static bool coroutine_fn throttle_co_restart_queue(FsThrottle *fst, + bool is_write) +{ + return qemu_co_queue_next(&fst->throttled_reqs[is_write]); +} + +static void schedule_next_request(FsThrottle *fst, bool is_write) +{ + bool must_wait =3D throttle_schedule_timer(&fst->ts, &fst->tt, is_writ= e); + if (!must_wait) { + if (qemu_in_coroutine() && + throttle_co_restart_queue(fst, is_write)) { + return; + } else { + int64_t now =3D qemu_clock_get_ns(QEMU_CLOCK_REALTIME); + timer_mod(fst->tt.timers[is_write], now); + } + } +} + +static void coroutine_fn throttle_restart_queue_entry(void *opaque) +{ + RestartData *data =3D opaque; + bool is_write =3D data->is_write; + bool empty_queue =3D !throttle_co_restart_queue(data->fst, is_write); + if (empty_queue) { + schedule_next_request(data->fst, is_write); + } +} + +static void throttle_restart_queues(FsThrottle *fst) +{ + Coroutine *co; + RestartData rd =3D { + .fst =3D fst, + .is_write =3D true + }; + + co =3D qemu_coroutine_create(throttle_restart_queue_entry, &rd); + aio_co_enter(fst->ctx, co); + + rd.is_write =3D false; + + co =3D qemu_coroutine_create(throttle_restart_queue_entry, &rd); + aio_co_enter(fst->ctx, co); +} + +static void coroutine_fn fsdev_throttle_config(FsThrottle *fst) +{ + if (throttle_enabled(&fst->cfg)) { + throttle_config(&fst->ts, QEMU_CLOCK_REALTIME, &fst->cfg); + } else { + throttle_restart_queues(fst); + } +} + +void fsdev_set_io_throttle(FsdevIOThrottle *arg, FsThrottle *fst, Error **= errp) +{ + ThrottleConfig cfg; + ThrottleLimits *tlimits; + + throttle_get_config(&fst->ts, &cfg); + tlimits =3D qapi_FsdevIOThrottle_base(arg); + throttle_limits_to_config(tlimits, &cfg, errp); + + if (throttle_is_valid(&cfg, errp)) { + fst->cfg =3D cfg; + fsdev_throttle_config(fst); + } +} + +void fsdev_get_io_throttle(FsThrottle *fst, FsdevIOThrottle **fs9pcfg, + char *fsdevice) +{ + ThrottleConfig cfg =3D fst->cfg; + ThrottleLimits *tlimits; + FsdevIOThrottle *fscfg =3D g_malloc(sizeof(*fscfg)); + tlimits =3D qapi_FsdevIOThrottle_base(fscfg); + + fscfg->has_id =3D true; + fscfg->id =3D g_strdup(fsdevice); + throttle_config_to_limits(&cfg, tlimits); + *fs9pcfg =3D fscfg; +} + void fsdev_throttle_parse_opts(QemuOpts *opts, FsThrottle *fst, Error **er= rp) { throttle_parse_options(&fst->cfg, opts); @@ -40,8 +131,9 @@ void fsdev_throttle_init(FsThrottle *fst) { if (throttle_enabled(&fst->cfg)) { throttle_init(&fst->ts); + fst->ctx =3D qemu_get_aio_context(); throttle_timers_init(&fst->tt, - qemu_get_aio_context(), + fst->ctx, QEMU_CLOCK_REALTIME, fsdev_throttle_read_timer_cb, fsdev_throttle_write_timer_cb, @@ -62,11 +154,7 @@ void coroutine_fn fsdev_co_throttle_request(FsThrottle = *fst, bool is_write, } =20 throttle_account(&fst->ts, is_write, iov_size(iov, iovcnt)); - - if (!qemu_co_queue_empty(&fst->throttled_reqs[is_write]) && - !throttle_schedule_timer(&fst->ts, &fst->tt, is_write)) { - qemu_co_queue_next(&fst->throttled_reqs[is_write]); - } + schedule_next_request(fst, is_write); } } =20 diff --git a/fsdev/qemu-fsdev-throttle.h b/fsdev/qemu-fsdev-throttle.h index e418643..5331c23 100644 --- a/fsdev/qemu-fsdev-throttle.h +++ b/fsdev/qemu-fsdev-throttle.h @@ -15,8 +15,6 @@ #ifndef _FSDEV_THROTTLE_H #define _FSDEV_THROTTLE_H =20 -#include "block/aio.h" -#include "qemu/main-loop.h" #include "qemu/coroutine.h" #include "qapi/error.h" #include "qemu/throttle.h" @@ -25,6 +23,7 @@ typedef struct FsThrottle { ThrottleState ts; ThrottleTimers tt; ThrottleConfig cfg; + AioContext *ctx; CoQueue throttled_reqs[2]; } FsThrottle; =20 @@ -36,4 +35,10 @@ void coroutine_fn fsdev_co_throttle_request(FsThrottle *= , bool , struct iovec *, int); =20 void fsdev_throttle_cleanup(FsThrottle *); + +void fsdev_set_io_throttle(FsdevIOThrottle *, FsThrottle *, Error **errp); + +void fsdev_get_io_throttle(FsThrottle *, FsdevIOThrottle **iothp, + char *); + #endif /* _FSDEV_THROTTLE_H */ diff --git a/fsdev/qemu-fsdev.c b/fsdev/qemu-fsdev.c index 266e442..4bfd233 100644 --- a/fsdev/qemu-fsdev.c +++ b/fsdev/qemu-fsdev.c @@ -16,6 +16,7 @@ #include "qemu-common.h" #include "qemu/config-file.h" #include "qemu/error-report.h" +#include "qmp-commands.h" =20 static QTAILQ_HEAD(FsDriverEntry_head, FsDriverListEntry) fsdriver_entries= =3D QTAILQ_HEAD_INITIALIZER(fsdriver_entries); @@ -98,3 +99,32 @@ FsDriverEntry *get_fsdev_fsentry(char *id) } return NULL; } + +void qmp_fsdev_set_io_throttle(FsdevIOThrottle *arg, Error **errp) +{ + + FsDriverEntry *fse; + + fse =3D get_fsdev_fsentry(arg->has_id ? arg->id : NULL); + if (!fse) { + error_setg(errp, "Not a valid fsdev device"); + return; + } + + fsdev_set_io_throttle(arg, &fse->fst, errp); +} + +FsdevIOThrottleList *qmp_query_fsdev_io_throttle(Error **errp) +{ + FsdevIOThrottleList *head =3D NULL, *p_next; + struct FsDriverListEntry *fsle; + + QTAILQ_FOREACH(fsle, &fsdriver_entries, next) { + p_next =3D g_new0(FsdevIOThrottleList, 1); + fsdev_get_io_throttle(&fsle->fse.fst, &p_next->value, + fsle->fse.fsdev_id); + p_next->next =3D head; + head =3D p_next; + } + return head; +} diff --git a/monitor.c b/monitor.c index f4856b9..0a8f0ed 100644 --- a/monitor.c +++ b/monitor.c @@ -998,6 +998,11 @@ static void qmp_unregister_commands_hack(void) && !defined(TARGET_S390X) qmp_unregister_command(&qmp_commands, "query-cpu-definitions"); #endif +#ifndef CONFIG_VIRTFS + qmp_unregister_command(&qmp_commands, "fsdev-set-io-throttle"); + qmp_unregister_command(&qmp_commands, "query-fsdev-io-throttle"); +#endif + } =20 void monitor_init_qmp_commands(void) diff --git a/qapi-schema.json b/qapi-schema.json index a3ba1c9..d9036f7 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -93,6 +93,10 @@ { 'include': 'qapi/trace.json' } { 'include': 'qapi/introspect.json' } =20 +# QAPI fsdev definitions +{ 'include': 'qapi/fsdev.json' } + + ## # =3D Miscellanea ## diff --git a/qapi/fsdev.json b/qapi/fsdev.json new file mode 100644 index 0000000..3beccab --- /dev/null +++ b/qapi/fsdev.json @@ -0,0 +1,94 @@ +# -*- Mode: Python -*- + +## +# =3D=3D QAPI fsdev definitions +## + +## +# @FsdevIOThrottle: +# +# A set of parameters describing block throttling. +# +# @id: device id +# +# Since: 2.11 +## +{ 'struct': 'FsdevIOThrottle', + 'base': 'ThrottleLimits', + 'data': { '*id': 'str' } } + +## +# @fsdev-set-io-throttle: +# +# Change I/O limits for a 9p/fsdev device. +# +# I/O limits can be enabled by setting throttle value to non-zero number. +# +# I/O limits can be disabled by setting all throttle values to 0. +# +# Returns: Nothing on success +# If @device is not a valid fsdev device, GenericError +# +# Since: 2.11 +# +# Example: +# +# -> { "execute": "fsdev-set-io-throttle", +# "arguments": { "id": "id0-1-0", +# "bps": 1000000, +# "bps_rd": 0, +# "bps_wr": 0, +# "iops": 0, +# "iops_rd": 0, +# "iops_wr": 0, +# "bps_max": 8000000, +# "bps_rd_max": 0, +# "bps_wr_max": 0, +# "iops_max": 0, +# "iops_rd_max": 0, +# "iops_wr_max": 0, +# "bps_max_length": 60, +# "iops_size": 0 } } +# <- { "returns": {} } +## +{ 'command': 'fsdev-set-io-throttle', 'boxed': true, + 'data': 'FsdevIOThrottle' } +## +# @query-fsdev-io-throttle: +# +# Returns: a list of @IOThrottle describing I/O throttle +# values of each fsdev device +# +# Since: 2.11 +# +# Example: +# +# -> { "Execute": "query-fsdev-io-throttle" } +# <- { "returns" : [ +# { +# "id": "id0-hd0", +# "bps":1000000, +# "bps_rd":0, +# "bps_wr":0, +# "iops":1000000, +# "iops_rd":0, +# "iops_wr":0, +# "bps_max": 8000000, +# "bps_rd_max": 0, +# "bps_wr_max": 0, +# "iops_max": 0, +# "iops_rd_max": 0, +# "iops_wr_max": 0, +# "bps_max_length": 0, +# "bps_rd_max_length": 0, +# "bps_wr_max_length": 0, +# "iops_max_length": 0, +# "iops_rd_max_length": 0, +# "iops_wr_max_length": 0, +# "iops_size": 0 +# } +# ] +# } +# +## +{ 'command': 'query-fsdev-io-throttle', 'returns': [ 'FsdevIOThrottle' ] } diff --git a/qmp.c b/qmp.c index e8c3031..e90a401 100644 --- a/qmp.c +++ b/qmp.c @@ -130,6 +130,20 @@ void qmp_cpu_add(int64_t id, Error **errp) } } =20 +#if defined(_WIN64) || defined(_WIN32) || defined(__FreeBSD__) + +void qmp_fsdev_set_io_throttle(FsdevIOThrottle *arg, Error **errp) +{ + return; +} + +FsdevIOThrottleList *qmp_query_fsdev_io_throttle(Error **errp) +{ + return NULL; +} + +#endif + #ifndef CONFIG_VNC /* If VNC support is enabled, the "true" query-vnc command is defined in the VNC subsystem */ --=20 1.8.3.1 From nobody Sat May 4 04:28:25 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@gnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@gnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506955130731912.5015435347062; Mon, 2 Oct 2017 07:38:50 -0700 (PDT) Received: from localhost ([::1]:52623 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dz1rf-0000XY-47 for importer@patchew.org; Mon, 02 Oct 2017 10:38:35 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50498) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dz1nP-0005Zt-2e for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dz1nN-0007w4-VP for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:11 -0400 Received: from mail-wm0-x241.google.com ([2a00:1450:400c:c09::241]:54666) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dz1nN-0007vA-Mf for qemu-devel@nongnu.org; Mon, 02 Oct 2017 10:34:09 -0400 Received: by mail-wm0-x241.google.com with SMTP id i124so11009703wmf.3 for ; Mon, 02 Oct 2017 07:34:09 -0700 (PDT) Received: from localhost.localdomain.localdomain ([217.110.131.66]) by smtp.gmail.com with ESMTPSA id b89sm28440668wrd.42.2017.10.02.07.34.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Oct 2017 07:34:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=k6XI8Mh5TAanMTeqJUqaDQXYMF/OojY77VMCh+2Zrmo=; b=UXl1Fe/qZl9laRUaj+roJGP3g+ABWg7ZxjP347UswW5CxIfJ1Kt5mfJ54SoVcejv/j 3uKjWd8DSRqlCJB6BHr1OmT3O1TKG0Ns/AvA7LK5ILDPT7L2JQw2HO3yOTG8rA0VgJ+H Um9+wpxEUFYCYeq47wpw9Q0iBdRV/KdGYKqqJTM3wVYjMEjwCqwLVWHy680ZTGa5QS5e Em7TOcEzftee087+cAeRhsrR96gBJqCVCCic2soq5tm8BQijenQnqKEoidDCCVqfikEE kO8B4cgMbdkkfR9Hw6XbpXS4eGS4YyLKtwM/zTlXUx/DgKYXGJ65q8XEWDIBt97Ew//m CNgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=k6XI8Mh5TAanMTeqJUqaDQXYMF/OojY77VMCh+2Zrmo=; b=hktcEav0L/iH24FxIwJObinApoe1DJvuteTh1QxikjOi5bar5rhVzDDXZ2NVjsji88 OHMD6sgEQ7SF+EpqY3OouT+TBnEdtzWx2VNtA14sVgeRmo7ahEQcPh/W3838CJpCm/Jo vxGnTE2jOPYvwrLMYmMLxpbCVt2fEVQzRxTBVJULH2H1j8OdWiwAAUUGvYs5eaCFa4Sd Tok3VR8BloVl4wowlR3DwAKfJjHmm3oXt3EqPqKhbjBQUxtN2Lna3UdhKll8MAWbXN0A M3mcV74TuJA9ARRMHJkx/+ygP3xUi0MgJyDcSxJ86Y/s+aBChwXQIsv0cY3T0zfpfPdt Z6CQ== X-Gm-Message-State: AMCzsaWxT82LAK+Wz7Oh7CXwOW7+utg7h2GTr0ApTbmLkIigJKq2TR/y rBY1XAgAzop/Qn65bzxIZaY= X-Google-Smtp-Source: AOwi7QAHgBIqm3HfiLUu3I5160Hbj0Wv/KJ0LnkZ+n+jt9Uj/l8ENosFMb/uIlMXZFOk7xp2VGVrEQ== X-Received: by 10.28.178.205 with SMTP id b196mr526052wmf.103.1506954848586; Mon, 02 Oct 2017 07:34:08 -0700 (PDT) From: Pradeep Jagadeesh X-Google-Original-From: Pradeep Jagadeesh To: "eric blake" , "greg kurz" Date: Mon, 2 Oct 2017 10:33:32 -0400 Message-Id: <1506954812-6552-7-git-send-email-pradeep.jagadeesh@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506954812-6552-1-git-send-email-pradeep.jagadeesh@huawei.com> References: <1506954812-6552-1-git-send-email-pradeep.jagadeesh@huawei.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c09::241 Subject: [Qemu-devel] [PATCH v13 6/6] fsdev: hmp interface for throttling X-BeenThere: qemu-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-devel@nongnu.org, jani kokkonen , alberto garcia , Pradeep Jagadeesh , "Dr. David Alan Gilbert" Errors-To: qemu-devel-bounces+importer=patchew.org@gnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_6 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This patch introduces hmp interfaces for the fsdev devices. Signed-off-by: Pradeep Jagadeesh Reviewed-by: Dr. David Alan Gilbert Reviewed-by: Alberto Garcia --- hmp-commands-info.hx | 18 ++++++++++++++++ hmp-commands.hx | 19 ++++++++++++++++ hmp.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++= ++++ hmp.h | 4 ++++ 4 files changed, 102 insertions(+) diff --git a/hmp-commands-info.hx b/hmp-commands-info.hx index 4f1ece9..9e1a26f 100644 --- a/hmp-commands-info.hx +++ b/hmp-commands-info.hx @@ -84,6 +84,24 @@ STEXI Show block device statistics. ETEXI =20 +#if defined(CONFIG_VIRTFS) + + { + .name =3D "fsdev_iothrottle", + .args_type =3D "", + .params =3D "", + .help =3D "show fsdev iothrottle information", + .cmd =3D hmp_info_fsdev_iothrottle, + }, + +#endif + +STEXI +@item info fsdev_iothrottle +@findex fsdev_iothrottle +Show fsdev device throttle info. +ETEXI + { .name =3D "block-jobs", .args_type =3D "", diff --git a/hmp-commands.hx b/hmp-commands.hx index 1941e19..aef9f79 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -1680,6 +1680,25 @@ STEXI Change I/O throttle limits for a block drive to @var{bps} @var{bps_rd} @va= r{bps_wr} @var{iops} @var{iops_rd} @var{iops_wr} ETEXI =20 +#if defined(CONFIG_VIRTFS) + + { + .name =3D "fsdev_set_io_throttle", + .args_type =3D "device:B,bps:l,bps_rd:l,bps_wr:l,iops:l,iops_rd:l= ,iops_wr:l", + .params =3D "device bps bps_rd bps_wr iops iops_rd iops_wr", + .help =3D "change I/O throttle limits for a fs devices", + .cmd =3D hmp_fsdev_set_io_throttle, + }, + +#endif + +STEXI +@item fsdev_set_io_throttle @var{device} @var{bps} @var{bps_rd} @var{bps_w= r} @var{iops} @var{iops_rd} @var{iops_wr} +@findex fsdev_set_io_throttle +Change I/O throttle limits for a fs devices to @var{bps} @var{bps_rd} @var= {bps_wr} @var{iops} @var{iops_rd} @var{iops_wr} +ETEXI + + { .name =3D "set_password", .args_type =3D "protocol:s,password:s,connected:s?", diff --git a/hmp.c b/hmp.c index 904fc4a..dc0dbf1 100644 --- a/hmp.c +++ b/hmp.c @@ -1792,6 +1792,67 @@ void hmp_block_set_io_throttle(Monitor *mon, const Q= Dict *qdict) hmp_handle_error(mon, &err); } =20 +#ifdef CONFIG_VIRTFS + +void hmp_fsdev_set_io_throttle(Monitor *mon, const QDict *qdict) +{ + Error *err =3D NULL; + ThrottleLimits *tlimits; + FsdevIOThrottle throttle =3D { + .has_id =3D true, + .id =3D (char *) qdict_get_str(qdict, "device"), + }; + + tlimits =3D qapi_FsdevIOThrottle_base(&throttle); + hmp_initialize_throttle_limits(tlimits, qdict); + qmp_fsdev_set_io_throttle(&throttle, &err); + hmp_handle_error(mon, &err); +} + +static void print_fsdev_throttle_config(Monitor *mon, FsdevIOThrottle *fsc= fg) +{ + monitor_printf(mon, "%s", fscfg->id); + monitor_printf(mon, " I/O throttling:" + " bps=3D%" PRId64 + " bps_rd=3D%" PRId64 " bps_wr=3D%" PRId64 + " bps_max=3D%" PRId64 + " bps_rd_max=3D%" PRId64 + " bps_wr_max=3D%" PRId64 + " iops=3D%" PRId64 " iops_rd=3D%" PRId64 + " iops_wr=3D%" PRId64 + " iops_max=3D%" PRId64 + " iops_rd_max=3D%" PRId64 + " iops_wr_max=3D%" PRId64 + " iops_size=3D%" PRId64 + "\n", + fscfg->bps_total, + fscfg->bps_read, + fscfg->bps_write, + fscfg->bps_total_max, + fscfg->bps_read_max, + fscfg->bps_write_max, + fscfg->iops_total, + fscfg->iops_read, + fscfg->iops_write, + fscfg->iops_total_max, + fscfg->iops_read_max, + fscfg->iops_write_max, + fscfg->iops_size); +} + +void hmp_info_fsdev_iothrottle(Monitor *mon, const QDict *qdict) +{ + FsdevIOThrottleList *fsdev_list, *info; + fsdev_list =3D qmp_query_fsdev_io_throttle(NULL); + + for (info =3D fsdev_list; info; info =3D info->next) { + print_fsdev_throttle_config(mon, info->value); + } + qapi_free_FsdevIOThrottleList(fsdev_list); +} + +#endif + void hmp_block_stream(Monitor *mon, const QDict *qdict) { Error *error =3D NULL; diff --git a/hmp.h b/hmp.h index 3605003..5a06590 100644 --- a/hmp.h +++ b/hmp.h @@ -81,6 +81,10 @@ void hmp_set_password(Monitor *mon, const QDict *qdict); void hmp_expire_password(Monitor *mon, const QDict *qdict); void hmp_eject(Monitor *mon, const QDict *qdict); void hmp_change(Monitor *mon, const QDict *qdict); +#ifdef CONFIG_VIRTFS +void hmp_fsdev_set_io_throttle(Monitor *mon, const QDict *qdict); +void hmp_info_fsdev_iothrottle(Monitor *mon, const QDict *qdict); +#endif void hmp_block_set_io_throttle(Monitor *mon, const QDict *qdict); void hmp_block_stream(Monitor *mon, const QDict *qdict); void hmp_block_job_set_speed(Monitor *mon, const QDict *qdict); --=20 1.8.3.1