From nobody Sun May 5 01:45:54 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@nongnu.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@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506082102387699.4286488575008; Fri, 22 Sep 2017 05:08:22 -0700 (PDT) Received: from localhost ([::1]:58499 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvMki-0000xR-5b for importer@patchew.org; Fri, 22 Sep 2017 08:08:16 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46781) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvMh0-0006NE-5j for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dvMgv-0004tw-B2 for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:26 -0400 Received: from mail-wr0-x244.google.com ([2a00:1450:400c:c0c::244]:37267) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dvMgv-0004sz-25 for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:21 -0400 Received: by mail-wr0-x244.google.com with SMTP id u48so543463wrf.4 for ; Fri, 22 Sep 2017 05:04:19 -0700 (PDT) Received: from localhost.localdomain.localdomain ([217.110.131.66]) by smtp.gmail.com with ESMTPSA id v78sm2567133wmv.48.2017.09.22.05.04.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Sep 2017 05:04:17 -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=5JEgF++of2HEY1tgWrx2rTNG/tiuHdfoeMqx9yD0dmw=; b=CS4Jf9YDujALJL3ltsAkF6+LRfg2b+Z9WZo1Piqmb51KI5sJ3f/ddk8iM2R8m+KWwY fBFt6nthDJblC9v4UKOOAZMy2G4C7ZPhdt6h8ABEjcC1vlOH/4MHDsKuaOrDoZMittlx 9ROqqr8efK9lcx6Xrgs2EJCFt6WY1fHpBgOqL+AxqOBX56lCC2EH+0IPhIJOEyQxp8LA pkArFdO1TGOdTIs0GAwibpgMQrI8lU3MlBlhTOYXnAZKwi1Zv2hS2/2S7lwx6Etb5izo DjJ+i99K/cU14vQebW7LXAzJltklNfzbnfOqcYZTBr++LYHKLMotZQeO5q2F2FDzEGqp tqXQ== 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=5JEgF++of2HEY1tgWrx2rTNG/tiuHdfoeMqx9yD0dmw=; b=Z5PnQz7GtpXKWhcT1v0t8Dbng08Pmyjg85IwbzRRwmXYSMMaPHQl1Qh1JnfHYvTkwF 5XAl4IRYB33iOu6wxb7T1ApGS06kW9+fMfExdfubuCpxmdssMsJFJn7vL1MzHRBG//Oz d6NWY60gnR80UTwe+bd+94paLIMt82aEMFTyvZF3/xXRyluRvioxtEM98pq08HUslE1P khvjTgVU4qDw2l+rzjWD8c2+hon3RZpVLvPsLbhRhaNBmyIPdfiqVIcETuUXTpHnGbsd K2ChPV63iKC8RZvP4H6hGTHthVpw9HkMgzBCck8FD//BNcUCp+c/WZDcZ97x2GIWr+5Y e81g== X-Gm-Message-State: AHPjjUjOm0CQoqD0gu2gpEPo5EE5SigmvCAnLbJYVfim2ibXDe55w8Kz dFQAFviPGkcgBvK3KAPbae8= X-Google-Smtp-Source: AOwi7QDc1hfQHoG3s2+l2i9+0eCfayZCSmQOA/JwBe3Jvnaok7ZEA01lUeVJzvGmAO1ScT0HWAFy+Q== X-Received: by 10.223.136.123 with SMTP id e56mr4893389wre.227.1506081858339; Fri, 22 Sep 2017 05:04:18 -0700 (PDT) From: Pradeep Jagadeesh X-Google-Original-From: Pradeep Jagadeesh To: "eric blake" , "greg kurz" Date: Fri, 22 Sep 2017 08:03:40 -0400 Message-Id: <1506081825-14209-2-git-send-email-pradeep.jagadeesh@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506081825-14209-1-git-send-email-pradeep.jagadeesh@huawei.com> References: <1506081825-14209-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::244 Subject: [Qemu-devel] [PATCH v12 1/6] throttle: factor out duplicate code X-BeenThere: qemu-devel@nongnu.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@nongnu.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 | 52 +++++++++++++++++++++++++++++++++++++= ++++ 6 files changed, 61 insertions(+), 87 deletions(-) diff --git a/blockdev.c b/blockdev.c index 56a6b24..9d33c25 100644 --- a/blockdev.c +++ b/blockdev.c @@ -387,49 +387,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 39bc835..90fe0f9 100644 --- a/include/qemu/typedefs.h +++ b/include/qemu/typedefs.h @@ -100,6 +100,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 06bf916..9ef28c4 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 * @@ -635,3 +636,54 @@ 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, "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); +} --=20 1.8.3.1 From nobody Sun May 5 01:45:54 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@nongnu.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@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506081992785142.72188695574312; Fri, 22 Sep 2017 05:06:32 -0700 (PDT) Received: from localhost ([::1]:58486 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvMiw-0007d9-2K for importer@patchew.org; Fri, 22 Sep 2017 08:06:26 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46746) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvMgx-0006Ly-NG for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dvMgu-0004td-Kq for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:23 -0400 Received: from mail-wm0-x244.google.com ([2a00:1450:400c:c09::244]:35935) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dvMgu-0004tL-CV for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:20 -0400 Received: by mail-wm0-x244.google.com with SMTP id r136so1089820wmf.3 for ; Fri, 22 Sep 2017 05:04:20 -0700 (PDT) Received: from localhost.localdomain.localdomain ([217.110.131.66]) by smtp.gmail.com with ESMTPSA id v78sm2567133wmv.48.2017.09.22.05.04.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Sep 2017 05:04:18 -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=sVdDqaQdvXDPH/eNGaIzQLyBc/iMByzC7L6004Gk/Hs=; b=Kebz63lWf8KPH++VPrCyXOCpWS4bz0PLkXZS74W0LW1pUoRLewtVBwkrMp0DyVaNP+ fxfRL+0S5IKgskuZcSm4a4OAvM2yH7nKLxCkRnp0V83RrEdvF5uDeFNjnaHVqyziFM1P GptrgID7tsw/Ppn6J88Zvii9GqHWQ9/uZiLtNxd3EKTb0zZrG+1d4N42URdNONEH/fan EY3BJEnckJ+PP09pSTxLJ0Rlbqc4PrbyKqOfV4JfmM6ijYjsBem/aOfOTVB7QhOoJ8B2 2Rijj9ljj6d+p3Dm3qIMbw9JUN3hFX+BehOUWqV3ya6euzs4OVF8NLLCBO4AoYLXma2G Fx3A== 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=sVdDqaQdvXDPH/eNGaIzQLyBc/iMByzC7L6004Gk/Hs=; b=YiB5BFyYeZuQkj7QUE5rg3UB7mvWVevezEHcPWdczhDXAb8a9wU2cuYk+/WGFZdOcO Prer4W3h7/6uJk9l5MHgh/W7xdA522ZIb444AzHbV7zT9v/UnxsN/Qk+H9Kn74DzDsh/ 5+BCQbILHFuFRuQZbChuMfe8LWnDAj61L2CxHGG2uvNXRunRLtBiSYGgS9UJFdGO0GLX aWSQQMZMlIwkbwT1oNJ3Gcd3F/Fa47Tu7KC/MXSMGMUUwYQOCsT6++F6TqcW/uTz2BMs VytAK5VgwwijZ3bPd+WzCBZtCzQFiJxOfxLmObfhRACJQ4DRFgmfJZCyq1J0HJShJU8G geHA== X-Gm-Message-State: AHPjjUhWj69+6kO5X8WoYD5w6zXlApMWHkmzcf0it4Dp9uTdS/PTbqoV iBMsVSg046EcqMIKzB4cz/0= X-Google-Smtp-Source: AOwi7QBLZx7XHGp8il/Pv/kTroVvdHEuKOvtAz6cCpfP3p+PD0QLwHAsr9UUBdRezTbf7K3grX3wxA== X-Received: by 10.28.26.138 with SMTP id a132mr3796478wma.25.1506081859325; Fri, 22 Sep 2017 05:04:19 -0700 (PDT) From: Pradeep Jagadeesh X-Google-Original-From: Pradeep Jagadeesh To: "eric blake" , "greg kurz" Date: Fri, 22 Sep 2017 08:03:41 -0400 Message-Id: <1506081825-14209-3-git-send-email-pradeep.jagadeesh@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506081825-14209-1-git-send-email-pradeep.jagadeesh@huawei.com> References: <1506081825-14209-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::244 Subject: [Qemu-devel] [PATCH v12 2/6] qmp: Use ThrottleLimits structure X-BeenThere: qemu-devel@nongnu.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@nongnu.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 bb11815..5ca4597 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 Sun May 5 01:45:54 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@nongnu.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@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506082256526387.11925448950467; Fri, 22 Sep 2017 05:10:56 -0700 (PDT) Received: from localhost ([::1]:58514 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvMnC-0003GY-DO for importer@patchew.org; Fri, 22 Sep 2017 08:10:50 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46792) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvMh1-0006Nx-68 for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dvMgv-0004u2-IT for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:27 -0400 Received: from mail-wm0-x242.google.com ([2a00:1450:400c:c09::242]:35713) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dvMgv-0004ti-CO for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:21 -0400 Received: by mail-wm0-x242.google.com with SMTP id e64so1097408wmi.2 for ; Fri, 22 Sep 2017 05:04:21 -0700 (PDT) Received: from localhost.localdomain.localdomain ([217.110.131.66]) by smtp.gmail.com with ESMTPSA id v78sm2567133wmv.48.2017.09.22.05.04.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Sep 2017 05:04:19 -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=o/kvcto0K7JXFczEainATeD5VGebWAzgYd7vYinFwD8=; b=pcBqOq0b+dWOL76BEtXK2E1QXkb4q1eu7YDEokQEvOj4o12cse6nAt+0DBUqnxtHzo 3D7xtI5DgKrcgJIUEDHBef0ITT90QOPlmFM6YNClzbxEWfVqRl7naHdm/oSnuNTYp+gy JO17BJJDheGCzKQQ0ECyoB2aU6tz5mLpz2b5HIQtMx4AgmCNvEaF4KcV2+JoKg5DVxnr 9Ej2fGlrW6wu3iQX4/HxixsTR/ZXWQKDvs/WWVNYfv6jKdiWUwKg9VgHg2E1e4UMrwbw vlGiPLWaxN5SjwuXXzKhJ3eBBGTeYNKP3jDMD2zQuERs1jBFmpTd2Kt/6o3vXCobhTls 6zsw== 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=o/kvcto0K7JXFczEainATeD5VGebWAzgYd7vYinFwD8=; b=j7IrPL1qKmXVkuFcHGgihw95XIfArZq9B205qw+sjopQBr5o9JgoZDyC+NQ+CQR15p U/PxDYaUM2MQfSV6T+AeCTYnNsXE8EJsV1Cfna6Hx9ppUJB5nb0Ol5TVupvP03++kob3 DL+9OBGWfoSNYaTTKqEnjSCLCjumTzLqt+8jufCP/XBPYt/EBjGlHTnMpUU8Mzf3mL6m xyc8WphsIfRtCBkXZaJoEZMrOeGIzCb9mJj3XXgdzvcci+6F18W7/3SaV1HdhFXrNXPR Fo1rD3k/Zml7UFw6k0BYtFvedZaldmsaxRGlC3KZBm4hQXgUL3PyZY3Q/X7zWX+WRHaK FIRw== X-Gm-Message-State: AHPjjUikwdJDeNN+Aezcpv/iyDFlzHsRDnGF4qeNYvao1/PgFX1UfTnL DJEXxWIat9CmdtH69FlroIs= X-Google-Smtp-Source: AOwi7QCtVvdxVjncGehCDxoBQ8akMcNlL+ec0bZxjdYIM4NqKi6ePd7mnrbVjGTL4rvNBhfnPozryQ== X-Received: by 10.28.66.202 with SMTP id k71mr3694982wmi.19.1506081860270; Fri, 22 Sep 2017 05:04:20 -0700 (PDT) From: Pradeep Jagadeesh X-Google-Original-From: Pradeep Jagadeesh To: "eric blake" , "greg kurz" Date: Fri, 22 Sep 2017 08:03:42 -0400 Message-Id: <1506081825-14209-4-git-send-email-pradeep.jagadeesh@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506081825-14209-1-git-send-email-pradeep.jagadeesh@huawei.com> References: <1506081825-14209-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::242 Subject: [Qemu-devel] [PATCH v12 3/6] qmp: factor out throttle code to reuse code X-BeenThere: qemu-devel@nongnu.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@nongnu.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 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 9d33c25..2bd8ebd 100644 --- a/blockdev.c +++ b/blockdev.c @@ -2569,6 +2569,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, @@ -2586,56 +2587,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 Sun May 5 01:45:54 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@nongnu.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@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506081995057749.142647609562; Fri, 22 Sep 2017 05:06:35 -0700 (PDT) Received: from localhost ([::1]:58488 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvMiz-0007fY-0c for importer@patchew.org; Fri, 22 Sep 2017 08:06:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46751) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvMgx-0006M0-Qf for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dvMgw-0004uZ-NQ for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:23 -0400 Received: from mail-wm0-x241.google.com ([2a00:1450:400c:c09::241]:33825) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dvMgw-0004uA-HD for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:22 -0400 Received: by mail-wm0-x241.google.com with SMTP id i131so1099417wma.1 for ; Fri, 22 Sep 2017 05:04:22 -0700 (PDT) Received: from localhost.localdomain.localdomain ([217.110.131.66]) by smtp.gmail.com with ESMTPSA id v78sm2567133wmv.48.2017.09.22.05.04.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Sep 2017 05:04:20 -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=ScPvH4Obbnvmv7xQmJQ5gebpCp1S8MORUcIB7ELURNk=; b=eSMiweRP1q7jGGaj7W3ogppjYcEg8Uj7MBJV9lHvqn8WHKC3lvPf6zzoR0LFGl1hOT GF6fKx9B5nQXaKFiA3v+T1rcBOxM8pcKQFgNQPMgB+48WKJJEEgT4LuUddy80KR8xqv3 0le6Kv9YIXv/SykjN40h4Qc42+N3bTusbmNk/CvH7BkKoJR2kHb8DvT5nnoKA+3IL/Ir Oqp+AYCK/j595VrhTnaxlDPgu+1Ic01EnV6OtP7SbDEfyjctio+3HgY72AndJQUkmIFf NGzAClLDuKt7iDWLf6Rgw3MkxDNqYXhFk55Aq1JrLmLFnGTQ9+e+AamnkqwnXA4sfeAV IqYA== 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=ScPvH4Obbnvmv7xQmJQ5gebpCp1S8MORUcIB7ELURNk=; b=XF35Lb9xgmaJGJK0MHL6h/LzAnTUkgLXNfAPnSESXkis8D1r0ztEqnp/rBnR/Bt0PK UeNimhd2UO1o/wqIt85qMkdL/gCrEtMu80Qj55GuGtEKXqQBofu+D/lzfT/ALDHNIHfg fqiYeHd+Xin+oxoliNo2xAsIitt52mviizJZnyTfOjS3JTCULTImaZE/LN9kRcjoiDRW wpnJ6GtPBj53KVVeJWQUdRijRFIdj3j95iA+61Ech/e+EmonW8Hu2gm4T6OR25jZO23n yfTRP69XGNTNFIEZ+vqjm5yvwztP5dTbT8oV1Qk2kH1IiK9It6MPPuo86zG4Mv2xGIgZ 8WOg== X-Gm-Message-State: AHPjjUgbfR/7ouDAX4vhlKtTEAavgwjZgiMkfQEGmdm73DnfiWlWQ050 AhMxdJG3+Uz6XlrkOyKE/x7Pyg== X-Google-Smtp-Source: AOwi7QC5PLoa0BmNFtb4IC20zZ/v/sngbt8YL97wHT7P1zvdxb1McvzxT1mTNiyrvf2M3Ycuc12ugQ== X-Received: by 10.28.156.18 with SMTP id f18mr3527723wme.63.1506081861427; Fri, 22 Sep 2017 05:04:21 -0700 (PDT) From: Pradeep Jagadeesh X-Google-Original-From: Pradeep Jagadeesh To: "eric blake" , "greg kurz" Date: Fri, 22 Sep 2017 08:03:43 -0400 Message-Id: <1506081825-14209-5-git-send-email-pradeep.jagadeesh@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506081825-14209-1-git-send-email-pradeep.jagadeesh@huawei.com> References: <1506081825-14209-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 v12 4/6] hmp: create a throttle initialization function for code reuse X-BeenThere: qemu-devel@nongnu.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@nongnu.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 cd046c6..acaf0e6 100644 --- a/hmp.c +++ b/hmp.c @@ -1752,20 +1752,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 Sun May 5 01:45:54 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@nongnu.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@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506082209175746.6125579192778; Fri, 22 Sep 2017 05:10:09 -0700 (PDT) Received: from localhost ([::1]:58504 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvMmW-0002a4-2i for importer@patchew.org; Fri, 22 Sep 2017 08:10:08 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46830) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvMh4-0006SO-Og for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dvMgx-0004v2-O7 for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:30 -0400 Received: from mail-wm0-x244.google.com ([2a00:1450:400c:c09::244]:33825) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dvMgx-0004ud-Ed for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:23 -0400 Received: by mail-wm0-x244.google.com with SMTP id i131so1099454wma.1 for ; Fri, 22 Sep 2017 05:04:23 -0700 (PDT) Received: from localhost.localdomain.localdomain ([217.110.131.66]) by smtp.gmail.com with ESMTPSA id v78sm2567133wmv.48.2017.09.22.05.04.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Sep 2017 05:04:21 -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=02EVWKQyNlWbnOF0/yHKD1M77I8egAZzbSZPMWGZT1E=; b=hfcXPnRrZCAv3lejc2zf1kzJYiy7ICo/1mXbFtNBSnEYaFY3/iv9TWOmmGktQYZ+fS 5NnfLD5U8a/p3iZ0xUq06PESB6mPJ4X7PqlH//hJt2m4BVWlyFUNizkMaeUdLF4Dw7Lk Z03RG/PqBkvbONyZv9Nqcr1rgnhyhfAW/jJm+LveDp+BssDS2Ig3XnAcByRMRwJXMQqw UuI6CB8eNTqqy/WQ5+mnQEqLeCtHna0hELikRXRBXblm5ULYxn3rU1NMQ9DVqa+ighXb Rq5aY63q0y3ZZbzoFWWBPeiTY07GtxLGuXYM4agg1C3B4rYaOViZv5hW4FuCBF/3NSpR mE6Q== 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=02EVWKQyNlWbnOF0/yHKD1M77I8egAZzbSZPMWGZT1E=; b=DaeDn+Pw4ZG/UZ/q9gt+bb3FMw7D9TfljKEbxKCZ9L79LDO1LG7Glue4eihe/G+ux1 Xl1FIyE5Fd0Znh4+ytWXyhVNJYxFR8WOJx8/8swEU5G+jF0EmQxU/f8n0axK81/aoCmW v/Ru/VvXgj4adi2I79avbmXIJLW8ic+OVTlg8T/ClD30DtsiZq3abbfJ2QwZCMIUU814 dn4zim3DYCqHrVuOMOAVgjxgWLsZ2hbe4xXQJgaeas4W/zQvHGV6stYdDuj20p+ohxN7 TgLVoB/P7Kb55p/Sdpm4bMA0ltIR8V0wwHBHEuOZJkoiVYPRhkOOXwre+a09E3qfi3vI wiJg== X-Gm-Message-State: AHPjjUhKNDZqZPVgk4blg+agmVOCC4+caZUlI45ysTszLPZ2YWf/B+ex rERzNhvK0a21tnHoGUrEXVU= X-Google-Smtp-Source: AOwi7QAWful42BZCAGGTnCVJpaLubJWGuPZQMEwB7DWXPTrp0E6XIxR0Si3lcGNt5zmeh317IJ6E4Q== X-Received: by 10.28.17.79 with SMTP id 76mr3746382wmr.74.1506081862237; Fri, 22 Sep 2017 05:04:22 -0700 (PDT) From: Pradeep Jagadeesh X-Google-Original-From: Pradeep Jagadeesh To: "eric blake" , "greg kurz" Date: Fri, 22 Sep 2017 08:03:44 -0400 Message-Id: <1506081825-14209-6-git-send-email-pradeep.jagadeesh@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506081825-14209-1-git-send-email-pradeep.jagadeesh@huawei.com> References: <1506081825-14209-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::244 Subject: [Qemu-devel] [PATCH v12 5/6] fsdev: QMP interface for throttling X-BeenThere: qemu-devel@nongnu.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@nongnu.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 337a1f6..6556dbf 100644 --- a/Makefile +++ b/Makefile @@ -421,7 +421,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 9239f7a..d12334f 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 f3af2cb..bd55190 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 b86201e..bdbdbbe 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 Sun May 5 01:45:54 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@nongnu.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@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1506082157281833.1910971919672; Fri, 22 Sep 2017 05:09:17 -0700 (PDT) Received: from localhost ([::1]:58501 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvMlV-0001g0-2P for importer@patchew.org; Fri, 22 Sep 2017 08:09:05 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46824) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dvMh4-0006S7-Fs for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dvMgy-0004vR-EB for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:30 -0400 Received: from mail-wr0-x244.google.com ([2a00:1450:400c:c0c::244]:35091) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dvMgy-0004uw-5m for qemu-devel@nongnu.org; Fri, 22 Sep 2017 08:04:24 -0400 Received: by mail-wr0-x244.google.com with SMTP id n64so546340wrb.2 for ; Fri, 22 Sep 2017 05:04:24 -0700 (PDT) Received: from localhost.localdomain.localdomain ([217.110.131.66]) by smtp.gmail.com with ESMTPSA id v78sm2567133wmv.48.2017.09.22.05.04.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Sep 2017 05:04:22 -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=FxWTu8kXC9QszGeGFdH/6aRHwwkok7giTupNNdO1lco=; b=U8CCdM34sM4d5oOtzPDWwApuZ6QfQJAEwXGmy/qDXHHLCuB9ZHAQeL/xZvkC/I/XEt lpBxH6MmaVnzdN6qLAykN/P1oqBBpyeO/KIvw8vNtzDoTiMwXqhmQR9suAFWFiTrJDZF unVWQ0oBQdq81LjnHJJkt9fvBnLApsVUDTI48n+rGPJt+VLgduY9qCNQ/gGtWziTEZae AxQS0wYBcWWYGzcLdmgi5/zu7qIyIlkn1pAA8jM4WLaWn35PrcdkD0Hi7MeinRB8wNLo ZR0WrxOwPfZM54qni5wwUxnAKAeTWlUvEsADAlY5UvQch81M3MSuQJyd9UGTJuHLT3Xs C+gA== 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=FxWTu8kXC9QszGeGFdH/6aRHwwkok7giTupNNdO1lco=; b=nAy0LQkMqxlF0iD938D4Wc5melIKNJC2s0dqkkTUgSIjEXBkxYc0gUCBKJmGr4zabL /kF9z1t8vPo+PljVhuRnm/iOe1MOHKVfK1YbV4ZwiitDAIofrUuuPDmWh0rXtAp7XiLY xvkiJ4PV/u3hbd6rM/ms+nJffqGeHVE/UUq7r4rK88O3wxppOo4X6Q7YKFNULqTfuQGQ z1CnP7ZxWURh1gUQWXMARGk8pLhvayLwwByZ/JvhWgVZaJy9ku2R/rUMf6Tpm8jIJJQw 6jq18OvDqe12Pu4ahRkLDYn7ERZsUivCIh0xmCfKy5N4soZ0WeSqmP368A+XR1vgAj1v 6izg== X-Gm-Message-State: AHPjjUgHkGDO+cO1ohoe4DmKDsxhAImBgpfAetRK9/91e1IAxKn2ph5T 2aeauC/7oirS25TyZF2JKos= X-Google-Smtp-Source: AOwi7QBiBUUqluoe0nGC2SzUbt4ESUclfxwQyLu4sVJi7R6XtqQbAnQHcsMLNHY8uwalQnGMn0BLoQ== X-Received: by 10.223.180.82 with SMTP id v18mr5177773wrd.61.1506081863085; Fri, 22 Sep 2017 05:04:23 -0700 (PDT) From: Pradeep Jagadeesh X-Google-Original-From: Pradeep Jagadeesh To: "eric blake" , "greg kurz" Date: Fri, 22 Sep 2017 08:03:45 -0400 Message-Id: <1506081825-14209-7-git-send-email-pradeep.jagadeesh@huawei.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1506081825-14209-1-git-send-email-pradeep.jagadeesh@huawei.com> References: <1506081825-14209-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::244 Subject: [Qemu-devel] [PATCH v12 6/6] fsdev: hmp interface for throttling X-BeenThere: qemu-devel@nongnu.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@nongnu.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 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 4ab7fce..54f1968 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 acaf0e6..92df590 100644 --- a/hmp.c +++ b/hmp.c @@ -1778,6 +1778,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 1ff4552..d700d7d 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