Linux kernel 关于sched:每个tty任务组的自动化

Linux kernel 关于sched:每个tty任务组的自动化,linux-kernel,scheduler,Linux Kernel,Scheduler,我是内核开发新手,我正在努力了解新的内核补丁 有人能简单地解释一下它到底在做什么吗?我对这个补丁的印象(尽管大多数关于它的文章都很详细)是它能以一种自动的方式更均匀地平衡CPU的比例 LinuxCFS完全公平调度程序有一段时间存在组平衡行为。这意味着,如果用户A启动500个任务,而用户B只启动一个任务,那么公平性应该在用户之间平衡,而不是在任务之间平衡 为此,用户A的所有作业都应该在一个组中,用户B的所有作业都应该在另一个组中,CPU将在它们之间平等共享——用户A不会因为反社会地运行更多任务而获

我是内核开发新手,我正在努力了解新的内核补丁


有人能简单地解释一下它到底在做什么吗?

我对这个补丁的印象(尽管大多数关于它的文章都很详细)是它能以一种自动的方式更均匀地平衡CPU的比例

LinuxCFS完全公平调度程序有一段时间存在组平衡行为。这意味着,如果用户A启动500个任务,而用户B只启动一个任务,那么公平性应该在用户之间平衡,而不是在任务之间平衡

为此,用户A的所有作业都应该在一个组中,用户B的所有作业都应该在另一个组中,CPU将在它们之间平等共享——用户A不会因为反社会地运行更多任务而获得更多的容量

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

此修补程序的作用似乎是根据作业的TTY自动将作业分配给组。通过这种方式,分组成为一种自动功能(无需设置控制组),并且这种功能发生在比用户ID更细的粒度上(因为典型的台式机只有一个用户执行大部分工作,至少是非自动管理工作)

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

CPU将在两组之间相对平等地共享,Linus不必看着Sheldon在屏幕上急促地移动

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

据我所读(和所见),这大大提高了桌面应用程序的响应能力。它并没有给你更多的整体能力,但在某些情况下,它确实改善了很多事情

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


有趣的是,现在这个候选补丁已经成为“主流媒体”,有人站出来说你可以修改你的
.bashrc
和其他一些小的调整。这基本上围绕我前面提到的控制组包装了一个“自动化”工具

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

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

突然之间,与bashrc一起玩似乎不再那么美妙了,是吗

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

用户级的配置对于一些本应该正常工作的东西来说是很烦人的。我们可以做得更好

换句话说:如果我们找到更好的方法来做某事,我们不应该说“好吧,如果用户想要,他们可以这样做”。如果这真的是一种更好的做事方式,我们就应该这样做。要求用户设置不是一项功能

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

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

我必须同意这种观点——如果你被允许告诉用户他们必须做一些特殊的事情来提高性能,你可以让他们使用
“nice make-j64”
,而不是
“make-j64”