Linux kernel cgroup真的能保证过程不相互干扰吗? 我是CGROW的新手,我尝试在Linux服务器上使用它控制两个C++进程。

Linux kernel cgroup真的能保证过程不相互干扰吗? 我是CGROW的新手,我尝试在Linux服务器上使用它控制两个C++进程。,linux-kernel,virtualization,Linux Kernel,Virtualization,我将每个进程的内存限制设置为1G,这意味着它最多可以消耗1GB内存,对吗 但是我认为cgroup不能保证像VM那样的真正隔离,例如,一个进程仍然可以读取(或写入)另一个进程的内存。 这两个进程之间也存在着竞争,因为cgroup不向它们分配任何内存块 我说得对吗 cpu组中的情况如何 考虑到隔离,cgroup和VM之间有什么区别 我在谷歌上搜索了一下,但只得到了很多“docker vs vm”,这真的不是我想要的 任何来自cgroup实现的提示都非常有用。首先,您误解了cgroup是什么。它不

我将每个进程的内存限制设置为1G,这意味着它最多可以消耗1GB内存,对吗

但是我认为cgroup不能保证像VM那样的真正隔离,例如,一个进程仍然可以读取(或写入)另一个进程的内存。 这两个进程之间也存在着竞争,因为cgroup不向它们分配任何内存块

  • 我说得对吗
  • cpu组中的情况如何
  • 考虑到隔离,cgroup和VM之间有什么区别
我在谷歌上搜索了一下,但只得到了很多“docker vs vm”,这真的不是我想要的


任何来自cgroup实现的提示都非常有用。

首先,您误解了cgroup是什么。它不是一个隔离工具,它是一个资源限制工具,可以像mem_limit那样限制内存、CPU、I/O消耗

然而,每个进程都有自己唯一的地址空间,所以当进程1在CPU上运行时,不使用进程2页表,所以进程1不能通过简单地取消引用指针来获取进程2变量虚拟内存已经是一种隔离技术。

在Linux中,有一些方法(通常由调试器使用)可以访问他人的进程内存:

  • /proc/PID/mem
    。如果检查该文件的权限,您将看到只有同一个用户或root用户可以访问该文件
  • process\u vm{readv,writev}
    system调用。他们检查用户是否具有CAP_SYS_PTRACE能力
因此,有几个选项可以禁止其他进程访问其他内存:

  • 从没有CAP_SYS_PTRACE的不同用户运行进程。安卓就是这样做的
  • 使用内核名称空间-进程将不知道是否存在其他名称空间-在pid级别执行保护。LXC可能也使用这个和Docker
  • 裸机虚拟化:Xen、KVM等。不仅进程页表是隔离的,而且也是一个内核
    IMHO(1)已经足够了,(3)适合偏执狂;)

    很清楚,非常感谢!那么cpu设置呢,cgroup真的能确保特定的进程只能使用特定的核心吗?@harryz,是的,它们是
    sched\u setaffinity
    的形式。再次感谢!顺便说一句,你能告诉我在哪里可以找到这些知识吗?就像引擎盖下的cgroup一样。@harryz,从内核文档开始: