探寻内核环境创建cgroup组的可行性
目录
离成功最近的一次
// test_cgroup_create.c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/cgroup.h>
#include <linux/kernfs.h>
static struct kernfs_node *my_kn = NULL; /* 保存创建的节点 */
static int __init test_cgroup_init(void)
{
struct cgroup_root *root = &cgrp_dfl_root;
struct kernfs_node *parent_kn = root->cgrp.kn;
int ret;
/* 1. 获取 v2 根 kernfs 节点 */
pr_info("parent_kn = %px\n", parent_kn);
if (!parent_kn) {
pr_err("test: no default root kn\n");
return -ENOENT;
}
/* 2. 创建子 cgroup 目录 mygroup */
char name[32];
snprintf(name, sizeof(name), "mygroup_%lu", jiffies);
ret = cgroup_mkdir(root->cgrp.kn, name, 0755);
//ret = cgroup_mkdir(parent_kn, "mygroup", 0777);
if (ret) {
pr_err("test: mkdir failed %d\n", ret);
return ret;
}
/* 3. 保存节点,方便卸载时删除 */
my_kn = kernfs_find_and_get(parent_kn, "mygroup");
if (!my_kn) {
pr_warn("test: mygroup kn not found\n");
return -ENOENT;
}
pr_info("test: created /sys/fs/cgroup/mygroup\n");
return 0;
}
static void __exit test_cgroup_exit(void)
{
if (my_kn) {
/* 同步删除目录 */
cgroup_rmdir(my_kn);
kernfs_put(my_kn);
my_kn = NULL;
pr_info("test: removed /sys/fs/cgroup/mygroup\n");
}
}
module_init(test_cgroup_init);
module_exit(test_cgroup_exit);
MODULE_LICENSE("GPL");
obj-m += test_cgroup_create.o
all:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

浙公网安备 33010602011771号