kernel namespace cgroup simple study
This project is maintained by wangfakang
linux的名字空间与资源隔离:
Linux Namespaces机制提供一种资源隔离方案。PID,IPC,Network等系统资源不再是全局性的,而是属于 特定的Namespace。每个Namespace里面的资源对其他Namespace都是透明的。比如不同的namespace可以有相 同的进程的pid但是是不同的进程,而且只对当前的namespace是可见的.
要创建新的Namespace,只需要在调用clone时指定相应的flag。Linux Namespaces机制为实现基于容器的 虚拟化技术提供了很好的基础,LXC(Linux containers)就是利用这一特性实现了资源的隔离。不同container 内的进程属于不同的Namespace,彼此透明,互不干扰。下面我们就从clone系统调用的flag出发,来介绍各个 Namespace.
int clone(int (*fn)(void *), void *child_stack, int flags, void *arg)
CLONE_FS 子进程与父进程共享相同的文件系统,包括root、当前目录、umask
CLONE_NEWNS 当clone需要自己的命名空间时设置这个标志,不能同时设置CLONE_NEWS和CLONE_FS。
UTS namespace提供了主机名和域名的隔离,这样每个容器就可以拥有了独立的主机名和域名,在网络上 可以被视作一个独立的节点而非宿主机上的一个进程.
Mount namespace通过隔离文件系统挂载点对隔离文件系统提供支持,它是历史上第一个Linux namespace, 所以它的标识位比较特殊,就是CLONE_NEWNS.
Cgroups是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups) 所使用的物理资源(如:cpu,memory,IO等等)的机制。最初由google的工程师提出,后来被整合进Linux内核。Cgroups 也是LXC为实现虚拟化所使用的资源管理手段,可以说没有cgroups就没有LXC.
在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流