實時進程管理

出自 Arch Linux 中文维基

本文提供了在實時運行時確定進程線程優先級的有關信息,而不僅限於啟動時。本文將展示如何控制單個進程或特定組運行的所有進程的CPU、內存和其他資源的利用率。

雖然許多最近的處理器功能強大到足以同時播放十幾個視頻或音頻流,但仍有可能會有一個線程佔用處理器半秒以完成另一項任務。 這會導致音頻或視頻流的短暫中斷,視頻或音頻流也可能因此而不同步。 這對於休閒音樂聽眾來説很煩人,但對於內容製作者、作曲家或視頻編輯者來説,這個問題要嚴重得多,因為它會打斷他們的工作流程。

簡單的解決方案是為音頻和視頻進程提供更高的優先級。雖然普通用户可以為進程設置更高的nice值——這意味着該進程的優先級較低,但只有 root 可以設置較低的值並以低於 0 的nice值啟動進程。這可以保護普通用户不會影響到那些耗時較長而對系統而言很重要的進程。這在多用户機器上尤為重要。

配置[編輯 | 編輯原始碼]

Arch Linux 默認啟用實時優先級排序。可以使用PAMsystemd實現對系統、組和用户範圍的配置。

realtime包組包組提供了額外的工具來修改中斷請求和進程的實時調度政策。

注意: 當使用自定義內核時,需確保支持PREEMPT以使用上述方法。

配置PAM[編輯 | 編輯原始碼]

/etc/security/limits.conf文件提供了對pam_limitsPAM模塊的配置。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 limitssoft limits。硬件限制由root設置,並由內核強制實施。軟件限制可以被用户配置,需要在硬件限制允許的範圍內。

安裝realtime-privileges包,把用户添加到realtime組,並提供合理的默認值(參考示例Professional audio)。

配置systemd服務[編輯 | 編輯原始碼]

由systemd系統服務生成的進程需要進行專門的配置以與limits.conf匹配。更多信息可以參考systemd.exec(5)中的systemd.exec(5) § CREDENTIALSsystemd.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的方法。您需要編輯pamsu(由 coreutils提供)的配置文件 :

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

參見此論壇 post.

See also[編輯 | 編輯原始碼]