このトピックでは、Alibaba Cloud Linux 2 または 3 の /proc/sys/vm/ ディレクトリにあるパラメータファイルを修正して、システムダーティページのしきい値とライトバック制御を微調整する方法について説明します。
背景情報
Linux では、ページキャッシュはファイルシステムの読み取りおよび書き込み操作(バッファ I/O)をキャッシュするために使用されます。 データは最初にページキャッシュに書き込まれ、その後、特定の時間にライトバック操作によって不揮発性ストレージに書き込まれます。 まだライトバックされていないページキャッシュは、ダーティページと呼ばれます。 ダーティページの最適なレベルを維持するために、システムは定期的にライトバック操作を実行するか、ダーティページのレベルが上限に達したときにライトバック操作を開始します。
サポートされているオペレーティングシステム
Alibaba Cloud Linux 2
Alibaba Cloud Linux 3
ダーティページのしきい値
説明
ダーティページのレベルが以下の範囲のいずれかに該当する場合、異なるしきい値が適用されます。
```
(バックグラウンド ライトバック)
フリーラン | ソフトスロットル | ハードスロットル
-------------+---------------+---------------+------------>
^ ^ ^ ダーティページ
dirty_background_thresh free_run dirty_thresh
```フリーラン
システム内のダーティページのレベルが
free runしきい値(free run = (dirty_background_thresh + dirty_thresh)/2))よりも低い場合、ダーティページをキャッシュに書き込む速度は制限されません。 この場合、システムは定期的にバックグラウンドライトバックタスク(kupdate)を実行して、ダーティページのレベルを制御します。ソフトスロットル
システム内のダーティページのレベルが
free runしきい値を超えると、新しいダーティページの蓄積を抑制し、ダーティページのレベルを制御するために、ダーティページをキャッシュに書き込む速度が制限されます。 ソフトスロットル範囲は、dirty_threshパラメータによってハードスロットル範囲から分離されます。ソフトスロットリングは、ダーティページのレベルが
free runしきい値を超えていても、dirty_threshしきい値を下回っている場合に発生します。 この場合、ファイルシステムによって書き込まれているダーティページの数が、ファイルシステムのダーティページクォータを超えている場合にのみ、ダーティページをキャッシュに書き込む速度が制限されます。 各ファイルシステムのダーティページクォータは、一定期間におけるシステム全体のライトバック帯域幅に対するファイルシステムの平均ライトバック帯域幅の割合を計算し、その割合にthreshパラメータで定義されたしきい値を掛けて算出されます。ハードスロットル
ハードスロットリングは、システム内のダーティページのレベルが
dirty_threshパラメータで定義されたしきい値を超えた場合に発生します。 この場合、データの書き込み速度が大幅に制限されます。
ダーティページのしきい値を設定する
システム内のダーティページのレベルは、thresh パラメータと dirty_background_thresh パラメータで定義されたしきい値によって共同で制御されます。
dirty_background_thresh
/proc/sys/vm/dirty_background_bytes パラメータまたは /proc/sys/vm/dirty_background_ratio パラメータを使用して、dirty_background_thresh パラメータの値をしきい値として設定できます。
/proc/sys/vm/dirty_background_bytes:dirty_background_threshパラメータの値をバイト単位で指定します。/proc/sys/vm/dirty_background_ratio: システム内の使用可能なメモリ全体の割合をdirty_background_threshパラメータの値として指定します。
/proc/sys/vm/dirty_background_bytes パラメータと /proc/sys/vm/dirty_background_ratio パラメータのうち、一度に有効になるのは1つだけで、もう一方は 0 に設定されます。 sysctl を使用して上記のいずれかのパラメータを設定すると、もう一方のパラメータは自動的に 0 に設定されます。 dirty_background_thresh パラメータのデフォルト値は、システム内の使用可能なメモリ全体の 10% です。
dirty_background_bytesパラメータを使用してしきい値を指定します。dirty_background_bytesパラメータをクエリします。sysctl -n vm.dirty_background_bytesdirty_background_bytesパラメータを設定します。<value>を目的の値に置き換えます。 単位:バイト。sudo sysctl -w vm.dirty_background_bytes=<value>
dirty_background_ratioパラメータを使用して、システム内の使用可能なメモリ全体の割合をしきい値として指定します。dirty_background_ratioパラメータをクエリします。sysctl -n vm.dirty_background_ratiodirty_background_ratioパラメータを設定します。<percent>を目的の値に置き換えます。 単位:パーセント(%)。 例:20。sudo sysctl -w vm.dirty_background_ratio=<percent>
dirty_thresh
/proc/sys/vm/dirty_bytes パラメータまたは /proc/sys/vm/dirty_ratio パラメータを使用して、thresh パラメータの値をしきい値として設定できます。
/proc/sys/vm/dirty_bytes:threshパラメータの値をバイト単位で指定します。/proc/sys/vm/dirty_ratio: システム内の使用可能なメモリ全体の割合をthreshパラメータの値として指定します。
/proc/sys/vm/dirty_bytes パラメータと /proc/sys/vm/dirty_ratio パラメータのうち、一度に有効になるのは1つだけで、もう一方は 0 に設定されます。 sysctl を使用して上記のいずれかのパラメータを設定すると、もう一方のパラメータは自動的に 0 に設定されます。 thresh パラメータのデフォルト値は、システム内の使用可能なメモリ全体の 20% です。
/proc/sys/vm/dirty_bytesパラメータを使用してしきい値を指定します。dirty_bytesパラメータをクエリします。sysctl -n vm.dirty_bytesdirty_bytesパラメータを設定します。<value>を目的の値に置き換えます。 単位:バイト。sudo sysctl -w vm.dirty_bytes=<value>
/proc/sys/vm/dirty_ratioパラメータを使用して、システム内の使用可能なメモリ全体の割合をしきい値として指定します。dirty_ratioパラメータをクエリします。sysctl -n vm.dirty_ratiodirty_ratioパラメータを設定します。<percent>を目的の値に置き換えます。 単位:パーセント(%)。 例:20。sudo sysctl -w vm.dirty_ratio=<percent>
バックグラウンドでの定期的なライトバック
システム内のダーティページのレベルが free run しきい値(free run = (dirty_background_thresh + dirty_thresh)/2))よりも低い場合、ダーティページをキャッシュに書き込む速度は制限されません。 この場合、システムは定期的にバックグラウンドライトバックタスク(kupdate)を実行して、ダーティページのレベルを制御します。
dirty_writeback_centisecs
/proc/sys/vm/dirty_writeback_centisecs パラメータは、定期的なライトバックタスクが実行される間隔を指定します。 単位:センチ秒。 値 0 は、定期的なライトバックタスクが無効になっていることを示します。 デフォルト値:500。これは、定期的なライトバックタスクが 5 秒間隔で実行されることを示します。
dirty_writeback_centisecsパラメータをクエリします。sysctl -n vm.dirty_writeback_centisecsdirty_writeback_centisecsパラメータを設定します。<value>を目的の値に置き換えます。sudo sysctl -w vm.dirty_writeback_centisecs=<value>
dirty_expire_centisecs
定期的なライトバックタスクは、ライトバック操作を選択的に実行し、タイムアウトしたダーティページのみを対象とします。最初のダーティページがファイルに書き込まれてから一定期間が経過しても、ダーティページがファイル内にまだ存在する場合、ファイルはタイムアウトしたとみなされます。 定期的なライトバックタスクは、これらのタイムアウトしたダーティページに対してライトバックを実行します。
/proc/sys/vm/dirty_writeback_centisecs パラメータは、タイムアウト期間を指定します。 単位:センチ秒。 デフォルト値:3,000。これは 30 秒に相当します。
dirty_expire_centisecsパラメータをクエリします。sysctl -n vm.dirty_expire_centisecsdirty_expire_centisecsパラメータを設定します。sudo sysctl -w vm.dirty_expire_centisecs=<value>