Message ID | 1608096586-21656-3-git-send-email-muneendra.kumar@broadcom.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | blkcg:Support to track FC storage blk io traffic | expand |
On 12/15/20 9:29 PM, Muneendra wrote: Hi-- > --- > block/Kconfig | 9 ++++++ > include/linux/blk-cgroup.h | 56 ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 65 insertions(+) > > diff --git a/block/Kconfig b/block/Kconfig > index a2297edfdde8..1920388fb0e9 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. Please follow coding-style for Kconfig files: from Documentation/process/coding-style.rst, section 10): For all of the Kconfig* configuration files throughout the source tree, the indentation is somewhat different. Lines under a ``config`` definition are indented with one tab, while help text is indented an additional two spaces. thanks.
Hi Randy, Thanks for your comments. I will incorporate your comments in my next version. Regards, Muneendra. -----Original Message----- From: Randy Dunlap [mailto:rdunlap@infradead.org] Sent: Saturday, December 19, 2020 10:42 PM To: Muneendra <muneendra.kumar@broadcom.com>; 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 Subject: Re: [PATCH v5 02/16] blkcg: Added a app identifier support for blkcg On 12/15/20 9:29 PM, Muneendra wrote: Hi-- > --- > block/Kconfig | 9 ++++++ > include/linux/blk-cgroup.h | 56 > ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 65 insertions(+) > > diff --git a/block/Kconfig b/block/Kconfig index > a2297edfdde8..1920388fb0e9 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. Please follow coding-style for Kconfig files: from Documentation/process/coding-style.rst, section 10): For all of the Kconfig* configuration files throughout the source tree, the indentation is somewhat different. Lines under a ``config`` definition are indented with one tab, while help text is indented an additional two spaces. thanks. -- ~Randy
diff --git a/block/Kconfig b/block/Kconfig index a2297edfdde8..1920388fb0e9 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 */
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 <muneendra.kumar@broadcom.com> --- 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(+)