Dockerのcgroup紹介

5016 ワード

1 cgroupの基本紹介
1.1 cgroup基本概念
cgroups(ControlGroup)はカーネルが提供するメカニズムであり、異なるユーザーレベルのリソース管理のために統一化されたインタフェースを提供する.単一プロセスのリソース制御からオペレーティングシステムレベルの仮想化まで.
1.2 cgroup用語表
task(タスク):cgroupsの用語では、taskはシステムのプロセスを表す.cgroup(制御グループ):cgroupsにおけるリソース制御は、cgroup単位で実現されます.cgroupは、あるリソース制御基準によって区分されたタスクグループを表し、1つ以上のサブシステムを含む.1つのタスクは、あるcgroupに参加するか、あるcgroupから別のcgroupに移行することができます.subsystem(サブシステム):cgroupsのsubsystemはリソーススケジューリングコントローラ(ResourceController)です.例えば、CPUサブシステムはCPU時間割り当てを制御することができ、メモリサブシステムはcgroupメモリの使用量を制限することができる.hierarchy(階層ツリー):hierarchyは、対応するsubsystemをバインドすることによってリソーススケジューリングを行う一連のcgroupによってツリー構造で配列されている.hierarchyのcgroupノードには、親ノードのプロパティを継承するゼロまたは複数のサブノードが含まれます.システム全体に複数のhierarchyを持つことができます.
1.3 cgroup主な機能
1.3.1生産資源制限(ResourceLimitation)
cgroupsは、プロセスグループで使用されるリソースの合計を制限できます.アプリケーション実行時に使用するメモリの上限を設定すると、この割当額を超えるとOOM(OutofMemory)が発行されます.
1.3.2優先度割当(Prioritization)
割り当てられたCPUタイムスライス数およびハードディスクIO帯域幅サイズは、実際にはプロセスの実行を制御する優先度に相当する.
1.3.3資源統計(Accounting)
cgroupsは、CPUの使用時間、メモリの使用量など、システムのリソース使用量を統計することができ、この機能は課金に適しています.
1.3.4プロセス制御(Control)
cgroupsは、プロセスグループに対して保留、リカバリなどの操作を実行できます.
1.4 cgroupサブシステム
図に示すように、cgroupのサブシステムは主にblkio、cpu、cpuacct、cpuset、devices、freezer、memory、perfeventなどのシステムを含み、基本的によく使われるのはblkio、cpu、memory、cpusetである.これらの一般的なサブシステムの各フィールドを簡単に紹介します.
1.4.1 blkio-リソース制御
(1)比例配分ブロック装置IOリソース
blkio.weight:相対重み比率として100-1000の整数値を記入し、汎用的なデバイス割り当て比とします.blkio.weight_デバイス:特定のデバイスに対するウェイト比.
(2)IO読み書き速度上限制御
blkio.throttle.read_bps_デバイス:ブロックデバイスを毎秒読み出すデータ量に上限を設定し、フォーマットデバイス_types: node_numbersbytes_per_second. blkio.throttle.write_bps_デバイス:ブロックデバイスに書き込まれるデータ量毎に上限を設定し、フォーマットデバイス_types: node_numbersbytes_per_second. blkio.throttle.read_iops_device:1秒あたりの読み取り操作回数に上限を設定し、フォーマットdevice_types: node_numbersoperations_per_second. blkio.throttle.write_iops_デバイス:1秒あたりの書き込み回数で上限を設定し、フォーマットデバイス_types: node_numbersoperations_per_second.
(3)特定の操作について
blkio.throttle.io_Serviced:特定の操作に対して毎秒操作回数で上限を設定し、フォーマットdevice_types:node_numbersoperation_per_second. blkio.throttle.io_service_bytes:特定の操作に対して毎秒データ量で上限を設定し、フォーマットdevice_types:node_numbersoperationbytes_per_second.
1.4.2 cpu-リソース制御
(1)CFSスケジューリングポリシーでの構成
cpu.cfs_period_us:サイクル時間を設定し、cfs_とquota_us配合使用.cpu.cfs_quota_us:サイクル内で最大使用可能な時間を設定します.ここでの構成はtaskの単一cpuに対する使用上限を指し、cfs_quota_usはcfs_period_usの2倍は、2つの核で完全に使用されていることを示しています.数値範囲は1000~1000,000,000(マイクロ秒)です.cpu.stat:統計、nr_を含むperiods(いくつかのcfs_period_usサイクルが経過したことを示す)、nr_throttled(taskが制限された回数を示す)およびthrottled_time(taskが制限されている総時間を表す).cpu.shares:相対重みを表す整数(2以上でなければならない)を設定し、最後に重みの合計で除算して相対比例を算出し、CPU時間を比例配分する.(cgroupA設定100、cgroupB設定300のように、cgroupAのtaskは25%のCPU時間を実行する.1つの4コアCPUのシステムにとって、cgroupAのtaskは100%あるCPUを占有することができ、この割合は相対的に全体の1つの値である).
(2)RTスケジューリングポリシーでの構成
リアルタイムスケジューリングポリシーは、公平なスケジューリングポリシーで周期的に時間を割り当てる方法と同様に、周期的に一定の実行時間を割り当てる方法です.cpu.rt_period_us:周期時間を設定します.cpu.rt_runtime_us:サイクル中の運転時間を設定します.
1.4.3 cpuacct-リソースレポート
cpuacct.USage:cgroup内のすべてのtaskのcpuの使用時間を統計します.cpuacct.stat:cgroup内のすべてのtaskのユーザ状態とカーネル状態がcpuを使用する時間を統計します.cpuacct.usage_percpu:cgroup内のすべてのtaskが各cpuを使用する時間を統計します.
1.4.4 cpuset-cpuバインド
cpuset.cpus:このファイルにcgroupで使用可能なCPU番号を記入します.例えば、0-2,16は0,1,2,16の4つのCPUを表します.cpuset.mems:CPUと同様に、cgroupで使用可能なmemorynodeを表します.フォーマットは同じです.
1.4.5 memory-メモリリソース管理
(1)限度額クラス
memory.limit_bytes:最大メモリ使用量を強制的に制限し、単位はk、m、gの3種類で、-1を記入すると無制限を表します.memory.soft_limit_bytes:ソフトリミットは、強制リミット設定の値よりも小さい場合にのみ意味があります.書式を同上に記入する.全体的なメモリが緊張している場合、taskが取得したメモリはソフトリミット額に制限され、メモリが飢えているため、プロセスがあまり多くないことを保証します.メモリが組み込まれたリソース制限は、リソース競合がないわけではないことがわかります.memory.memsw.limit_bytes:最大メモリとswap領域メモリの和の使用量制限を設定します.書式を同上に記入する.
(2)アラームと自動制御
memory.oom_control:このパラメータは0または1を記入し、0はオンを示し、cgroupのプロセスがリソースを使用して限界を超えた場合、すぐにプロセスを殺し、1は有効ではないことを示します.デフォルトでは、memoryサブシステムを含むcgroupが有効になります.oom_コントロールが有効でない場合、実際にメモリが限界を超えた場合、プロセスは空きメモリリソースがあるまで一時停止されます.
(3)統計と監視類
memory.usage_bytes:cgroupでプロセスが使用する現在の合計メモリ使用量(バイト単位)をレポートします.memory.max_usage_bytes:このcgroupでプロセスで使用される最大メモリ使用量をレポートします.memory.failcnt:レポートメモリがmemoryに達しました.limit_in_bytesが設定した制限値の回数.memory.stat:大量のメモリ統計が含まれています.
1.5 cgroupインストールおよび一般的なコマンド
1.5.1環境別インストールコマンド
(1)Centosシステム
yum -y install libcgroup-tools.x86_64
(2)ubuntuシステム
sudo apt-get install cgroup-bin
(3)インストール完了後/sys/fsディレクトリで/cgroupディレクトリを生成
1.5.2一般的なコマンド
cgclassify -- cgclassify                    cgroup。
cgclear -- cgclear              cgroup。
cgconfig.conf --  cgconfig.conf     cgroup。
cgconfigparser -- cgconfigparser    cgconfig.conf        。
cgcreate -- cgcreate       cgroup。
cgdelete -- cgdelete       cgroup。
cgexec -- cgexec      cgroup     。
cgget -- cgget    cgroup  。
cgred.conf -- cgred.conf cgred       。
cgrules.conf -- cgrules.conf                cgroup   。
cgrulesengd -- cgrulesengd   cgroup      。
cgset -- cgset     cgroup     。
lscgroup -- lscgroup          cgroup。
lssubsys -- lssubsy

もちろん、cgcreateやcgdeleteの代わりにmkdirやrmdirを使用してもよいし、cgsetなどの代わりにスクリプトecho+リダイレクトを使用してもよいし、コマンドが一意ではない.