密かに話題のBufferbloat
Linux Network Schedulerの最適化

おおかわ かずひと
Kauli, Inc.
Bufferbloatとは
不適切なネットワークキューイングや、過剰なバッファにより、
レイテンシーが悪化、または不安定な状態
さらにレイテンシーの悪化、揺らぎにより、
TCPの輻輳制御の混乱を招き、スループットの低下も起こる
全部LinuxのNetwork Schedulerが悪いんや…
LinuxのNetwork SchedulerのデフォルトはFIFO
Queueing Discipline
in

out
S
K
B

IP Stack

ap

db

S
K
B

S
K
B

S
K
B

S
K
B

S
K
B

S
K
B

NIC
Buffler

S
K
B
極端な例で問題点を説明
なにも考えないで順番にキューイングしているだけ
優先度、効率等は考慮されない
Queueing Discipline
in

out
S
K
B

IP Stack

S
K
B

S
K
B

S
K
B

S
K
B

S
K
B

S
K
B

NIC
Buffler

Low Latency

ap
p

db

S
K
B
High
Latency

S
K
B
同時に起こるNICのバッファサイズの問題
NICのバッファが大きいと・・・
Ring Buffer
バッファが大きいほどロスが増加

in
Queue

S
K
B
High
Latency

S
K
B

S
K
B

S
K
B

S
K
B

S
K
B

S
K
B

Low Latency

S
K
B

S
K
B

out
S
K
B

NIC
遅いもの、大きいものは処理に時間がかかる
速いもの、小さいものはその逆
しかも、後者の方が優先度高めのケースが多数

VoIPとかDNSとか
近年議論が活発になり、対策が続々と登場
アクティブキューイング (かっこいい!)
FIFOを廃止し、キューイングをさまざまな方法で制御
代表的なもの
CoDel (Controlled Delay)
RTTやプロトコル等を考慮して必要に応じて割り込む
Queueing Discipline
in

out
S
K
B

IP Stack

S
K
B

S
K
B

S
K
B

S
K
B

S
K
B

NIC
Buffler

Low Latency

ap
p

db

S
K
B
High
Latency

S
K
B
キューの制限をする
TCP small queues
Byte Queue Limits
このあたりで力尽きたからオチ
カーネルとOSは新しいに越したことないですね。。。
おわり
フランちゃんウフフなインフラエンジニアかもしれないよ

密かに話題のBufferbloat