2

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

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

4

1 回答 1

3

这是不可能的。支持的子系统有:

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

最近的一篇系统研究论文介绍了一种新的控制器来实现这一点,并提供了相关的代码

另一种方法是映射一个文件,然后blkio对其进行设置(不确定这是否可行)。然后,让您的程序从文件中读取/写入变量,而不是使用malloc(丑陋!)。

于 2015-06-03T00:30:27.063 回答