intel dpdk api l2fwd 实例程序测试

声明:此文档只做学习交流使用,请勿用作其他商业用途

author:朝阳_tony
E-mail : linzhaolover@gmail.com
Create Date: 2013-5-3 14:24:00 Friday

Last Change: 2013-7-29 10:25:19 Monday

转载请注明出处:http://blog.csdn.net/linzhaolove


此文请结合intel dpdk源码去阅读,源码可以去http://dpdk.org/dev 网页中下载;更多官方文档请访问http://dpdk.org


1、程序的作用

     l2fwd 应该是 网络的L2 数据的转发功能;L2是数据链路层,以mac的地址作为区分数据源和目标地址;而这个l2fwd就时将网卡的数据进行转发;


2、程序的运行方法

$> ./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秒钟一次;

3、程序的实现架构

      待续……

4、程序的调用关系

     待续……

5、程序的测试方法

我目前使用的是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

 

我的eth1 是BCM5709 网卡, 我的intel网卡是82576 ,当运行起 l2fwd测试程序后,程序就会自动隐藏intel网卡应有的端口号,这时我只能看到我的eth1,因此我也只能通过我偶的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~

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值