Commit 13e5c52d authored by wangyigen's avatar wangyigen Committed by wangyigen
Browse files

cgroup_writeback: bind blkcg and memcg

referenceDist inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I9JEA3


CVE: not cve

-------------------------------

The below process requires manual binding of memcg and blkcg
Previous bufferI/O speed limit schemes for OpenEuler:
commit 644547a9 ("cgroup: support cgroup writeback on cgroupv1")
commit 5a8638d6 ("cgroup: Add cgroup1_get_from_id()")
The test is as follows:
1. Start a Docker(Firstly, you need to obtain a Docker image)
docker run ti -- rm mtos: latest bash
2. Obtain the cgroupid of the Docker
stat /sys/fs/cgroup/blkio/docker/{docker_id}
3. It is necessary to manually bind memcg and blkcg
echo ${blk_inde_id} > \
/sys/fs/cgroup/blkio/docker/{docker_id}/memory.wb_blkio_ino
4. Speed limit
echo 253:0 209715200 > \
/sys/fs/cgroup/blkio/docker/{docker_id}/blkio. throttle. writebps device
5 Speed measurement
Running in Docker
dd if=/dev/zero of=/ Testfile bs=4k count=10000
Local operation
iostat - xz 1
I refer to the solution provided by Alibaba:
automatically bind memcg and blkcg every time
cgroup_migrate_execute is executed

Signed-off-by: default avatarwangyigen <ygw111@yeah.net>
parent fca9656c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -153,6 +153,7 @@ CONFIG_MEMCG_MEMFS_INFO=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_V1_WRITEBACK=y
CONFIG_CGROUP_V1_BIND_BLKCG_MEMCG=y
CONFIG_CGROUP_SCHED=y
CONFIG_QOS_SCHED=y
CONFIG_QOS_SCHED_MULTILEVEL=y
+1 −0
Original line number Diff line number Diff line
@@ -158,6 +158,7 @@ CONFIG_MEMCG_MEMFS_INFO=y
CONFIG_BLK_CGROUP=y
CONFIG_CGROUP_WRITEBACK=y
CONFIG_CGROUP_V1_WRITEBACK=y
CONFIG_CGROUP_V1_BIND_BLKCG_MEMCG=y
CONFIG_CGROUP_SCHED=y
CONFIG_QOS_SCHED=y
CONFIG_QOS_SCHED_MULTILEVEL=y
+9 −0
Original line number Diff line number Diff line
@@ -359,6 +359,10 @@ static inline void unlocked_inode_to_wb_end(struct inode *inode,
	rcu_read_unlock();
}


void bind_memcg_blkcg_link(struct cgroup_subsys *ss,
			     struct css_set *cset);

#else	/* CONFIG_CGROUP_WRITEBACK */

static inline bool inode_cgwb_enabled(struct inode *inode)
@@ -411,6 +415,11 @@ static inline int inode_congested(struct inode *inode, int cong_bits)
	return wb_congested(&inode_to_bdi(inode)->wb, cong_bits);
}

static inline void bind_memcg_blkcg_link(struct cgroup_subsys *ss,
					   struct css_set *cset)
{
}

#endif	/* CONFIG_CGROUP_WRITEBACK */

static inline int inode_read_congested(struct inode *inode)
+5 −0
Original line number Diff line number Diff line
@@ -993,6 +993,11 @@ config CGROUP_V1_WRITEBACK
	depends on CGROUP_WRITEBACK
	default n

config CGROUP_V1_BIND_BLKCG_MEMCG
        bool "Add switches to bind memcg and blkcg"
        depends on CGROUP_V1_WRITEBACK
        default n

menuconfig CGROUP_SCHED
	bool "CPU controller"
	default n
+10 −0
Original line number Diff line number Diff line
@@ -83,6 +83,12 @@
DEFINE_MUTEX(cgroup_mutex);
DEFINE_SPINLOCK(css_set_lock);

#ifdef CONFIG_CGROUP_V1_BIND_BLKCG_MEMCG
int sysctl_bind_memcg_blkcg_enable = 1;
#else
int sysctl_bind_memcg_blkcg_enable;
#endif

#ifdef CONFIG_PROVE_RCU
EXPORT_SYMBOL_GPL(cgroup_mutex);
EXPORT_SYMBOL_GPL(css_set_lock);
@@ -2558,6 +2564,10 @@ static int cgroup_migrate_execute(struct cgroup_mgctx *mgctx)
				tset->ssid = ssid;
				ss->attach(tset);
			}
			if (sysctl_bind_memcg_blkcg_enable) {
				list_for_each_entry(cset, &tset->dst_csets, mg_node)
					bind_memcg_blkcg_link(ss, cset);
			}
		} while_each_subsys_mask();
	}

Loading