vfs_aio_ratelimit — Samba用の非同期I/Oレートリミットの実装
vfs objects = aio_ratelimit
この VFS モジュールは samba(7) システムの一部である。
aio_ratelimit VFSモジュールは、非同期 I/O 操作に
上限を適用することで、特定の共有に対する実行時のレート制限を有効にする。
管理者は、この制限を 1 秒あたりの操作数または 1 秒あたりのバイト数と
して定義できる。これらの制限の 1 つを超えると、現在の I/O 負荷に基づいて
遅延値(マイクロ秒)が計算され、非同期 I/O 操作に追加され、
暗黙のスループット上限が生成される。
設定可能なバースト許容値は、バースト乗数を介してサポートされ、 長期的な上限を実施しながら、定常状態のレートを超える短期バーストを 可能にする。レートリミッタの状態は定期的にローカル TDB に保持されるため、 クライアントの再接続と smbd の再起動にわたって一貫して制限を適用できる。
このモジュールは非同期 VFS READ/WRITE 操作のみで動作する。
このモジュールはスタック可能である。
遅延を挿入するまでの 1 秒当たりのREAD操作の上限。 0 は制限がないことを意味する。
既定値: 0, Max: 1000000
例: aio_ratelimit:read_iops_limit = 1000
遅延を挿入する前のREAD帯域幅の上限(バイト/秒)。 0 は制限がないことを意味する。サイズ接尾辞(K, M, G, T)が サポートされる。
既定値: 0, Max: 1T
例: aio_ratelimit:read_bw_limit = 2M
READ操作のバースト乗数。10 分の 1 で表現する(例:15=1.5x)。 トークンバケット容量をレート制限の倍数として定義し、 定常状態のレートを超える短期間のバーストを許可する。
既定値: 15 (1.5x), Max: 100 (10x)
例: aio_ratelimit:read_burst_mult = 20
遅延を挿入するまでの1秒当たりの書込み操作の上限。 0 は制限がないことを意味する。
既定値: 0, Max: 1000000
例: aio_ratelimit:write_iops_limit = 1000
遅延を挿入する前のWRITE帯域幅の上限(バイト/秒)。 0 は制限がないことを意味する。サイズ接尾辞(K, M, G, T)が サポートされる。
既定値: 0, Max: 1T
例: aio_ratelimit:write_bw_limit = 1M
10分の1で表される書き込み操作のバースト乗数(例:15=1.5x)。 トークンバケット容量をレート制限の倍数として定義し、 定常状態のレートを超える短期間のバーストを許可する。
既定値: 15 (1.5x), Max: 100 (10x)
例: aio_ratelimit:write_burst_mult = 15
read_burst_multおよびwrite_burst_mult
パラメータは、設定されたレート制限に関連するレートリミッタの最大
バーストキャパシティを制御する。有効バーストキャパシティは、
次のように計算される。rate_limit * (burst_mult / 10)。
たとえば、read_iops_limit = 1000と
read_burst_mult = 15では、バースト容量は
1000*1.5=1500 IOPSである。
これにより、設定された長期的な制限を適用しながら、定常状態のレートを 超える短期的なI/Oバーストが可能になる。
適切なバースト乗数は、ワークロードの特性によって異なる。非同期 I/O リクエストが大きいワークロードや変化しやすいワークロードでは、 早すぎるスロットリングを回避するために、より高いバースト値が必要に なる場合がある。一方、より小さいワークロードや待機時間の影響を 受けやすいワークロードでは、より低い値が有効な場合がある。
read_burst_multとwrite_burst_multの
パラメータは、長期的な平均スループットを変化させず、それぞれ
read_iops_limit/read_bw_limitと
write_iops_limit/write_bw_limit
によって制限されたままである。より高いバースト値は、初期の加速と
アイドル期間からの回復にのみ影響する。