From: Muneendra <muneendra.kumar@broadcom.com>
To: linux-block@vger.kernel.org, linux-scsi@vger.kernel.org
Cc: pbonzini@redhat.com, emilne@redhat.com, mkumar@redhat.com,
Muneendra <muneendra.kumar@broadcom.com>
Subject: [RFC 01/16] blkcg:Introduce blkio.app_identifier knob to blkio controller
Date: Tue, 4 Aug 2020 07:43:01 +0530 [thread overview]
Message-ID: <1596507196-27417-2-git-send-email-muneendra.kumar@broadcom.com> (raw)
In-Reply-To: <1596507196-27417-1-git-send-email-muneendra.kumar@broadcom.com>
This Patch added a unique application identifier i.e
blkio.app_identifier knob to blkio controller which
allows identification of traffic sources at an
individual cgroup based Applications
(ex:virtual machine (VM))level in both host and
fabric infrastructure.
Also provided an interface blkcg_get_app_identifier to
grab the app identifier associated with a bio.
Added a sysfs interface blkio.app_identifier to get/set the appid.
This capability can be utilized by multiple block transport infrastructure
like fc,iscsi,roce ..
Signed-off-by: Muneendra <muneendra.kumar@broadcom.com>
---
block/blk-cgroup.c | 32 ++++++++++++++++++++++++++++++++
include/linux/blk-cgroup.h | 19 +++++++++++++++++++
2 files changed, 51 insertions(+)
diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
index 0ecc897b225c..697eccb3ba7a 100644
--- a/block/blk-cgroup.c
+++ b/block/blk-cgroup.c
@@ -492,6 +492,33 @@ static int blkcg_reset_stats(struct cgroup_subsys_state *css,
return 0;
}
+static int blkcg_read_appid(struct seq_file *sf, void *v)
+{
+ struct blkcg *blkcg = css_to_blkcg(seq_css(sf));
+
+ seq_printf(sf, "%s\n", blkcg->app_identifier);
+ return 0;
+}
+
+static ssize_t blkcg_write_appid(struct kernfs_open_file *of,
+ char *buf, size_t nbytes, loff_t off)
+{
+ struct cgroup_subsys_state *css = of_css(of);
+ struct blkcg *blkcg = css_to_blkcg(css);
+ struct blkcg_gq *blkg;
+ int i;
+
+ buf = strstrip(buf);
+ if (blkcg) {
+ if (nbytes < APPID_LEN)
+ strlcpy(blkcg->app_identifier, buf, nbytes);
+ else
+ return -EINVAL;
+ }
+ return nbytes;
+}
+
+
const char *blkg_dev_name(struct blkcg_gq *blkg)
{
/* some drivers (floppy) instantiate a queue w/o disk registered */
@@ -844,6 +871,11 @@ static struct cftype blkcg_legacy_files[] = {
.name = "reset_stats",
.write_u64 = blkcg_reset_stats,
},
+ {
+ .name = "app_identifier",
+ .write = blkcg_write_appid,
+ .seq_show = blkcg_read_appid,
+ },
{ } /* terminate */
};
diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h
index a57ebe2f00ab..3676d7ebb19f 100644
--- a/include/linux/blk-cgroup.h
+++ b/include/linux/blk-cgroup.h
@@ -30,6 +30,7 @@
/* Max limits for throttle policy */
#define THROTL_IOPS_MAX UINT_MAX
+#define APPID_LEN 128
#ifdef CONFIG_BLK_CGROUP
@@ -55,6 +56,7 @@ struct blkcg {
struct blkcg_policy_data *cpd[BLKCG_MAX_POLS];
struct list_head all_blkcgs_node;
+ char app_identifier[APPID_LEN];
#ifdef CONFIG_CGROUP_WRITEBACK
struct list_head cgwb_list;
#endif
@@ -239,6 +241,23 @@ static inline struct blkcg *css_to_blkcg(struct cgroup_subsys_state *css)
return css ? container_of(css, struct blkcg, css) : NULL;
}
+/**
+ * blkcg_get_app_identifier - grab the app identifier associated with a bio
+ * @bio: target bio
+ *
+ * This returns the app identifier associated with a bio,
+ * %NULL if not associated.
+ * Callers are expected to either handle %NULL or know association has been
+ * done prior to calling this.
+ */
+static inline char *blkcg_get_app_identifier(struct bio *bio)
+{
+ if (bio && (bio->bi_blkg) &&
+ (strlen(bio->bi_blkg->blkcg->app_identifier)))
+ return bio->bi_blkg->blkcg->app_identifier;
+ return NULL;
+}
+
/**
* __bio_blkcg - internal, inconsistent version to get blkcg
*
--
2.18.2
next prev parent reply other threads:[~2020-08-04 9:07 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-04 2:13 [RFC 00/16] Application specific identification support Muneendra
2020-08-04 2:13 ` Muneendra [this message]
2020-08-04 11:31 ` [RFC 01/16] blkcg:Introduce blkio.app_identifier knob to blkio controller Daniel Wagner
2020-08-04 14:21 ` Tejun Heo
2020-08-05 0:39 ` James Smart
2020-08-05 3:59 ` Ming Lei
2020-08-05 6:33 ` Hannes Reinecke
2020-08-05 14:39 ` Tejun Heo
2020-08-05 17:14 ` Muneendra Kumar M
2020-08-05 17:31 ` Tejun Heo
2020-08-06 2:22 ` Ming Lei
2020-08-06 12:31 ` Muneendra Kumar M
2020-08-06 13:41 ` Paolo Bonzini
2020-08-04 2:13 ` [RFC 02/16] lpfc: vmid: Add the datastructure for supporting VMID in lpfc Muneendra
2020-08-04 2:13 ` [RFC 03/16] lpfc: vmid: API to check if VMID is enabled Muneendra
2020-08-04 2:13 ` [RFC 04/16] lpfc: vmid: Supplementary data structures for vmid Muneendra
2020-08-04 2:13 ` [RFC 05/16] lpfc: vmid: Forward declarations for APIs Muneendra
2020-08-04 2:13 ` [RFC 06/16] lpfc: vmid: Add support for vmid in mailbox command Muneendra
2020-08-04 2:13 ` [RFC 07/16] lpfc: vmid: VMID params initialization Muneendra
2020-08-04 2:13 ` [RFC 08/16] lpfc: vmid: vmid resource allocation Muneendra
2020-08-04 2:13 ` [RFC 09/16] lpfc: vmid: cleanup vmid resources Muneendra
2020-08-04 2:13 ` [RFC 10/16] lpfc: vmid: Implements ELS commands for appid patch Muneendra
2020-08-04 2:13 ` [RFC 11/16] lpfc: vmid: Functions to manage vmids Muneendra
2020-08-04 2:13 ` [RFC 12/16] lpfc: vmid: Implements CT commands for appid Muneendra
2020-08-04 2:13 ` [RFC 13/16] lpfc: vmid: Appends the vmid in the wqe before sending request Muneendra
2020-08-04 2:13 ` [RFC 14/16] lpfc: vmid: Timeout implementation for vmid Muneendra
2020-08-04 2:13 ` [RFC 15/16] lpfc: vmid: Adding qfpa and vmid timeout check in worker thread Muneendra
2020-08-04 2:13 ` [RFC 16/16] lpfc: vmid: Introducing vmid in io path Muneendra
2020-08-05 7:16 ` Hannes Reinecke
2020-08-05 23:38 ` James Smart
2020-08-06 12:34 ` Muneendra Kumar M
2020-08-06 14:32 ` Paolo Bonzini
2020-08-06 16:26 ` Muneendra Kumar M
2020-08-06 18:41 ` Paolo Bonzini
2020-08-07 11:24 ` Muneendra Kumar M
2020-08-07 11:38 ` Paolo Bonzini
2020-08-07 12:17 ` Muneendra Kumar M
2020-08-10 9:03 ` Paolo Bonzini
2020-08-10 12:13 ` Muneendra Kumar M
2020-08-12 7:54 ` Paolo Bonzini
2020-08-12 12:16 ` Muneendra Kumar M
2020-08-07 12:32 ` Muneendra Kumar M
2020-08-11 23:48 ` James Smart
2020-08-06 14:41 ` Tejun Heo
2020-08-06 14:46 ` Paolo Bonzini
2020-08-06 14:48 ` Tejun Heo
2020-08-06 14:54 ` Paolo Bonzini
2020-08-06 14:59 ` Tejun Heo
2020-08-06 18:39 ` Paolo Bonzini
2020-08-06 18:49 ` Tejun Heo
2020-08-06 19:20 ` Paolo Bonzini
2020-08-06 19:32 ` Tejun Heo
2020-08-07 12:14 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1596507196-27417-2-git-send-email-muneendra.kumar@broadcom.com \
--to=muneendra.kumar@broadcom.com \
--cc=emilne@redhat.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=mkumar@redhat.com \
--cc=pbonzini@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox