Linux プロセスをユーザーによってスケジュールしますか?

Linux プロセスをユーザーによってスケジュールしますか?

Linux は、プロセスのユーザーとは独立してプロセスの実行をスケジュールするようです。したがって、あるユーザーが 100 個のプロセスを実行し、別のユーザーが 1 個のプロセスを実行している場合、平均すると、最初のユーザーは 2 番目のユーザーの 100 倍の CPU 時間を取得します。

ユーザーごとに CPU 時間のバランスをとること、つまりこの例では両方のユーザーが 50% の CPU 時間を取得することを実現する可能性はありますか?

答え1

これは Linux なので、もちろんデフォルトは比較的基本的なものですが、それらを変更するためのツールの選択肢は数多くあります。ただし、すべてのツールがすべてのディストリビューションで利用できるわけではないので、どれを使用すればよいかは明らかではありません。

cgroups システムでは、CPU リソースは加重分散モデルをサポートします。このモデルでは、各グループに重みに応じた比率で利用可能なリソースの一部が割り当てられます。

systemdシステムでは、スライスの概念はcgroupsの使用に直接対応します。man systemd.resource-controlを有効にすることを検討してくださいDefaultCPUAccounting=。問題の各ユニットに同じCPU比率を適用します。たとえば、これを各対話型ユーザーに適用するには、次のように記述します。 /etc/systemd/system/user-.slice.d/resource.conf

[Unit]
Description:Default CPU ratio
Documentation:man:systemd.resource-control

[Slice]
CPUWeight=100

問題のユニットごとに適切な割合が割り当てられている限り、数値の正確な値は重要ではありません。さらに、分割されているのはシステム全体の CPU ではなく、親の user.slice に割り当てられた CPU です。代わりにサービス ユニットを調整する場合、それらは system.slice の範囲外になります。

pam_limit を使用するシステムでは、ログインしたユーザーに対して POSIX リソース制限を設定できます。を参照してくださいman limits.conf。設定ファイルは のようなドロップインにすることができます/etc/security/limits.d/resource.conf。 の実用的な方法は、ユーザーが取得するタスクの最大数に設定することですnproc。これを超えると、フォークに失敗します。 はcpu魅力的な制限ですが、ハード制限を超えるとプロセスが強制終了される可能性があり、ユーザーエクスペリエンスが悪くなります。

そして、子供向けゲーム「赤信号 緑信号」のタスクバージョンには、CPU制限これは、CPU の使用を管理するために SIGSTOP および SIGCONT 信号を送信します。簡単です。特に、設定ファイルがないため、プロセスを開始するには呼び出すか、PID を指定する必要があります。

答え2

cgroupを使用して、要件に応じてアプリケーションを割り当てることができます。参考資料の1つはcgroups-v2

関連情報