VPP buffer不足

1666 ワード

げんしょう


VPPは転送時に、何かあったらパケットを失う.また、コマンドライン入力vppctl show errorのときにノードno available bufferの文字が表示されます.あるいはshow interfaceの時にout of bufferなどの文字が現れます.説明はbuffer不足によるパケット損失かもしれません.

デバッグ


コマンドライン入力vppctl show buffersでavailフィールドが0になったかどうかを確認します.0なら利用可能なbufferはありません.次のようにAvailフィールドは0です
vpp# show buffers 
Pool Name            Index NUMA  Size  Data Size  Total  Avail  Cached   Used  
default-numa-0         0     0   2496     2048    16800    0       0     16800 
default-numa-1         1     1   2496     2048    16800  16800     0       0  

現在、この問題の原因はいくつかある可能性がある.主に起動プロファイルstartupを調整する.conf,起動dpdk項目ではnum-rx-queues 4やnum-tx-queues 4などのフィールドがbuffer占有に影響し,このキューの数値が大きいほど占有するbufferが多くなる.適当に小さくしてみてもいいです.bufferのスペースを大きくすることもできます.私が使っているVPPバージョンは19.04 releaseバージョンで、startup.confに以下の内容を追加し、数値は自分で調整できます.
buffers
{
    buffers-per-numa 30000
}

VPPのバージョンの更新は比較的速いですが、資料の更新が遅いので、多くの資料のパラメータが適用されない可能性があります.私も異なるバージョンが適用できることを保証しません.主な考え方は自分のバージョンに対応するVPPソースコードを見て、src\vlib\buffer.cディレクトリを見つけて、vlib_buffers_configure bufferモジュールの配置関数を見て、例えば私のこのバージョンコードは以下で、コマンドラインを解析する時、解析キーワードbuffers-per-numaがあるので、buffers-per-numaを使ってstartupに追加してみることができます.confファイルでデバッグします.
while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT)
    {
      if (unformat (input, "buffers-per-numa %u", &bm->buffers_per_numa))
	;
      else if (unformat (input, "default data-size %u",
			 &bm->default_data_size))
	;
      else
	return unformat_parse_error (input);
    }