实时进程管理
本文提供关于实时优先级调整进程线程的信息,而不是仅在启动时。它展示了如何控制单个进程或特定组运行的所有进程的 CPU、内存和其他资源利用率。
虽然许多最新的处理器都足够强大,可以同时播放十几个视频或音频流,但仍然有可能另一个线程会占用处理器半秒钟来完成另一项任务。这会导致音频或视频流中出现短暂的中断。视频/音频流也可能失去同步。虽然这对于普通的音乐听众来说很烦人;但对于内容制作者、作曲家或视频编辑来说,这个问题要严重得多,因为它会中断他们的工作流程。
简单的解决方案是给音频和视频进程更高的优先级。然而,虽然普通用户可以为进程设置更高的 nice 值,这意味着它的优先级更低,但只有 root 用户才能设置更低的值,并以低于 0 的 nice 值启动进程。这可以保护普通用户免于降低对系统至关重要的进程的性能。这在多用户机器上尤其重要。
配置
实时优先级默认在 Arch Linux 上启用。系统、组和用户范围的配置可以使用 PAM 和 systemd 来实现。
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) § CREDENTIALS 和 systemd.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
参见此论坛 帖子。