现象
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);
}