Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxについて >> Linuxディスクの管理にcgroupsを使う

Linuxディスクの管理にcgroupsを使う

  

Linuxシステムのcgroupsを使ってcpuリソースを管理できることはよく知られていますが、興味があればXiaobianがcgroupsを使ってプロセスディスクioを管理する方法を紹介します。見てみましょう。

この機能はblkioサブシステムによって達成されます。

blkioサブシステムにはたくさんのことがあります。ただし、それらのほとんどは読み取り専用のステータスレポートで、書き込み可能なパラメータは次のとおりです。

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

blkio.throttle.read_bps_device

blkio。 Throttle.read_iops_device

blkio.throttle.write_bps_device

blkio.throttle.write_iops_device

blkio.weight

blkio.weight_device

両方ともディスクioのプロセスを制御するために使用されます。明らかに2つのカテゴリに分けられます。名前が示すように「スロットル」とは、フローを特定の値に制限するためのスロットルです。そして、 "weight"はioに割り当てられた重みです。

' throttle' 4つのパラメータは、名前を見て何をすべきかを判断します。 1秒間に読み取ることができるバイト数を制限するには、blkio.throttle.read_bps_deviceを使用します。最初にioを実行します。

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

dd if = /dev /sda = = /dev /null&

[1] 2750

iotopを使用して、現在のio

コードを次のように表示します。

TID PRIOユーザーディスク読み取りディスク書き込みスワップIO "コマンド

2750 be /4 root 66.76 M /s 0.00 B /s 0.00%68.53%dd = /dev /sda /= /dev /nullの場合

。 。 。

次に、リソース制限を変更してプロセスをコントロールグループに追加します。

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

echo‘ 8:0 1048576’” /sys /fs /cgroup /blkio /Foo /blkio.throttle.read_bps_device

echo 2750> /sys /fs /cgroup /blkio /foo /tasks

ここで、8:0は対応するブロックデバイスのメインデバイス番号とサブデバイスです。いいえls -lデバイスファイル名で表示できます。例えば、

コードは次のようになります。

#ls -l /dev /sda

brw-rw ----。 1ルートディスク8、0 Oct 24 11:27 /dev /sda

ここで、8、0は対応するデバイス番号です。そのため、cgroupはデバイスごとに異なる制限を課すことがあります。次に効果を見てみましょう。

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

TID PRIOユーザーディスクREAD DISK WRITE SWAPIN IO "コマンド

2750 be /4 root 989.17 K /s 0.00 B /s 0.00%96.22%dd if = /dev /sda /= /dev /null

。 。 。

1秒あたりのプロセスの読み取り値が約1MBに低下していることがわかります。制限を解除するには、ファイルに< 8:0 0>と書き込みます。ただし、この方法は、サンプリング間隔内に大量のioが生成される場合には役に立ちません。たとえば、1秒間に毎秒100Mのピークを生成しても、それは制限されません。

もう一度blkio.weightを見てください。 Blkioのスロットルとウェイトの方法は、cpuサブシステムのクォータとシェアに少し似ていますが、どちらも絶対的な制限であり、もう1つは相対的なもので、忙しくないときはリソースを完全に利用できます。; 1000の間

ウェイトのテストはもう少し面倒です。これは絶対的な制限ではないため、ファイルシステムのキャッシュの影響を受けます。仮想マシンでテストしている場合は、ホストで使用しているVirtualBoxなどの仮想マシンのキャッシュを無効にする必要があります。 ioを読むことの効果をテストするために、氏は2つのG /tmp /file_1、/tmp /file_2の大きいファイルです。これはddで実行できます。次に、2つの重みを設定します。

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

#echo 500》 /sys/fs/cgroup/blkio/foo/blkio.weight

#echo 100》 /sys /fs/cgroup/blkio/bar/blkio.weight

テスト結果を妨げないように、テストの前にファイルシステムのキャッシュを空にします。

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

sync

echo 3》 /proc /sys /vm /drop_caches

これら2つのコントロールグループでテスト結果を生成するにはddを使います。

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

#cgexec -g' blkio:foo' dd if = /tmp /file_1 /= /dev /null&

[1] 1838

#cgexec -g< blkio:bar' dd if = /tmp /file_2 /= /dev /null&

[2] 1839

まだiotopを使用している効果を見てください。

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

TID PRIOユーザーディスク読み取りディスク書き込みスワップIO "コマンド

1839 be /4 root 48.14 M /s 0.00 B /s 0.00% 99.21%dd if = /tmp /file_2 of = /dev /null

1838 be /4 root 223.59 M /s 0.00 B /s 0.00%16.44%dd if = /tmp /file_1 of = /dev /Null

2つのプロセスで1秒間に読み取られるバイト数は常に変化していますが、一般的な傾向は1:5前後で、設定された重み付け比と一致しています。 Blkio.weight_deviceはサブデバイスです。書き込むときは、先頭にデバイス番号を追加してください。

blkioサブシステムには多くの統計情報があります。

blkio.time

io各デバイスについてアクセス時間(ミリ秒)

blkio.sectors

着信または発信デバイスのセクタ数

blkio.io_serviced

実行されたIO操作の種類、サブ読み取り、書き込み、同期、非同期、および合計

Blkio.io_service_bytes

ioチェンジャーの各タイプまたは各デバイスからバイト数

blkio.io_service_time

各デバイスでの実行マイクロ秒単位のio時間の各タイプ

Blkio.io_wait_time

デバイス内のキュー内の各タイプのioの待機時間

blkio.io_merged

各タイプのio要求が各デバイスでマージされた回数

blkio.io_queued

各タイプのキューに現在入っているio要求の数_

統計およびこれらの統計によるプロセスのioステータスの監視

次のように

コードを使用してください。 :

echo 1 "blkio.reset_stats

すべての統計を消去できます。

Linuxでcgroupsを使用してプロセスディスクioを管理する方法プロセスディスクioを管理する場合はblkioサブシステムを使用しますので、プロセスディスクioを制限して監視することができます。それですか?

Copyright © Windowsの知識 All Rights Reserved