實時進程管理 - 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

分類：​

- 安全

實時進程管理
新增話題