読者です 読者をやめる 読者になる 読者になる

うまいぼうぶろぐ

linuxとhttpdとperlのメモ

10Gbe環境でのdrbd設定tuning - 特にmax-buffersとmax-epoch-size

linux drbd


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;
  }
}