在没有NUMA的情况下限制内存带宽cgroup

时间:2015-03-28 23:19:08

标签: linux memory-management kernel embedded-linux cgroups

我试图将进程的带宽限制在内存中。 我有2个cgroup(cgroup1和cgroup2),其中包含进程。我可以限制每个cgroup使用的内存量。 但如果他们继续调用malloc()free()并使内存总线饱和,它们会相互影响。

我该如何限制?我没有两个不同的内存节点,也没有NUMA。

1 个答案:

答案 0 :(得分:2)

这是不可能的。 Supported subsystems是:

  • blkio - 此子系统设置对块设备(如物理驱动器(磁盘,固态,USB等))的输入/输出访问限制。
  • cpu - 此子系统使用调度程序为cgroup任务提供对CPU的访问权。
  • cpuacct - 此子系统生成有关cgroup中任务使用的CPU资源的自动报告。
  • cpuset - 此子系统将各个CPU(在多核系统上)和内存节点分配给cgroup中的任务。
  • devices - 此子系统允许或拒绝通过cgroup中的任务访问设备。
  • freezer - 此子系统暂停或恢复cgroup中的任务。
  • 内存 - 此子系统设置cgroup中任务对内存使用的限制,并生成有关这些任务使用的内存资源的自动报告。
  • net_cls - 此子系统使用类标识符(classid)标记网络数据包,该类标识符允许Linux流量控制器(tc)识别源自特定cgroup任务的数据包。
  • net_prio - 此子系统提供了一种动态设置每个网络接口的网络流量优先级的方法。
  • ns - 命名空间子系统。

最近的系统research paper引入了一个新的控制器来实现这一目标,并创建了相关的代码available

另一种方法是mmap一个文件,然后在其上设置char buf[32]; fgets(buf, sizeof(buf), stdin); if (sscanf(buf, "%d", &Array[i]) != 1) break; 设置(不确定这是否有效)。然后,让你的程序从文件读取/写入变量,而不是使用blkio(丑陋!)。