2

我是内核开发的新手,我正在尝试了解新的内核补丁sched:automated per tty task groups

有人可以简要解释一下它到底在做什么吗?

4

1 回答 1

4

我对该补丁的印象(尽管大多数关于它的文章都非常详细)是它可以以自动方式更均匀地平衡 CPU 比例。

Linux CFS Completely Fair Scheduler 具有组平衡行为已经有一段时间了。这意味着如果用户 A 启动了 500 个任务而用户 B 只启动了一个,那么公平应该在用户之间平衡,而不是在任务之间平衡。

为此,用户 A 的所有工作都应该在一个组中,而用户 B 的所有工作都应该在另一个组中,并且 CPU 将在它们之间平均分配 - 用户 A 不会仅仅因为他们反社会而获得更多容量运行更多任务。

然而,公平性要么基于用户 ID(动态),要么基于对照组(一种相对痛苦的静态设置方法)。

这个补丁似乎做的是根据他们的 TTY 自动将作业分配给一个组。通过这种方式,分组成为一项自动功能(不设置控制组),并且发生在比用户 ID 更细的粒度上(因为典型的桌面只有一个用户来完成大部分工作,至少非自动管理的)。

因此,当 Linus 坐下来为我们编译下一个内核时,大规模并行构建过程将所有任务放在一个组中,然后 Linus 可以启动 VLC 观看最新一集的生活大爆炸(我不知道是否他看这个节目,也不知道他的盒子里是否有各种软件,据我所知,他可能在一个完全独立的组中运行 Windows 7 下的 Windows Media Player。

然后 CPU 将在两组之间相对平均地共享,Linus 不必看着 Sheldon 生硬地在屏幕上移动。

当然,这会减慢内核构建速度,但这并不是他为我们执行的一项重要任务。如果这意味着他的理智水平得到维持,我们可以稍等一下:-)

从我所读(和所见)来看,这极大地提高了桌面应用程序的响应能力。它不会为您提供更多的整体容量,但在某些情况下确实可以改善很多情况。

当然,如果您的使用配置文件是每个 TTY 一​​个任务(或单个 TTY 中的所有任务),它可能不会有太大帮助。但是,如果它改善了某些场景并且不会降低太多其他场景,它将成为赢家。而且,即使它确实降低了其他性能,它也是可配置的行为,因此它可能仍会潜入内核。


有趣的是,既然这个候选补丁已经成为“主流媒体”,有些人从木制品中走出来,说你可以通过修改你的和其他一些小的调整来做同样的事情。.bashrc这基本上围绕我之前提到的控制组包装了一个“自动化”工具。

Linus 已经拒绝了这种用户级解决方案,因为他希望它与 shell 无关,这不是用户应该做的事情:

因为这是我们想要为所有用户和所有 shell 做的事情,并确保它自动完成。包括具有旧发行版等的用户,并使其易于在一个地方完成。然后你为我们可以在内核中轻松看到的所有其他启发式方法执行此操作。然后你就可以神奇地做到这一点,甚至无需用户注意

突然之间,使用 bashrc 似乎不再那么美妙了,是吗?

这才是重点。我们可以推出内核更改,一切都会“正常工作”。我们可以使内核中已有的功能真正有用

应该可以正常工作的用户级配置很烦人。我们可以做得更好。

换句话说:如果我们找到了更好的方法来做某事,我们不应该“好吧,如果用户想要它,他们可以做这个<技术性的事情在这里>”。如果它真的是做某事的更好方法,我们就应该去做。要求用户设置不是一项功能。

现在,我并不是说我们不应该允许用户使用 cgroup。当然,他们也可以手动操作。但我们不应该要求用户做我们自己更容易做的傻事。

如果在告诉所有人“你应该这样做”和“我们应该为你这样做”之间做出选择,我每次都会选择第二个。我们知道应该这样做。那么我们为什么要告诉别人为我们做这件事呢?

我必须同意这种观点——如果你被允许告诉用户他们必须做一些特别的事情来获得额外的性能,你可以让他们使用"nice make -j64"而不是"make -j64".

于 2010-11-18T07:15:28.820 回答