【问题标题】:Performance isolation of containers (on Linux)?容器的性能隔离(在 Linux 上)?
【发布时间】:2015-06-23 10:49:47
【问题描述】:

我想在一台机器上运行一堆应用程序或容器。我想隔离以下资源的使用:

  1. CPU
  2. 内存
  3. I/O(网络、磁盘等)

理想情况下,我想实现所有资源的比例使用,这样如果一些容器空闲,其他容器就可以利用它们。静态预留(例如每 10 个应用 10%)并不理想。

我知道我们可以为 CPU 做到这一点,但我不确定这是否适用于所有事情。将不胜感激详细的答案(不仅仅是使用“tp / qdisc”/“iptables”作为网络)。

【问题讨论】:

  • > 所有资源的比例使用 性能隔离
  • 很公平。也许我应该澄清一下。我的意思是,如果某个容器想要使用 4 核、2 Gb RAM、10Mb/s 磁盘和 20Mb/s 网络,那么应该保证那么多,但是当机器上没有其他东西在运行时,我们也应该扩大规模。

标签: linux performance containers isolation


【解决方案1】:

使用控制组 (cgroups),您可以实现资源隔离:

  • CPU
  • 内存
  • 网络
  • 磁盘

当两个或多个进程可能使用过多的资源而其他进程无法获得公平的机会时,您可以使用 cgroups 告诉它们:如果您争夺相同的资源,其中一个不能超过 60 % 和其他不超过 30% 以此类推。如果同一资源没有竞争,我们只有一个请求者。他可以使用他想要的数量,直到另一个进程尝试使用它。

Examples of I/O Throttling

Introduction to Linux Control Groups

关于机器空闲时的扩展:如果您使用完全公平调度器 (CFS),如果系统中有足够的空闲 CPU 周期可用,cgroup 可以获得更多分配的 CPU 份额。

Redhat resource management guide:

当一个 cgroup 中的任务处于空闲状态并且没有使用任何 CPU 时间时,这 剩余时间收集在未使用 CPU 周期的全局池中。 允许其他 cgroup 从该池中借用 CPU 周期

cpusets.txt documentation

如果 CPU 的运行队列中的任务用完,CPU 会尝试拉取 来自其他繁忙 CPU 的额外任务来帮助他们 闲置。

当然,要找到可移动的任务和/或需要一些搜索成本 空闲 CPU,调度程序可能不会在每个时间搜索域中的所有 CPU 时间。事实上,在某些架构中,事件的搜索范围 被限制在 CPU 所在的同一个套接字或节点中,而 tick 上的负载均衡搜索所有。

例如,假设 CPU Z 离 CPU X 相对较远。即使 CPU Z CPU X 和兄弟姐妹忙时处于空闲状态,调度程序无法迁移 将任务 B 从 X 唤醒到 Z,因为它超出了搜索范围。作为 结果,CPU X 上的任务 B 需要等待任务 A 或者等待负载均衡 在下一个刻度上。对于一些特殊情况下的应用,等待 1 个刻度可能太长了。

其他几个实现资源隔离的方法:nice(用于轻松调整),cpulimit - 静态资源分配,当其他 CPU 空闲时,共享不会借给其他进程。

【讨论】:

  • 空闲资源的使用是否也适用于IO或内存?
猜你喜欢
  • 2014-06-29
  • 2019-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
相关资源
最近更新 更多