cgroup 是一种命名空间吗?
我问这个问题是因为我看到一些博客谈论 cgroup 和命名空间是不同的。然而,在不同的linux命令中,cgroup被认为是一种命名空间。例如,
% unshare --help | grep cgroup
-C, --cgroup[=<file>] unshare cgroup namespace
% lsns --help | grep cgroup
-t, --type <name> namespace type (mnt, net, ipc, user, pid, uts, cgroup)
这里到底发生了什么?
答案1
有许多不同的命名空间类型,Cgroup 就是其中之一:
- C组
- 工控机
- 网络
- 山
- PID
- 时间
- 用户
- UTS(主机名和 NIS 域名)
但是 cgroup 和cgroup命名空间受到不同的操纵; cgroup 命名空间虚拟化 cgroup 层次结构。大多数时候您只直接使用 cgroup,而不关心 cgroup 命名空间。
答案2
我发现斯蒂芬·基特的回答是准确的。但是,如果您仍然无法理解,也许以下看待问题的方式可能会有所帮助。
选择一个具有您熟悉的功能的命名空间。也许是网络(net)。并问这个问题:“网络和网络命名空间是同一件事吗?”。不,它们不是同一件事,但两者之间存在关系。在 Linux 中,网络可以表示接口、IP 地址、路由表、过滤规则(例如 iptables/nft)等内容。然后,您的系统上可以有许多网络命名空间,在每个网络命名空间内,您都有自己的一组接口、IP 地址、路由表、过滤规则。命名空间为特定的 Linux 功能(在我的示例中为网络)创建了一些虚拟环境。
cgroup 也是如此。在Linux 中,cgroup 意味着一种限制和跟踪资源(例如CPU 和内存)的方法。然后,您的系统上可以有许多 cgroup 命名空间,在每个组命名空间内,您都有自己的一组限制和资源跟踪。