これまでの紹介で、Linuxのcgroupsを使ってCPUリソースを制限できることを学びました。次の小シリーズでは、Linuxでcgroupを使用してCPUリソースを制限する方法を紹介します。
この時間は、CPUリソースのcgroupを管理する方法について話をします。制御プロセスのCPU使用について話しましょう。 1つのマシン上で多くのリソースを消費する可能性がある複数のプログラムを実行する場合、プログラムがすべてのリソースを占有し、他のプログラムが正しく実行されなかったり、システムが維持されなくなったりしたくありません。この時点で、cgroupを使用してプロセスのリソース消費を制御できます。これがcpuリソースです。
cgroupsでは、cpu.cfs_period_usとcpu.cfs_quota_usを使用して、グループ内のすべてのプロセスが単位時間あたりに使用できるCPU時間を制限できます。ここでcfsはFull Fair Schedulerの略です。 Cpu.cfs_period_usは期間で、デフォルトは100000、つまり100ミリ秒です。 Cpu.cfs_quota_usは、この期間中に使用できるCPU時間で、デフォルトは-1です。
CPUを消費するプログラムの実行
コードは次のとおりです。
#echo‘ while True:pass’
Python&
[1] 1532
トップこのプロセスのcpuコードの100%が、次のようになっていることがわかります。
PID USER PR NI VIRT RES SHR S%CPU%MEMORY + COMMAND
1532 root 20 0 112m 3684 1708 R 99.6 0.7 0:30.42 python
。 。 。
次に来て、プロセスを制限します。最初に/foo制御グループの制限を変更してから、プロセスを追加してください。
コードは以下のとおりです。
echo 50000》 /sys/fs/cgroup/cpu/foo/cpu.cfs_quota_us
echo 1532》 /sys /fs /group /cpu /Foo /tasks
cgroupにプロセスを追加するには、タスクファイルにpidを書きます。ここでは、cpu.cfs_quota_usが50000に設定されています。これは、cpu.cfs_period_usに対して50%または50%です。それから効果を見てください。
コードは次のとおりです。
PIDユーザーPR NI VIRT RES SHR S%CPU%メンバー時間+コマンド
1532 root 20 0 112m 3684 1708 R 50.2 0.7 5:00.31 python < Br> <p>。 。 。
ご覧のとおり、プロセスのCPU使用率は50%に制限されています。ここでは、テスト対象の仮想マシンにコアが1つだけあります。マルチコアの場合、表示される値は異なります。さらに、cfs_quota_usはcfs_period_usよりも大きくなる可能性があります。これは主にマルチコアの場合です。コア数がnの場合、1つの制御グループ内のプロセスは、当然CPU時間のn倍まで使用できます。
これら2つの値はcgroups階層内で制限されており、基礎となるリソースは上限レベルを超えることはできません。具体的には、下位層のcpu.cfs_period_usの値を上位層の値より小さくすることはできず、cpu.cfs_quota_usの値を上位層の値より大きくすることはできません。
cpu.rt_period_us、cpu.rt_runtime_usのもう1つのセットはリアルタイムプロセス制限に対応します。通常は使用する機会がありません。
cpuサブシステムでは、cpu.statは前の方法で行われたリソース制限の統計です。 Nr_periods、nr_throttledは、合計で経過したサイクル、およびそれらが制限される期間です。 throttled_timeは、制御グループによって失われた合計CPU使用時間です。
cpu.sharesもあります。これはcpuの使用を制限するためにも使用されます。しかし、cpu.cfs_quota_usとcpu.cfs_period_usには大きな違いがあります。 Cpu.sharesは、プロセスが使用できる絶対CPU時間を制限するのではなく、グループ間のクォータを制御するためのものです。たとえば、
コードは次のようになります。
/cpu/cpu.shares:1024
/cpu/foo/cpu.shares:2048
グループ内のプロセスが最大容量で実行されている場合、/foo内のプロセスは/内のプロセスの2倍のCPUを占有します。 /foo /barを構築した場合、cpu.sharesも1024で、全容量で実行されているプロセスもある場合、/、/foo、/foo /bar cpuの占有率は1:2:1です。前のものはそれぞれが一杯になっている状況についてです。他の制御グループ内のプロセスがアイドル状態の場合、特定のグループのプロセスはすべてのCPUを完全に使用できます。通常の状況下では、この方法は公平性を確保しながらリソースを最大限に活用できることがわかります。
さらに、プロセスで使用できるCPUコアを制限できます。 cpusetサブシステムは、処理プロセスやその他の関連構成で使用できるcpuコアおよびメモリノードです。このセクションの設定の多くはNUMAに関連しています。 cpuset.cpusの中で、cpuset.memsはプロセスが使用できるCPUコアとメモリノードを制限するために使用されます。これら2つのパラメータのCPUコアとメモリノードは、「l」、「r」で区切られたidで表されます。たとえば、0、1、2です。 0〜3などの範囲を示すために' - 'を使用することもできます。両方を組み合わせることができます。 「0-2,6,7」のように。プロセスを追加する前に、cpuset.cpusとcpuset.memsを同時に設定し、互換性を保つ必要があります。そうしないと、エラーが発生します。たとえば、
コードは次のとおりです。
#echo 0》 /sys/fs/cgroup/cpuset/foo/cpuset.cpus
#echo 0》 /sys /fs /cgroup /cpuset/foo/cpuset.mems
したがって、/foo内のプロセスはcpu0とメモリノード0のみを使用できます。次のように
コードを使用します。
#cat /proc /"pid" /status
Grep‘ _allowed_list’
で効果を確認できます。
リソース使用量を制限することに加えて、cgroupsにはリソースを数える機能もあります。クラウドコンピューティングの請求に使用できます。 cpuリソース統計専用のcpuacctサブシステムがあります。 Cpuacct.statは、コントロールグループ内のプロセスユーザーモードとカーネルモードのCPU使用率をカウントします単位はUSER_HZ、つまりjiffyとcpu tickです。 1秒あたりのティック数はgetconf CLK_TCKで取得できます。これは通常100です。表示されている値をこの値で除算すると、秒になります。
cpuacct.usageおよびcpuacct.usage_percpuは、この制御グループ内のプロセスによって消費されたCPU時間(ナノ秒単位)です。後者はcpu統計に分けられます。
PS 2014-4-22
SLES 11、sp2、sp3、対応するカーネルバージョン3.0.13、3.0.76、cpuサブシステムの場合、cgroup.procsにpidを書き込みます実際には効力を発揮しないでしょう。タスクを書いても大丈夫です。他の環境では、それ以降のバージョンまたはそれ以下のカーネルは見つかりません。
上記はLinuxでcgroupリソースを制御するためにcgroupを使用する方法です。 CPUリソースを制御し、試してみてください。
Linuxシステムのネットワークパフォーマンスはツールでテストすることができます主なテストツールはroute、netstat、tcpdumpです。この記事では、Linuxシステムでこれら3つのツールを
chmodコマンドを使用することを好む多くのユーザーは、chmodコマンドの意味と権限についてまだあまり明確ではないため、使用時に何らかの問題を引き起こしています。これらのユーザーの混乱を解決するため
OOMのキラーメカニズムは、プロセスがシステムリソースをある程度破損した場合に、Linuxがプロセスを強制終了するメカニズムです。この記事では、LinuxがOOMキラー機構をどのように使用するかを紹介
Linuxは毎回SVNリポジトリを構築するのが非常に面倒です。次の小シリーズでは、Linuxがシェルスクリプトを使用してSVNリポジトリを作成する方法を紹介します。 #: たびに新しいSVNリポジ