Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxについて >> Linuxにおけるcgroupの基礎知識                 

のLinuxのcgroupは、さまざまなシナリオのための物理メモリの制御下で使用することができ、我々はそれの基本的な理解を持っているように、より多くの事ののcgroupので、本論文では、あなたのLinuxのcgroup下に簡単な紹介を行います。

から始まるバージョン2.6.24からは、Linuxカーネルはのcgroup(対照群)と呼ばれる機能を提供します。 Cgroupは制御グループの省略形です

Linuxにおけるcgroupの基礎知識                 

のLinuxのcgroupは、さまざまなシナリオのための物理メモリの制御下で使用することができ、我々はそれの基本的な理解を持っているように、より多くの事ののcgroupので、本論文では、あなたのLinuxのcgroup下に簡単な紹介を行います。

から始まるバージョン2.6.24からは、Linuxカーネルはのcgroup(対照群)と呼ばれる機能を提供します。 Cgroupは制御グループの省略形です

  
AWK‘ $ 5 =='のcgroup' {$ 0印刷}’対照群は、現在マウントされている参照。 cat /proc /cgroupsを使用して、現在のすべてのコントロールグループのステータスを確認してください。次のスクリプトは、すべてのサブシステムをそれぞれのディレクトリにマウントするために使用できます。

コードは次のとおりです。

#! /ビン/bashの "/P" "P" cgroot =' $ {1 - /SYS /FS /cgroup内}'

SUBSYS =' $ {2:-blkio CPU cpuacctのcpusetの装置フリーザーメモリnet_cls net_prio NS perf_event}' "/P" "P" マウント-t tmpfsのcgroup_root' $ {cgroot}'

$のSUBSYSでSSのため、
を行う

ます。mkdir -p ' $ cgroot /$のSS'

マウント-tのcgroup -o' $ ssの'' $ ssの'' $のcgroot /$のSS'


終わっ

ディレクトリのいくつかは、lsのように、何であるかを見てみると、/SYS /FS /cgroup内/CPUを見てください。

のコードは次のとおりです。

cgroup.event_control cpu.cfs_period_us cpu.rt_period_us cpu.shares notify_on_releaseタスク

cgroup.procs cpu.cfs_quota_us cpu.rt_runtime_us cpu.stat release_agent

<; cpu。'は、このサブシステムに固有のもので始まります。他のものは各サブシステムに対応するディレクトリにあります。これらのファイルは、リソース使用情報とリソース制限を読み取るために使用されます。制御グループを作成するには、目的のサブシステムにディレクトリを作成します。たとえば、mkdir /sys /fs /cgroup /cpu /fooは/fooの制御グループを作成します。同じファイルのセットが新しく作成されたディレクトリに表示されます。このディレクトリには、ディレクトリを作成してcgroupを作成し続けることができます。つまり、cgroupはディレクトリ構造と同じくらい階層的になることができます。各サブシステムでドットディレクトリをマウントすることは、ルートディレクトリと同じです。それぞれ異なるパスは、異なるcgroupを表します。異なるサブシステムでは、同じパスが同じ制御グループを表します。例えば、使用することができ、両方のfoo /barディレクトリのCPU、メモリ/FOO /バーは、CPU、メモリ2つのサブシステムを運営しました。同じサブシステムの場合、各プロセスは1つのcgroupに所属し、1つのcgroupにのみ所属します。デフォルトはルートcgroupです。階層によって制御グループの編成と管理が容易になります構成項目によっては、階層もリソース割り当てに関連します。あるいは、root以外のユーザーも特定のセキュリティグループを操作できるように、ディレクトリの所有者を変更できます。

cgroupの設定と読み込みはそれらのファイルを読み書きすることで行われます。例えば

のコードは次のとおりです。

#「は/sys/fs/cgroup/cpu/foo/cpu.shares

コントロール群の/fooというCPUを置く2048年をエコー。 sharesパラメーターは2048に設定されています。

前述のとおり、一部のファイルはすべてのディレクトリに共通です。これらは一般的な設定です。その中で、タスクとcgroups.procsは、制御グループ内のプロセスを管理するために使用されます。プロセスをコントロールグループに追加するには、pidを適切なディレクトリのタスクファイルに書き込みます。

のコードは次のとおりです。5678 /fooの対照群を置く

#は5678エコー「/SYS /FS /cgroup内/CPU /fooの/タスク

は、プロセスに追加されます。それでは、タスクとcgroups.procsの違いは何ですか?上記の「プロセス」に対する管理上の制限は、実際には十分に正確ではありません。システムがタスクをスケジュールする単位はスレッドです。ここで、タスクに表示されるのはスレッドIDです。 cgroups.procsはスレッドグループIDです。これはプロセスIDとも呼ばれます。タスクのみPID対応するスレッド、ならびにそれによって生成された他のプロセスに書き込まれた一般的なPID制御グループのスレッドに属し、他のスレッドは、元ではありません。 cgroups.procsに書き込むと、現在のすべてのスレッドが追加されます。書き込みcgroups.procsは、スレッドグループIDが、一般的なスレッドIDでない場合は、自動的に参加するために、対応するスレッドグループIDを検索します。プロセスが制御グループに参加すると、その制御グループに対応する制限がただちに有効になります。プロセスがどのコントロールグループに属しているかを調べるには、cat /proc /"pid" /cgroupで確認できます。

プロセスをコントロールグループの外に移動するには、pidをルートcgroupのタスクファイルに書き込みます。各プロセスは1つのcgroupに属し、1つのcgroupのみに属しているため、新しいcgroupが追加されると、元の関係は解放されます。 cgroupを削除するには、rmdirを使用して対応するディレクトリを削除します。削除する前に、あなたがそれらをプロセスから撤退させなければなりません。しかし、対応するサブシステムのリソースが、それ以外の場合は削除することはできません、リリースされています。

以前は、cgroupはファイルシステムアクセスを通じて操作されていました。実際、一連のコマンドラインツールもあります。

lssubsys -amは、サブシステムのマウントポイントを表示だけでなく、&'のセットすることができます。CG'コマンドの先頭には、管理するために使用することができます。一部のサブシステムでは、cgexecを使用してプログラムを指定の制御グループで直接実行できます。 cgexec -g' CPU、blkio:/fooの'のbash。他のコマンドや特定のパラメータは、人が見ることができます。

は、ここでは、bash cgexecのバージョンであるのcgroupの使用を示し、また、インストールコマンドラインツールかどうかの不確実性の場合に使用することができます。

コードは次のとおりです。

#! /bin /bash "/p" "p"#使用法:

#。 /cgexec.sh CPU:G1、メモリ:G2 /G21睡眠100 "/P" "P" blkio_dir =' /SYS /FS /cgroup内/blkio'

memory_dir =' /SYSの/fsの/cgroup内/メモリ'

cpuset_dir =' /SYS /FS /のcgroup /cpusetの'

perf_event_dir =' /SYS /FS /cgroup内/perf_event'

freezer_dir = ' /SYS /FS /cgroup内/冷凍庫'

net_cls_dir =' /SYS /FS /cgroup内/net_cls'

cpuacct_dir =' /SYS /FS /のcgroup /cpuacct' < BR>

cpu_dir =' /SYS /FS /cgroup内/CPU'

hugetlb_dir =' /SYS /FS /cgroup内/たhugetlb'

devices_dir =' /SYS /FS /cgroup内/デバイス' "/P" "P" グループ=' $ 1と'

シフト "/P" "P" IFS =‘、’ g_arr =($グループ)

$ {g_arr [@]}におけるG用、
を行う

IFS =‘:’ g_info =($ gで)

[$ {#1 g_info [] @}もし-ne 2];その後、

エコー'悪い引数$ G'「&#038; 2
は、


続けますFiの

g_name = $ {g_info [0]}

g_path = $ {g_info [1]}

もし' $ g_path' ==' $ { g_path#/}'];その後、

g_path =' /$ g_path'

Fiの

エコー$ g_name $ g_path

VAR =' $ {g_name} _ディレクトリ>

d = $ {! VAR}

もし[-z' $ D'];その後、

エコー'悪いCG名$ g_name'「&#038; 2
は、


<続けますP> Fiの

パス=' $ {D} $ {} g_path'

もし[! -d' $ path']; then

echo' cgが存在しません。 $$')<quo; $ {path} /tasks'

done "/p" "p" exec $ *

上記はLinux cgroupの説明です。機能、この記事はあなたがより多くのcgroupをお知りになりたい場合は、サイトのホームシステムにご期待ください、いくつかのcgroupの基本を説明します。

Copyright © Windowsの知識 All Rights Reserved