複数の仮想マシンを実行するワークステーション(Intel XeonシリーズCPU 2個と128GiB RAM)があり、結合されたCPU使用率が30%未満であるのに対し、負荷平均は20~25です。たとえば、コマンドを実行すると、tar -xzvf vm_data.tgz --directory vm4/ --strip-components=1
プロセスはgzip
I / Oで90%から99%の間ブロックされ、コマンドの完了に時間がかかります。
一方、ディスクへの実際の読み書きは、SATA 3.0やSSDと比較して非常に低いです(私はシングルキングストン SA400S37960GSSD)ハードウェアの制限。
gzip
実際のディスクの読み取りと書き込みが非常に低いように見えますが、プロセス(私の例では)がI / Oの後に待機する原因は何ですか?私の最初の考えは、システム割り込みが非常に高く、I / Oがブロックされる理由かもしれませんが、/proc/interrupts
非常に急速に増加するカウンタがないのでそうではありません。
答え1
〜40Gを示すレポートから始めてください。無料覚えている(正確ではないことがわかっています。書くことができるメモリですが、高速で複雑な計算に40Gを使用しましょう。バッファ/キャッシュは12Gを占め、詳細は提供されていないのでダーティデータでいっぱいであることを認めます。
vm.dirty_ratioのデフォルト値は20%で、20%は40G = 8G < 12Gです。
あなたのシステムが独自に書き換えるコマンドプロセスの制限を超えて実行されているようです。つまり、問題ブロックする書いた。
次に、システムの実際の制限が何であるかを確認します。
$ sysctl -a | grep dirty
vm.dirty_ratioが実際にデフォルト値の場合は増やしてください。 (80%まで簡単に登ることができるので心配する必要はありません。私の記憶が正しい場合、Oracleは常にこの値をお勧めします。)
これにより、通常、デフォルト値が10の同伴エントリ(vm.dirty_Background_ratio)も下げることができます。低遅延システムでは、可能な限り低い値(1)を推奨し、個人的に3に設定しました。これにより、書き込みストアデーモンがより高速に動作するため、キャッシュがdirty_ratio固定制限を超える点が遅れます。
ディレクトリ構造の対応するエントリに値を反映することで一時的な変更を行うことができます/proc/sys/vm/
。これらの変更を永続的に適用するには(再起動後)、編集できます。/etc/sysctl.conf
これがプロセスのブロックの直接的な原因であり、デバイスへの書き込みが遅すぎて、キャッシュの埋め込みが dirty_ratio 制限を超える理由です。 artem-s-tashkinovの回答を参照してください。
答え2
数年前、私は本番MySQLデータベースで非常に似た問題に直面しました。ファイルが断片化されすぎてバックアップすると、他のすべてのディスク操作が完了していないことがわかりました。
次の出力を公開します。
find vm4 -type f | while read filename; do sudo filefrag "$filename" | egrep -v ": 1 extent|: 0 extents"; done | sort
この問題を解決するには、私の推測が正しい場合は、仮想マシンファイルの最適化を実行する必要があります。
答え3
Centos7(3.10.0.1062)からElRepo kernel-ml(5.11.6)に切り替えた後、これが見つかりました。書き込み保存速度が約10倍(2Mb/秒から20Mb/秒に)増加しましたが、Samsung NVMe 400Gドライブを使用していました。 2000Mb/sec以上を処理できるので、より良いと予想しました。その後、ext4マウントを「nodelalloc、dioread_nolock」に切り替え、書き込み保存速度が1500Mb /秒を超えました。 RAMが512GBでdirty_Background_ratio = 10、dirty_ratio = 20なので、中程度のサイズ(30〜50kb)ファイルが多い大容量フォルダを解凍すると、ダーティページが50GB以上に増えます(速度は約500Mb /秒、私のソースによって制限されます) 。 HDD RAID速度)突然書き込み保存は約35秒間1500 + Mb /秒で発生します。 35秒以上の書き込み保存期間中、tar操作はCPU 0%とIO 0%に低下しました。カーネルスレッドへの書き換え操作にはロックが必要です。これはtar書き込みシステム呼び出しでも必要です。この動作はCentos7(3.10.0.1062)ではまったく存在しません。
したがって、OPが説明する動作は実際ですが、最近導入されたようです。