声明:此文档只做学习交流使用,请勿用作其他商业用途
author:朝阳_tony
Last Change: 2013-7-29 10:25:19 Monday
转载请注明出处:http://blog.csdn.net/linzhaolove
此文请结合intel dpdk源码去阅读,源码可以去http://dpdk.org/dev 网页中下载;更多官方文档请访问http://dpdk.org
l2fwd 应该是 网络的L2 数据的转发功能;L2是数据链路层,以mac的地址作为区分数据源和目标地址;而这个l2fwd就时将网卡的数据进行转发;
$> ./build/l2fwd [EAL options] -- -p PORTMASK [-q NQ] -T PERIOD EAL options: -c COREMASK: A hexadecimal bitmask of cores to run on -n NUM : Number of memory channels -p PORTMASK : A hexadecimal bitmask of the ports to configure -q NQ: A number of queues (=ports) per lcore (default is 1) -T PERIOD: statistics will be refreshed each PERIOD seconds (0 to disable, 10 default, 86400 maximum) Example: $> ./build/l2fwd -c f -n 2 -- -q 1 -p 0x3
参数讲解:
-c f 指分配4个core给dpdk程序,这个参数是主参数,必须设定;
-n 2 指内存通道数
-- 由于程序有主次参数之分,主参数是在指所有实例程序都可以用的参数;次参数,是指每个实例程序自身拥有的参数, -- 之后的为次参数;
-p 0x3 设置dpdk起点的端口数,也是以16进制的源码作为标志位, 0x3是指 后两位为1,也就是起点两个端口;
-q 1 是只每个端口所拥有的的发送和接收队列是多几个,默认是1个,也就是收在一个队列中收,发在一个队列中发;
-T 在执行程序的时候,会有一些统计数据打印到屏幕上,这个的 参数是设定多长时间统计一次,显示到屏幕,模式是10秒钟一次;
待续……
待续……
我目前使用的是linux 自带的发包工具pktgen ;网上有很多pktgen发包工具的教程,这我就不讲它的使用了;
首先要挂载pktgen;
$ > modprobe pktgen
编写自己的pktgen 脚本;
#!/bin/sh # pktgen.conf -- Sample configuration for send on two devices on a UP system #modprobe pktgen #modprobe pktgen function pgset() { local result echo $1 > $PGDEV result=`cat $PGDEV | fgrep "Result: OK:"` if [ "$result" = "" ]; then cat $PGDEV | fgrep Result: fi } function pg() { echo inject > $PGDEV cat $PGDEV } # On UP systems only one thread exists -- so just add devices # We use eth1, eth2 echo "Adding devices to run". PGDEV=/proc/net/pktgen/kpktgend_0 pgset "rem_device_all" pgset "add_device eth1" pgset "max_before_softirq 10000" #pgset "add_device eth1" # Configure the individual devices echo "Configuring devices" PGDEV=/proc/net/pktgen/eth1 #pgset "delay 0" pgset "clone_skb 1000000" pgset "pkt_size 60" #pgset "min_pkt_size 60" #pgset "max_pkt_size 60" #pgset "min_pkt_size 92" #pgset "max_pkt_size 92" pgset "src_mac e4:1f:13:68:a7:06" pgset "dst_mac e4:1f:13:68:a7:04" pgset "count 10000000" # Time to run PGDEV=/proc/net/pktgen/pgctrl echo "Running... ctrl^C to stop" pgset "start" echo "Done" cat /proc/net/pktgen/eth1
打印输出我偶的测试结果;
cat /proc/net/pktgen/eth1
# ./pktgen.sh Adding devices to run. Configuring devices Running... ctrl^C to stop Done Params: count 10000000 min_pkt_size: 60 max_pkt_size: 60 frags: 0 delay: 0 clone_skb: 1000000 ifname: eth1 flows: 0 flowlen: 0 queue_map_min: 0 queue_map_max: 0 dst_min: dst_max: src_min: src_max: src_mac: e4:1f:13:68:a7:06 dst_mac: 00:16:31:ff:d0:74 udp_src_min: 9 udp_src_max: 9 udp_dst_min: 9 udp_dst_max: 9 src_mac_count: 0 dst_mac_count: 0 Flags: Current: pkts-sofar: 10000000 errors: 0 started: 79696343012us stopped: 79707271930us idle: 2185875us seq_num: 10000001 cur_dst_mac_offset: 0 cur_src_mac_offset: 0 cur_saddr: 0x7d03a8c0 cur_daddr: 0x0 cur_udp_dst: 9 cur_udp_src: 9 cur_queue_map: 0 flows: 0 Result: OK: 10928918(c8743042+d2185875) usec, 10000000 (60byte,0frags) 915003pps 439Mb/sec (439201440bps) errors: 0
915003pps 439Mb/sec是pktgen的测试结果,前面是包的转发率,后面是数据的吞吐率;由于我只能拿到pktgen端的测试数据,所以没有办法有效的衡量l2fwd的性能,l2fwd似乎也没有有效的输出结果信息;我不知道该怎样弄才好;
待续。。。。。。
技术水平有待提高,如果文章有错误的地方希望读者指正,相互交流,互相学习;O(∩_∩)O~