dullwhaleのメモ帳

何度も同じことを調べなくてよいように...

Cisco Catalyst 3650におけるバッファの仕組みとチューニング

Catalyst 3650でバッファ溢れを起こしてパケットが大量にドロップされていたからチューニングを行う必要があった。 バッファの仕組みと必要なチューニングについてメモする。

Main Memory領域とI/O Memory領域

まず、物理メモリDRAMCisco IOSの動作に使われるMain Memory領域とパケット処理に使われるI/O Memory領域に分割される。 Main Memory領域は通常気にしなくて良い。 これらの領域がどれぐらいの容量あるかは次のコマンドで確認できる

show version | include bytes of memory

例えば次のように表示された場合はMain Memory領域が845 MB、I/O Memory領域が6 MBである。

cisco ***** processor ***** with 864936K/6147K bytes of memory.

バッファの使われ方の理解に必要なルーティング処理の種類

Catalyst 3650のルーティングは大きく次の2つに分類できる。

  • CEF(cisco express forwarding)
  • process switching

CEFが優先され、CEFを使えない場合にprocess switchingが行われる。 CEFはinterfaceがpublic buffer poolsを利用せず、particle poolsだけを利用するためにメモリ利用効率が良い。 public buffer poolsとparticle poolsは後述する。

public buffer poolsとparticle pools

I/O Memory領域はさらにpublic buffer poolsとparticle poolsに分けて利用される。 public buffer poolsはpunt(cisco用語。CEFできず、より高度な処理のために高いレイヤの処理に持っていくこと)されるパケット及び、自発パケットが格納される。 particle poolsはinterfaceのパケット送受信に使われる。 各interfaceは送信(TX: transmitter)用と受信(RX: receiver)用のリングバッファを持っている。 このリングバッファはポインタに過ぎず、実体はparticle poolsにある。

トラブルシューティング

とりあえずshow buffersを実行してみる。 no memoryのカウンタ値が増えていたらメモリ確保に失敗したことを示している。 この場合は搭載する物理メモリを増やすか、メモリリークを疑う。

failuresカウンタがhitsカウンタに比べて大きいならばpublic buffer poolsのサイズが小さ過ぎるかもしれない。 ここで、public buffer poolsのサイズは自動拡張されることに注意が必要である。 あらかじめ確保しておくサイズがあまりに小さいと拡張が間に合わずにパケットがドロップされる。 Ciscoのドキュメントにはfailuresカウンタの値がhitsカウンタの0.1 %に満たないならば十分な大きさだと書かれている。

続いて各interfaceのバッファ溢れを疑う。 パケットがドロップされているinterfaceについて以下のコマンドを打つ。

show interface INTERFACE_NAME

出力のうち次の値が異常に大きければTXリングバッファの長さが小さ過ぎるかもしれない。

Total output drops:

現在のTXリングバッファの状態は次のように表示される。

Output queue: 0/40 (size/max)

TXリングバッファのサイズ変更

TXリングバッファの不足が原因でパケットがドロップされていると確定したら、コマンドでサイズを変更する。 まず、グローバルコンフィグレーションモードに入り、変更対象のinterfaceを選択する。

#configure terminal
(config)#interface GigabitEthernet1/0/1
(config-if)#

そして、次のコマンドでTXリングバッファの最大サイズを変更できる。 もちろん減らすこともできる。

(config-if)#hold-queue NUM out

例えば次のコマンドでTXリングバッファのサイズを100に変更する。

(config-if)#hold-queue 100 out

ここでoutの代わりにinを指定すればRXリングバッファの最大サイズを変更できる。

参考文献

日本語の解説スライドはここにある。

https://community.cisco.com/kxiwq67737/attachments/kxiwq67737/3886-docs-network-infrastructure/561/1/91758-Webcast_11052013.pdf

TXリングバッファ不足に関するQ&A

show interfaceのtotal output dropsカウントについて - Cisco Community

Cisco公式のバッファ周りの説明

すべての Cisco ルータのバッファ チューニング - Cisco

バッファの不足または失敗 - Cisco

Cisco公式のhold-queueコマンドの解説

Output Queue Overflow on an Interface - Cisco