Unverified Commit c0a50b1e authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!215 cgroupv1使能cgroup writeback的功能

Merge Pull Request from: @lujialin2 
 
In cgroupv1, cgroup writeback is not supported for two problems:
1) Blkcg_css and memcg_css are mounted on different cgroup trees. Therefore, blkcg_css cannot be found according to a certain memcg_css.
2) Buffer I/O is worked by kthread, which is in the root_blkcg. Therefore, blkcg cannot limit wbps and wiops of buffer I/O.
We solve the two problems and support cgroup writeback on cgroupv1.
CONFIG: CONFIG_CGROUP_V1_WRITEBACK
startup params: cgroup1_writeback
If someone want to support cgroup writeback in cgroupv1, turn on CONFIG_CGROUP_V1_WRITEBACK; add cgroup1_writeback;mount memcg and blkcg on cgroupv1;
If someone want to attach a cerntain blkcg to a memcg, just echo the inode of the blkcg into memory_wb_blkcg_ino of memcg.
 
 
Link:https://gitee.com/openeuler/kernel/pulls/215

 
Reviewed-by: default avatarLiu Chao <liuchao173@huawei.com>
Reviewed-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parents a3c1378d 644547a9
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -136,6 +136,7 @@ CONFIG_MEMCG_KMEM=y
CONFIG_MEMCG_MEMFS_INFO=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_V1_WRITEBACK=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_QOS_SCHED_SMT_EXPELLER=y
+1 −0
Original line number Diff line number Diff line
@@ -155,6 +155,7 @@ CONFIG_MEMCG_KMEM=y
CONFIG_MEMCG_MEMFS_INFO=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_V1_WRITEBACK=y
CONFIG_CGROUP_SCHED=y
CONFIG_QOS_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
+3 −0
Original line number Diff line number Diff line
@@ -1146,6 +1146,9 @@ blkcg_css_alloc(struct cgroup_subsys_state *parent_css)
	INIT_HLIST_HEAD(&blkcg->blkg_list);
#ifdef CONFIG_CGROUP_WRITEBACK
	INIT_LIST_HEAD(&blkcg->cgwb_list);
#endif
#ifdef CONFIG_CGROUP_V1_WRITEBACK
	INIT_LIST_HEAD(&blkcg->memcg_list);
#endif
	list_add_tail(&blkcg->all_blkcgs_node, &all_blkcgs);

+25 −4
Original line number Diff line number Diff line
@@ -167,6 +167,26 @@ static inline int bdi_sched_wait(void *word)
	return 0;
}

#ifdef CONFIG_CGROUP_V1_WRITEBACK
void wb_kill_memcg_blkcg(struct cgroup_subsys_state *css);
void wb_attach_memcg_to_blkcg(struct cgroup_subsys_state *memcg_css,
			      struct cgroup_subsys_state *blkcg_css);
bool cgroup1_writeback_enabled(void);
#else
static inline void wb_kill_memcg_blkcg(struct cgroup_subsys_state *css)
{
}
static inline void
wb_attach_memcg_to_blkcg(struct cgroup_subsys_state *memcg_css,
			 struct cgroup_subsys_state *blkcg_css)
{
}
static inline bool cgroup1_writeback_enabled(void)
{
	return false;
}
#endif	/* CONFIG_CGROUP_V1_WRITEBACK */

#ifdef CONFIG_CGROUP_WRITEBACK

struct bdi_writeback *wb_get_lookup(struct backing_dev_info *bdi,
@@ -193,8 +213,9 @@ static inline bool inode_cgwb_enabled(struct inode *inode)
{
	struct backing_dev_info *bdi = inode_to_bdi(inode);

	return cgroup_subsys_on_dfl(memory_cgrp_subsys) &&
		cgroup_subsys_on_dfl(io_cgrp_subsys) &&
	return ((cgroup_subsys_on_dfl(memory_cgrp_subsys) &&
	       cgroup_subsys_on_dfl(io_cgrp_subsys)) ||
	       cgroup1_writeback_enabled()) &&
	       (bdi->capabilities & BDI_CAP_WRITEBACK) &&
	       (inode->i_sb->s_iflags & SB_I_CGROUPWB);
}
+4 −1
Original line number Diff line number Diff line
@@ -59,9 +59,12 @@ struct blkcg {
#ifdef CONFIG_CGROUP_WRITEBACK
	struct list_head		cgwb_list;
#endif

#if defined(CONFIG_CGROUP_V1_WRITEBACK) && !defined(__GENKSYMS__)
	struct list_head		memcg_list;
#else
	KABI_RESERVE(1)
	KABI_RESERVE(2)
#endif
	KABI_RESERVE(3)
	KABI_RESERVE(4)
};
Loading