- 论坛徽章:
- 3
|
其实就是内核里面的数据结构。说白了就是内核里面的 cgroups.
也就是说,通过 cgroups, 内核将呈现不同的进程/进程组视图,当然,除了进程/进程组之外,还有其它的资源。
内核控制的一切都是资源。然后,通过 cgroups,内核将这些资源呈现为不同的视图。然后,《深入理解linux内核构架》一书中,将这种内核能够将所有的资源划分开,呈现不同视图的能力和机制,称为容器。一个视图就是一个容器。
也就是说,cgroups 企图将所有的资源进行划分和隔离。
那么内核既然提供了这种机制,就有系统调用来使用内核的这种机制/特性/能力。应用层通过系统调用,或者/proc /sys接口,来使用内核的这种机制。这也就使得,在应用层划分资源、隔离资源成为可能。所谓的 docker 就是干这件事情的。没看见现在的 docker 很火嘛。说白了docker是个使用内核 cgroups 能力的应用程序,它企图在应用层将系统的资源隔离,每个内核里面的视图映射为一个跑在 docker 上的虚拟机。由于没有 vmware 之类的虚拟层,当然性能就好;但是 cgroups 是有它的局限性的,很明显,cgroups 只是“企图”将所有的资源进行划分和隔离。
说真的我不喜欢 cgroups. 虚拟化什么的其实让 vmware 之类的去干就好了。企图在内核里面什么都搞定,个人觉得这是荒谬的。
麻烦的是,cgroups 明显让内核的数据结构复杂了。这不用说。这让内核的初学者,甚至有一些经验的老菜鸟(啊,其实我连菜鸟都不算。。。)在无关的数据结构上耗费精力。比如你明明只是想看进行 fork 怎么干的,它特么给你来插一段乱七八糟的 cgroups 代码。更麻烦的是,如果内核总是增加各种乱七八糟越来越复杂的机制和特性的话,会让内核成为一堆难以维护的 mess (当然现在已经是了,我这种菜鸟是搞不定的).
|
|