实时进程管理

出自 ArchWiki

此文章或章节需要改进语言、wiki 语法或风格。请参考 Help:Style

原因: 本文需要一些语言改进,例如不要使用 "You are whacked",先描述解决方案,不要使用随意口语(在 Talk:Realtime process management 中讨论)

本文提供关于实时优先级调整进程线程的信息,而不是仅在启动时。它展示了如何控制单个进程或特定组运行的所有进程的 CPU、内存和其他资源利用率。

虽然许多最新的处理器都足够强大,可以同时播放十几个视频或音频流,但仍然有可能另一个线程会占用处理器半秒钟来完成另一项任务。这会导致音频或视频流中出现短暂的中断。视频/音频流也可能失去同步。虽然这对于普通的音乐听众来说很烦人;但对于内容制作者、作曲家或视频编辑来说,这个问题要严重得多,因为它会中断他们的工作流程。

简单的解决方案是给音频和视频进程更高的优先级。然而,虽然普通用户可以为进程设置更高的 nice 值,这意味着它的优先级更低,但只有 root 用户才能设置更低的值,并以低于 0 的 nice 值启动进程。这可以保护普通用户免于降低对系统至关重要的进程的性能。这在多用户机器上尤其重要。

配置

实时优先级默认在 Arch Linux 上启用。系统、组和用户范围的配置可以使用 PAMsystemd 来实现。

realtime 软件包组提供了额外的工具来修改 IRQs 和进程的实时调度策略。

注意: 当运行自定义内核时,请确保它已启用 PREEMPT 以利用上述方法。

配置 PAM

/etc/security/limits.conf 文件为 pam_limits PAM 模块提供配置,该模块设置系统资源限制(参见 limits.conf(5))。

提示: 建议将 pam_limits 的配置外部化到 /etc/security/limits.d 下的单独文件中,因为这些文件优先于主配置文件。

pam_limits 提供了两种类型的资源限制:硬限制软限制。硬限制由 root 设置并由内核强制执行,而软限制可以由用户在硬限制允许的范围内配置。

安装 realtime-privileges 软件包并将用户添加到 realtime 组,可以提供合理的默认值(例如,与 专业音频 相关)。

配置 systemd 服务

由 systemd 系统服务产生的进程需要专门设置等同于 limits.conf 的配置。更多信息可以在 systemd.exec(5) § CREDENTIALSsystemd.exec(5) § PROCESS PROPERTIES 部分的 systemd.exec(5) 中找到。

硬实时与软实时

实时是进程的一种同义词,它有能力在时间内运行,而不会被任何其他进程中断。但是,尽管如此,周期偶尔仍可能被丢弃。低电源或更高优先级的进程可能是潜在原因。为了解决这个问题,实时质量有等级划分。本文讨论的是实时。硬实时通常不是那么期望,而是需要的。汽车的 ABS(防抱死制动系统)可以作为一个例子。它不能被“渲染”,也没有第二次机会。

强大能力需掌控

realtime-lsm 模块授予属于特定 UID 的用户获得更高能力的权利。rlimit 方式的工作方式类似,但它可以更精细地控制。PAM 中有一个新功能,可用于控制每个用户或每个组级别的功能。在当前版本 (0.80-2) 中,这些值出厂时未正确设置,仍然会产生问题。使用 PAM,您可以将实时优先级授予特定用户或特定用户组。PAM 的概念使得在未来可以想象在每个应用程序级别授予权限;但是,这尚未实现。

技巧与提示

启用 PAM 的登录

参见 在登录时启动 X

为了使您的系统使用 PAM 限制设置,您必须使用启用 pam 的登录方法/管理器。几乎所有图形登录管理器都启用了 pam,现在看来默认的 Arch 登录也启用了 pam。您可以通过搜索 /etc/pam.d 来确认这一点

$ grep pam_limits.so /etc/pam.d/*

如果您什么也没得到,那您就倒霉了。但是您会的,只要您有一个登录管理器(现在还有 PolicyKit)。我们希望得到像这样的输出

/etc/pam.d/crond:session   required    pam_limits.so
/etc/pam.d/login:session		required	pam_limits.so
/etc/pam.d/polkit-1:session         required        pam_limits.so
/etc/pam.d/system-auth:session   required  pam_limits.so
/etc/pam.d/system-services:session   required    pam_limits.so

因此我们看到 login、PolicyKit 和其他所有程序都需要 pam_limits.so 模块。这是一件好事,意味着 PAM 限制将被强制执行。

控制台/自动登录

参见:在启动时自动登录用户到虚拟控制台

如果您不喜欢图形登录,您仍然有办法。您需要编辑 su (来自 coreutils) 的 pam 配置

/etc/pam.d/su
 ...
 session              required        pam_limits.so

参见此论坛 帖子

参见