私はpulseaudio
Gentoo Linuxボックスのプロセスが-11という良いレベルを持っていることを発見しました。しかし、一般ユーザーが所有しているにもかかわらず、どのようにそのような高い優先順位を持つようになったのかわかりません。
nice
root以外のユーザーは、このコマンドを使用して0より低い優先順位のプログラムのみを起動でき、プロセスに0より高い優先順位を付けようとすると、「許可拒否」が表示されることがわかります。
プロセスは私(ルートではなく)所有であるため、pulseaudio
特別な処理がなければ、それほど高い優先順位を得ることはできないようです。
だから私の質問は、「治療」がpulseaudio
親近感を減らすことです。
答え1
PulseAudioは主に待ち時間の問題を防ぎ、スキップしないオーディオ再生のために他のデスクトッププログラムよりも高い優先順位を必要とします。しかし、PulseAudioに高い優先順位を与えるプロセスはかなり複雑です。
この特別な優先順位を取得するには、次のようにします。リアルタイムスイート(rtkit-daemon
)プロセス。 D-Busサービスは、特定のユーザープログラムでリアルタイムスケジューリングを有効にし、乱用を防ぐためにいくつかの厳しいポリシーを適用します。
- RLIMIT_RTTIMEが設定されたクライアントのみがRT予約を受け取ります。
- RLIMIR_RTIME:リアルタイム予約ポリシーに従って、スケジュールされたプロセスがシステムコールをブロックせずに消費できるCPU時間の量の制限を指定します。
- RTスケジュールは、SCHED_RESET_ON_FORKが設定されたプロセスにのみ配布されるため、スケジュール設定が子プロセスに「漏洩」しないように配置されるため、「RTフォーク爆弾」を使用してRLIMIT_RTTIMEをバイパスし、システムの競合を引き起こすことができません。
- SCHED_RESET_ON_FORK:設定されている場合、プロセスはa)スケジューリング優先順位をDEFAULT_PRIO(より高い場合)にリセットし、b)スケジューリングポリシーをSCHED_NORMAL(SCHED_FIFOまたはSCHED_RRの場合)にリセットします。
- すべてのユーザーが制御できるリソースを制限し、最大ユーザー、プロセス、スレッドのみを同時にRTスケジューリングすることができます。
- 特定の期間内に限られた数のスレッドだけがRTになります。
- クライアント承認が確認に合格しました。ポリシーツールキット。
[...] 上記で指摘したロジックにもかかわらず、システムがオーバーロードされると、すべてのリアルタイムスレッドをSCHED_OTHERに自動的に降格させるカナリアベースの監視機能が含まれています。詳しくはカナリアベースのRTウォッチドッグ [...]
追加の関連情報:
答え2
@zuazoの答えはpulseaudioに非常に便利です。完全性を期すために、一般的にルートではなくプロセスの優先順位が高い4つの状況があることを指摘します。
- 実行中のプログラムはsetuid-rootであり、それ自体が高い優先順位を与えてからuidを変更しました。
- プロセスにはその機能があります
CAP_SYS_NICE
(そして自分に高い優先順位を与えた後にそれを放棄することも、あきらめないかもしれません)。 - そのプロセスはrootとして実行されるか、その機能を持つ他のプロセスによって
CAP_SYS_NICE
高い優先順位が与えられます。- 他の答えで述べたように、PulseAudioの場合です。また、実行して
sudo renice
すべてのプロセスに高い優先順位を付けることもできます。
- 他の答えで述べたように、PulseAudioの場合です。また、実行して
- そのプロセスはすでに高い優先順位を持ち、設定されていない他のプロセスの子プロセスです
SCHED_RESET_ON_FORK
。
別の微妙さがあります。プロセスが自分に「属する」と言うときは、実際のUIDまたは有効なUIDについて話すことができます。有効なUIDは自分に高い優先順位を与えることができるルートであるかどうかを判断しますが、実際のUIDはこれを実行した後に再度変更するUIDをどのように知ることができますか?