syd*_*raz 1 linux performance containers isolation
我想在一台机器上运行一堆应用程序或容器.我想隔离以下资源的使用情况:
理想情况下,我希望实现所有资源的按比例使用,这样如果某些容器处于空闲状态,其他容器就可以利用它们.静态预订(例如,每10个应用程序10%)并不理想.
我知道我们可以为CPU做到这一点,但我不确定这是否可以概括为一切.将欣赏详细的答案(不只是使用"tp/qdisc"/"iptables"为网络).
使用控制组(cgroup),您可以实现以下资源隔离:
当两个或多个进程可能使用太多资源而其他进程无法获得公平的机会时,您可以使用cgroup告诉他们:如果您争取同一资源,其中一个不能超过60%和其他一个不超过30%等等.如果没有相同资源的竞争,我们只有一个请求者.他可以使用他想要的程度,直到另一个进程尝试使用它.
关于机器空闲时的扩展:如果使用完全公平计划程序(CFS),如果系统中有足够的空闲CPU周期,则cgroup可以获得更多分配的CPU份额.
当一个cgroup中的任务处于空闲状态且未使用任何CPU时间时,此剩余时间将收集在未使用的CPU周期的全局池中.允许其他cgroup从此池借用CPU周期
如果CPU在其runqueue中耗尽了任务,则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空闲时,共享不会借用到其他进程.
| 归档时间: |
|
| 查看次数: |
552 次 |
| 最近记录: |