- 很久以前(2.6 之前的内核)在一个非常低端的桌面上,我一直很高兴地关注Con Kolivas 建议(相当重(-10))调整 X 服务器。(为了更好的响应能力)
- 对于较新的内核、较新的调度程序和 SMP 系统,许多人报告说,即使默认的 Nice 值有 1 + 或 - 变化,也是“导致系统的其他部分以非常明显的方式受到影响”。我又回到了默认状态。
- 不再关注这个之后,我最近惊讶地发现 /usr/bin/X (1.20.8) 启动了-nolisten tcp -keeptty :0 -auth blahblah以-1 的良好值运行。 (*1)
问题一:对于主要在默认的nice值下运行SCHED_OTHER任务的桌面来说,这(以-1的nice值运行X服务器)现在被认为是最佳选择吗?
注意下面的 *1 以某种非常奇怪的方式表明,即使不是最好的选择,它也是 freedesktop 的故意意愿,无论任何上下文(客户端、硬件、内核、CPU 固定......)
Q2:考虑到我也在运行一个窗口/合成管理器(kwin_x11),它表示实现了 X-server 用来实现的大部分工作,我是否应该考虑随之而来的 renice 呢? X-服务器的数量或多或少? (X 平均消耗 kwin_x11 的 1.5 个 cpu 时间)(*2)
Q3:将 X / kwin_x11 的良好相对值基于其非自愿上下文切换的相对值是否合适? (kwin_x11(在我的一些典型桌面工作负载期间)非自愿上下文切换比 X 多大约 30 倍)
Q4:更一般地说,在客户端/服务器 SCHED_OTHER 世界中,是否存在关于服务器和客户端应用程序之间相对良好值的经验法则?并且,考虑到这种特殊情况(X 服务器/ X 客户端),我是否可以假设客户端在大多数情况下都会等待服务器的可用性?
我还可以假设 kwin_X11 没有收到足够的 cpu 时间的最糟糕的后果是帧丢失,因此让一些 X 客户端能够定期输出 X fps 并且 kwin_X11 不时地丢失几个帧将是荒谬的?
运行一些典型桌面工作负载 5 分钟时的数据:
X(尼斯-1)ucs:1525 / kwin ucs(尼斯0)51834(GT = 53359)
X(尼斯-1)ucs:6337 / kwin ucs(尼斯-2)38415(GT = 44752)
*1:据我了解xinit代码中,xinit(父级)负责(`setpriority(PRIO_PROCESS, serverpid, -1); 作为 startserver 过程的一部分),在分叉稍后将执行服务器的子级之后...
事实上...就在...之后以下评论:服务器不太好???这确实增加了我的困惑。
*2:我知道疯狂如果甚至不喜欢某些实时调度模型(我认为这不明智(*3)),则会严重renice(-10)kwin。不幸的是,没有给出这种调整的理由,并且相应的规则已经很旧了(2018 年),从那时起,kwin 就已经进行了大量的更改。
*3:至少就 kwin_X11 而言,如果我的理解正确的话,X 服务器仍在管理输入。