From patchwork Tue Dec 22 00:11:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Muneendra Kumar M X-Patchwork-Id: 11985919 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.2 required=3.0 tests=BAYES_00,DATE_IN_PAST_06_12, DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 40A86C433E0 for ; Tue, 22 Dec 2020 07:06:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 13DE72312D for ; Tue, 22 Dec 2020 07:06:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725997AbgLVHGF (ORCPT ); Tue, 22 Dec 2020 02:06:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56202 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725955AbgLVHGF (ORCPT ); Tue, 22 Dec 2020 02:06:05 -0500 Received: from mail-pl1-x62b.google.com (mail-pl1-x62b.google.com [IPv6:2607:f8b0:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 80D63C061282 for ; Mon, 21 Dec 2020 23:05:02 -0800 (PST) Received: by mail-pl1-x62b.google.com with SMTP id 4so6954541plk.5 for ; Mon, 21 Dec 2020 23:05:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=mime-version:from:to:cc:subject:date:message-id:in-reply-to :references; bh=HHY8cUTR6hD6wzE81aBNBvR08zxG6bql4oTTgFNBrR0=; b=Mn3tRvuxB6/rNAF1Aj8Fnf4XvlELIHdH/G/cK+wKUHuKT2J9QF5Q9vAjFYLSiLhxRM 3PA0UvrlHliN3jjDc5QzFP/Bmnl4XYTRdFYxaLToj18PhCWn21uoP5f7dZwopyr3niQ2 UIPwLP8yTRlRzlMuHZhWvCamObf6KKoLlFlkw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :in-reply-to:references; bh=HHY8cUTR6hD6wzE81aBNBvR08zxG6bql4oTTgFNBrR0=; b=aEDAh+E3hYcncAD0FSk4fJS020lFOZGdfrmf183Yr1mGbb6DT50nFw3O6rjTKlxzUu kmWyukHPeZU7Voh75jspradYHnDE+gxLf2evsVq4GWpypKrJmUT4HfBPbH+XqsKbSK4W 23LxYs91OOJ059STpJOJDLpuR123+1XYMTUdBTjhlel+4cdFO9Lew+KfduetZxT0gOTv T07tqpevnmyIMm4IC4iJhsdMnyqB0Lt3wtKvnxuQTrl5bW9XBbg7ZSuwbebeS6m/JuVa GbNToKf9hnF5s8NG+mi447EuoG8GW5yxNMbMKnIYSYE0pJhJU9rtWEnuWd/V8oKy9ha9 vX1g== MIME-Version: 1.0 X-Gm-Message-State: AOAM533GTEs0fdwCXCsfHIDQIuz9PB+cVYZJahnz5Os+UKwcRGAgaZk5 a0Osuudi6GR6Nn7sopRqRBKaL8aG/H48TfTTQYJ0LzlZtIWo9WcXCssMifvRIDmBE+p4VanjcUS wL8eTC1Kt2/iSMVLoOy0/9X8= X-Google-Smtp-Source: ABdhPJzqOfIJnMEwsooZx0t2a4kdcvubNfdX380kNjOYuUdgf8+yT/WigWrdfio9gZPWeaApsMEPdA== X-Received: by 2002:a17:90b:1983:: with SMTP id mv3mr21437506pjb.211.1608620701820; Mon, 21 Dec 2020 23:05:01 -0800 (PST) Received: from localhost.localdomain ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id t9sm12466082pgh.41.2020.12.21.23.04.57 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Dec 2020 23:05:01 -0800 (PST) From: Muneendra To: linux-block@vger.kernel.org, linux-scsi@vger.kernel.org, tj@kernel.org, linux-nvme@lists.infradead.org, hare@suse.de Cc: jsmart2021@gmail.com, emilne@redhat.com, mkumar@redhat.com, pbonzini@redhat.com, Muneendra Subject: [PATCH v6 02/16] blkcg: Added a app identifier support for blkcg Date: Tue, 22 Dec 2020 05:41:44 +0530 Message-Id: <1608595918-21954-3-git-send-email-muneendra.kumar@broadcom.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1608595918-21954-1-git-send-email-muneendra.kumar@broadcom.com> References: <1608595918-21954-1-git-send-email-muneendra.kumar@broadcom.com> Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org This Patch added a unique application identifier i.e fc_app_id member in blkcg which allows identification of traffic sources at an individual cgroup based Applications (ex:virtual machine (VM))level in both host and fabric infrastructure. Added a new function blkcg_get_fc_appid to grab the app identifier associated with a bio. Added a new function blkcg_set_fc_appid to set the app identifier in a blkcgrp associated with cgroup id Added a new config BLK_CGROUP_FC_APPID and moved the changes under this config Signed-off-by: Muneendra --- v6: Modified the Kconfig file as per standard specified in Documentation/process/coding-style.rst v5: Renamed the arguments appropriatley Renamed APPID_LEN to FC_APPID_LEN Moved the input validation at the begining of the function Modified the comments v4: No change v3: Renamed the functions and app_id to more specific Addressed the reference leaks in blkcg_set_app_identifier Added a new config BLK_CGROUP_FC_APPID and moved the changes under this config Added blkcg_get_fc_appid,blkcg_set_fc_appid as inline functions v2: renamed app_identifier to app_id removed the sysfs interface blkio.app_identifie under --- block/Kconfig | 9 ++++++ include/linux/blk-cgroup.h | 56 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) diff --git a/block/Kconfig b/block/Kconfig index a2297edfdde8..2ba6c27880e6 100644 --- a/block/Kconfig +++ b/block/Kconfig @@ -144,6 +144,15 @@ config BLK_CGROUP_IOLATENCY Note, this is an experimental interface and could be changed someday. +config BLK_CGROUP_FC_APPID + bool "Enable support to track FC io Traffic across cgroup applications" + depends on BLK_CGROUP=y + help + Enabling this option enables the support to track FC io traffic across + cgroup applications. It enables the Fabric and the storage targets to + identify, monitor, and handle FC traffic based on vm tags by inserting + application specific identification into the FC frame. + config BLK_CGROUP_IOCOST bool "Enable support for cost model based cgroup IO controller" depends on BLK_CGROUP=y diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h index c8fc9792ac77..216ca0d5eda7 100644 --- a/include/linux/blk-cgroup.h +++ b/include/linux/blk-cgroup.h @@ -30,6 +30,8 @@ /* Max limits for throttle policy */ #define THROTL_IOPS_MAX UINT_MAX +#define FC_APPID_LEN 129 + #ifdef CONFIG_BLK_CGROUP @@ -55,6 +57,9 @@ struct blkcg { struct blkcg_policy_data *cpd[BLKCG_MAX_POLS]; struct list_head all_blkcgs_node; +#ifdef CONFIG_BLK_CGROUP_FC_APPID + char fc_app_id[FC_APPID_LEN]; +#endif #ifdef CONFIG_CGROUP_WRITEBACK struct list_head cgwb_list; #endif @@ -660,4 +665,55 @@ static inline void blk_cgroup_bio_start(struct bio *bio) { } #endif /* CONFIG_BLOCK */ #endif /* CONFIG_BLK_CGROUP */ + +#ifdef CONFIG_BLK_CGROUP_FC_APPID +/* + * Sets the fc_app_id field associted to blkcg + * @app_id: application identifier + * @cgrp_id: cgroup id + * @app_id_len: size of application identifier + */ +static inline int blkcg_set_fc_appid(char *app_id, u64 cgrp_id, size_t app_id_len) +{ + struct cgroup *cgrp; + struct cgroup_subsys_state *css; + struct blkcg *blkcg; + int ret = 0; + + if (app_id_len > FC_APPID_LEN) + return -EINVAL; + + cgrp = cgroup_get_from_id(cgrp_id); + if (!cgrp) + return -ENOENT; + css = cgroup_get_e_css(cgrp, &io_cgrp_subsys); + if (!css) { + ret = -ENOENT; + goto out_cgrp_put; + } + blkcg = css_to_blkcg(css); + strlcpy(blkcg->fc_app_id, app_id, app_id_len); + css_put(css); +out_cgrp_put: + cgroup_put(cgrp); + return ret; +} + +/** + * blkcg_get_fc_appid - get the fc app identifier associated with a bio + * @bio: target bio + * + * On success it returns the fc_app_id on failure it returns NULL + */ +static inline char *blkcg_get_fc_appid(struct bio *bio) +{ + if (bio && bio->bi_blkg && + (bio->bi_blkg->blkcg->fc_app_id[0] != '\0')) + return bio->bi_blkg->blkcg->fc_app_id; + return NULL; +} +#else +static inline int blkcg_set_fc_appid(char *buf, u64 id, size_t len) { return -EINVAL; } +static inline char *blkcg_get_fc_appid(struct bio *bio) { return NULL; } +#endif /*CONFIG_BLK_CGROUP_FC_APPID*/ #endif /* _BLK_CGROUP_H */