10Gbe環境でのdrbd設定tuning - 特にmax-buffersとmax-epoch-size
version: drbd 8.4.6, drbd-utils 8.9.3
きっかけ
10Gbase-SR で接続してc-max-rate, rate で1000M, 300M (MByte/sec) などにしても実際の速度が80MByte/sec ぐらいしか出なかった。
# cat /proc/drbd ## 抜粋 [>....................] sync'ed: 0.2% (15821036/15843036)M finish: 107:11:55 speed: 41,968 (44,784) want: 1,024,000 K/sec
容量16TBで107時間。待ってられねぇ!と思って調べた。
顕著に効果が出たのはmax-buffersとmax-epoch-size (上のURLだと2つは同じ値で良さそう)
The default for both is 2048; setting it to around 8000 should be fine
for most reasonably high-performance hardware RAID controllers.
同期速度はほぼこの値に比例した。 sndbuf-size、al-extents はあまり変化なかった。
max-buffers(max-epoch-size) | sync speed (MByte/sec) | 10TB 同期に必要な時間(hour) | |
2048(default) | 42.9 | 64.75 | |
4000 | 81.7 | 34.00 | |
8000 | 163.7 | 16.97 | |
12000 | 243.2 | 11.42 | |
16000 | 323.4 | 8.59 | |
20000 | 402.1 | 6.91 |
ちなみに20000を超えた数字でreloadしたら。。。
Reloading DRBD configuration: drbd.d/global_common.conf:20: max-epoch-size 30000 => 30000 out of range [1..20000].
となったので20000が上限のようだ。
あとはネットワーク環境や負荷状況に応じて設定値は適当に調整。
- クロスで繋いでいて帯域をDRBD用途で占有してもいいか
- スイッチ経由で他の環境と共存しているから控えめにするか
など
まとめ
上のURLで記載されているところを抜粋して、変更した内容はこんな感じ
(10Gbps環境)
syncerのrate等の単位はbitじゃなくてbyteなことに注意する。
common { ## その他の設定は省略 net { protocol C; max-buffers 20000; max-epoch-size 20000; sndbuf-size 0; } syncer { c-plan-ahead 0; c-max-rate 300M; c-min-rate 100M; rate 300M; al-extents 3389; } }