实时进程管理 - Arch Linux 中文维基

跳转到内容

# 实时进程管理

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 Realtime process management，最近一次同步于 2023-03-23，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

相关文章

- cgroups
- 性能优化

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

虽然许多最近的处理器功能强大到足以同时播放十几个视频或音频流，但仍有可能会有一个线程占用处理器半秒以完成另一项任务。 这会导致音频或视频流的短暂中断，视频或音频流也可能因此而不同步。 这对于休闲音乐听众来说很烦人，但对于内容制作者、作曲家或视频编辑者来说，这个问题要严重得多，因为它会打断他们的工作流程。

简单的解决方案是为音频和视频进程提供更高的优先级。虽然普通用户可以为进程设置更高的nice值——这意味着该进程的优先级较低，但只有 root 可以设置较低的值并以低于 0 的nice值启动进程。这可以保护普通用户不会影响到那些耗时较长而对系统而言很重要的进程。这在多用户机器上尤为重要。

## 配置

Arch Linux 默认启用实时优先级排序。可以使用PAM和systemd实现对系统、组和用户范围的配置。

realtime包组包组提供了额外的工具来修改中断请求和进程的实时调度政策。

注意：当使用自定义内核时，需确保支持`PREEMPT`以使用上述方法。

### 配置PAM

`/etc/security/limits.conf`文件提供了对`pam_limits`PAM模块的配置。`pam_limits`设定了系统资源的调用上限(参见 limits.conf(5))。

提示： It is advised to externalize the configuration of `pam_limits` to separate files below `/etc/security/limits.d` as those take precedence over the main configuration file.

`pam_limits`提供了两种类型的资源限制hard limits和soft limits。硬件限制由`root`设置，并由内核强制实施。软件限制可以被用户配置，需要在硬件限制允许的范围内。

安装realtime-privileges包包，把用户添加到`realtime`组，并提供合理的默认值（参考示例Professional audio)。

### 配置systemd服务

由systemd系统服务生成的进程需要进行专门的配置以与`limits.conf`匹配。更多信息可以参考systemd.exec(5)中的systemd.exec(5) § CREDENTIALS和systemd.exec(5) § PROCESS PROPERTIES两节。

## 硬实时与软实时

实时的含义是能够及时运行而不会被其他的任何进程中断的进程。尽管如此，这个进程的运行周期也可能被抛弃，电源不足或更高优先级的进程可能是导致这个错误的潜在原因。为了解决这个问题，会对实时的质量进行放缩。这篇文章主要考虑软实时。硬实时与其说被需要，不如说被期待。

## 权能管理

realtime-lsm 模块授予属于特定 UID 的用户获得更高capabilities的权利。 rlimit 方式的工作原理类似，但它可以控制得更精细。PAM 中有一项新功能，可用于控制每个用户或每个组级别的权能。 在当前版本 (0.80-2) 中，这些值没有被设置为开箱即用，仍然会产生问题。使用 PAM，您可以将实时优先权授予特定用户或特定用户组。 PAM 的概念使人们可以想象，将来会有在每个应用程序级别上授予权限的方法，然而至今，这还不可能。

## 技巧和窍门

### 支持PAM的登录

参见 Start X at login.

为了使您的系统使用PAM limit设置，您需要使用支持PAM的登录方法或登录管理器。几乎所有的图形化登录管理器都是支持PAM的，Arch默认的登录方式也支持PAM。您可以在`/etc/pam.d`中搜索相关设置:

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

如果您没有得到返回，说明您现在的登录方式没有使用PAM。您可以使用一个登录管理器来使用PAM(例如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的限制被正确的实施。

### Console/autologin

参见: Automatically log in some user to a virtual console on startup

如果您希望不使用图形化登录，您仍有实施PAM limit的方法。您需要编辑`pam`对`su`(由 coreutils包提供)的配置文件 :

    /etc/pam.d/su

     ...
     session              required        pam_limits.so

参见此论坛 post.

## See also

- getrlimit(2)
- https://docs.kernel.org/scheduler/sched-design-CFS.html
- https://docs.kernel.org/block/ioprio.html
- IO Benchmarking: How, why and with what
- SYSSTAT utilities home page

分类：​

- 安全

实时进程管理
添加话题