VyOS向け低レイテンシーチューニングTips

すっかり冬模様になりましたね。
雪遊びの準備が全然できてないので、早く仕事を落ち着かせたい今日この頃です。

2015年はKauliが買収されたり、ご自慢のVOYAGEオフィスから締め出されたり、その後転職といろいろありました。
来年は落ち着いた一年になることを心から願っています。

さて久々に糞エントリーを書くのとadvent calendarということもあり、ふわっとゆるい内容でいきたいと思います。

VyOS向けとありますが、VyOS自体DebianなのでLinux全般で使えるTipsです。
低遅延になって何がうれしいかというと、VoIPで音声通話がよりリアルタイムになったり、ネットゲームで有利になったり、VyOSで超高速取引をしてる個人投資家が有利になるとかいい事尽くめです(?)

本来の目的は10Gbps 64byteのショートパケットで、ワイヤレートをだすLVSを作る予定だったんですが、VOYAGEの経営陣に取り潰されたネタです。

チューニングすべき箇所はキューやバッファですが、それぞれネットワークスタックやデバイスコンポーネントの一部として構成されています。
それらのデフォルトの設定はスループット向上や、CPU負荷低減などシステムや回線の利用効率向上に一役かっています。
しかし逆に何をしてもいいから1ナノセックでも早くパケットを処理し送り出したい、そんな要求も世の中にはあります。
今回はそんな人むけです。
なおソケットなどユーザランドは考慮しません。
あくまでルータとしてNICとカーネルまでです。

リングバッファを少なくする

リングバッファはCPUがオンデマンドで処理できない時のために、バッファ領域としてごく小さいメモリ空間として存在しています。
理想はないほうがいいし、あったとしてもメモリ空間なのでレイテンシを気にする場合は効率的に使う必要があります。
リングバッファサイズを小さくすることでヘッドポインタとテールポインタを追跡する処理やガベージコレクトのロスを減らすことができます。
レイテンシを目的とするなら最小値に設定しましょう。

RSSのキューイング先(CPUコア)を固定する

CPUのキャッシュが効率的に使えます。
ntupleとFlow Directorによって、通信条件を指定してRSSのキューイング先を指定できます。

NICのInterrupt Coalescingを無効にする

過大なCPU割り込みを軽減するために、NICはパケットを受信してもすぐ割り込みを発生させません。
特定のパケット数がたまるまで待つ設定がデフォルトでされています。
オフにすればオンデマンドで割り込みが発生し遅延しません。
ただしバーストトラフィックには注意してください。
バースト分がCPUに直撃します。

EISTとC-STATEをオフにする

CPUクロックの変化がレイテンシに悪影響を与えるため、EISTと各C-STATEをすべて無効にします。

・PCIe Link State Power Managementをオフにする

CPU同様にPCI Expressも全力で稼動させます。

NICオフロードについては未調査のため今回はスルーします。
では皆様よいお年を!
(このやっつけ感)

コメントを残す

メールアドレスが公開されることはありません。


*