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)
这里到底发生了什么?
有许多不同的命名空间类型,Cgroup 就是其中之一:
但是 cgroup 和cgroup 命名空间的操作方式不同;cgroup 命名空间虚拟化 cgroup 层次结构。大多数时候你只会直接使用 cgroups,而不关心 cgroup 命名空间。
我发现斯蒂芬基特的回答是准确的。但是,如果您仍然无法理解,也许以下看待问题的方式可能会有所帮助。
选择一个具有您很好理解的特性的命名空间。也许网络(网络)。并问这个问题:“网络和网络命名空间是一回事吗?”。不,它们不是一回事,但两者之间存在关系。在 Linux 中,网络可以指接口、IP 地址、路由表、过滤规则(例如 iptables/nft)。然后,您可以在系统上拥有许多网络命名空间,在每个网络命名空间内,您都有自己的一组接口、IP 地址、路由表、过滤规则。命名空间为特定的 Linux 功能(在我的示例中为网络)创建了一些虚拟环境。
cgroup 也是如此。在 Linux 中,cgroup 可能意味着一种限制和跟踪资源(例如 CPU 和内存)的方法。然后,您可以在系统上拥有许多 cgroup 命名空间,在每个组命名空间中,您都有自己的一组限制和资源跟踪。