VPP buffer不足

現象

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_configurebuffer模塊的配置函數,例如我這個版本代碼是下面,解析命令行時,有解析關鍵字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);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章