我是内核开发的新手,我正在尝试了解新的内核补丁sched: automated per tty task groups。
有人可以简要解释它到底在做什么吗?
答案 0 :(得分:4)
我对该补丁的印象(虽然大多数文章都有关于它的详细信息)是它可以更自然地平衡CPU比例
Linux CFS完全公平计划程序有一段时间的组平衡行为。这意味着如果用户A启动500个任务而用户B只启动一个任务,那么公平性应该在用户之间平衡,而不是任务。
为此,所有用户A作业应该在一个组中,并且所有用户B的作业都在另一个组中,并且CPU将在它们之间平均共享 - 用户A不会因为它们而获得更多容量反社会运行更多的任务。
但是,公平性要么基于用户ID(动态)还是控制组(相对痛苦的静态设置方法)。
此修补程序的作用是根据TTY自动将作业分配给组。通过这种方式,分离成组成为一个自动功能(没有设置控制组),并且发生在比用户ID更精细的颗粒上(因为典型的桌面只有 一个用户执行大部分操作工作,至少是非自动管理工作。)
所以,当Linus坐下来为我们编译下一个内核时,大规模并行构建过程将其所有任务放在一个组中,然后Linus可以启动VLC来观看The Big Bang Theory的最新一集(I不知道他是否看过这个节目,也不知道他的盒子上是否有各种各样的软件,据我所知,他可能会在一个完全独立的小组中运行Windows 7下的Windows Media Player。
然后,CPU将在两个组之间相对平等地共享,而Linus将不必看着Sheldon急剧地在屏幕上移动。
当然,它会减慢内核的构建速度,但这并不是说这是他为我们执行的一项重要任务。如果这意味着他的理智水平得以维持,我们可以等一下: - )
从我读过(和看过)的内容来看,这个极大提高了桌面应用程序的响应能力。它不会给你更多的整体容量,但它确实在某些情况下改善了很多东西。
当然,如果您的使用情况配置文件是每个TTY一个任务(或单个TTY中的所有任务),那么它可能无济于事。但是,如果它改善了某些场景并且不会降低太多其他场景,那么它将成为赢家。并且,即使它 降低了其他人,它也是可配置的行为,所以它可能仍会潜入内核。
有趣的是,既然这个补丁候选人已经成为“主流媒体”,那么有些人会从木工中走出来说明你可以same thing修改你的.bashrc
和其他一些小调整。这基本上围绕我之前提到的控制组包装了一个“自动化”工具。
Linus已经拒绝了这种用户级解决方案,因为他希望它与shell无关,这不是用户应该做的事情:
因为我们想要为所有用户和所有shell执行此操作,并确保它自动完成。包括具有旧发行版等的用户,并且可以在一个地方轻松完成。然后,您可以在内核中轻松查看所有其他启发式方法。然后你可以神奇地做到这一点,用户甚至不必注意。
突然间,用bashrc玩它似乎不再那么精彩,是吗?
这就是重点。我们可以推出内核更改,一切都“正常”。我们可以使内核中已有的功能实际上有用。
应该正常工作的用户级配置很烦人。我们可以做得更好。
换句话说:如果我们找到更好的方法来做某事,我们应该不说“好吧,如果用户想要它,他们可以做到这一点<技术性的事情>”。如果它真的是一种更好的做事方式,我们就应该这样做。要求用户设置不是一项功能。
现在,我并不是说我们不应该允许用户使用cgroup。当然他们也可以手动做事。但我们不应该要求用户做我们可以更容易自己做的愚蠢的事情。
如果选择是在告诉每个人“你应该这样做”和“我们应该为你做这件事”,我会每次都采取第二个。我们知道应该这样做。那我们为什么要告诉别人为我们做这件事呢?
我必须同意这种观点 - 如果你被允许告诉用户他们必须做一些特殊的额外表现,你可以让他们使用"nice make -j64"
而不是"make -j64"
。