为什么在ECS系统内部使用dpdk时,出现了网络中断?
华为云ECS底层支持多种类型网卡,因此,不同云服务器底层的网卡队列深度可能不同。
如果在配置dpdk时设置了固定的队列深度参数值,则可能导致底层网卡队列深度与dpdk配置不一致。在云服务器运行过程中,如果前端dpdk程序没有足够的mbuf来容纳后端填充的报文,会导致网络出现带宽大幅下降,甚至网络中断的情况。
因此,在使用dpdk网络技术时,需要动态获取云服务器底层的网卡队列深度,并基于该队列深度配置dpdk,从而避免云服务器在网卡队列深度发生变化时,出现网络中断。
获取网卡队列深度的示意代码如下:

- 软件队列(如rte_ring):使用rte_ring_get_capacity(ring)获取队列容量。
- 实时可用描述符数量:通过rte_eth_rx_queue_count(port_id, queue_id)获取当前可用的接收描述符数量。
建议查阅DPDK官方文档及网卡驱动手册以确认兼容性。