dpdk入门实践6——L2fwd二层通信和l3fwd三层通信

DPDK从网卡直接取数据到用户空间,需要有数据转发的规则才能通信。也就是说需要用户实现相关通信网络协议实现相关数据包的转发(有些协议栈不转发ICMP报文那就Ping不通),例如腾讯的fstack,爱奇艺的DPVS等。这里仅以简单的2层和3层通信实例。

l2fwd Sample

运行

./build/l2fwd  -l 0-3 -n 4 -- -q 8 -p 0x03  
或者   
./build/l2fwd  -cf -- -p 0x03 --no-mac-updating //不启动MAC地址更新

其中

  • l是使用的核,n是Number of memory channels,不知道是个啥,好像填几都可以,看不出差别。
  • --前面的参数是dpdk程序通用参数,后面的是该程序专用参数,其中
  • q是number of queue (=ports) per lcore (default is 1),这里我理解为一个lcore来轮询几个端口。应该不是端口数量,因为我的环境是绑定了两个网卡,我填到15都可以,到16就不行了,因为代码里规定了最大值。
  • p是PORTMASK: hexadecimal bitmask of ports to configure,这里我理解为配置的端口的16进制掩码,例如我使用了两张网卡,所以这里是0x03.如果我填0xffff就不行,程序会报错并给你个参考数值

关于处理队列

对于每个端口来说,只有一个RX队列(only one lcore is able to poll a given port). TX队列数量基于可用的lcores. 可以使用rte_eth_dev_configure() 函数来配置每个端口的队列数。该应用程序使用一个lcore来轮询一个或多个端口,这取决于-q选项,它指定每个lcore的队列数。例如,如果用户指定了-q4,则应用程序能够用一个lcore轮询四个端口。如果目标上有16个端口(如果端口掩码参数是-pffff),则应用程序将需要4个lcore来轮询所有端口。

每个lcore都应该能够在任何端口上传输。对于每个端口,都将初始化单个TX队列。

关于加载虚拟sriov网卡

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值