在VMware 使用 linux pktgen工具测试

1 准备工作

如果有实际的硬件支持,可以直接从1.3开始

1.1 设定 VMware

Processors :2
增加2个 network adapter
vmware setup
1.2 确认状态
因为pktgen运行在内核态,用root登录VM

加载pktgen

root@ubuntu:~# modprobe pktgen
root@ubuntu:~# lsmod | grep pktgen
pktgen                 53248  0
root@ubuntu:~# 
root@ubuntu:~# lspci | grep -i ethernet
02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01)
02:06.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01) <=新增
02:07.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01) <=新增
root@ubuntu:~#

1.3 开启2个端口
我安装的是ubuntu18版本,会显示ens 而不是 eth

root@ubuntu:~# ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.121.135  netmask 255.255.255.0  broadcast 192.168.121.255
        inet6 fe80::20c:29ff:fedf:924f  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:df:92:4f  txqueuelen 1000  (Ethernet)
        RX packets 1280  bytes 145948 (145.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 956  bytes 176323 (176.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens38: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fedf:9259  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:df:92:59  txqueuelen 1000  (Ethernet)
        RX packets 18  bytes 1656 (1.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13  bytes 1006 (1.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens39: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fedf:9263  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:df:92:63  txqueuelen 1000  (Ethernet)
        RX packets 18  bytes 1656 (1.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13  bytes 1006 (1.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 112  bytes 8456 (8.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 112  bytes 8456 (8.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

root@ubuntu:~# ifconfig ens38 up
root@ubuntu:~# ifconfig ens39 up
root@ubuntu:~# 

1.4 link up

root@ubuntu:~# ethtool ens33
Settings for ens33:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: off (auto)
        Supports Wake-on: d
        Wake-on: d
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes    <==

2 设定pktgen

设定双核,这样就可以让ens38 ens39分别由一个核心来负责
在/proc/net/pktgen 会看到 kpktgend_0 kpktgend_1
(有几个核心就会显示几个 kpktgend_x)

root@ubuntu:~# cd /proc/net/pktgen
root@ubuntu:/proc/net/pktgen# ls
kpktgend_0  kpktgend_1  pgctrl
root@ubuntu:/proc/net/pktgen# echo "add_device ens38" > kpktgend_0
root@ubuntu:/proc/net/pktgen# echo "add_device ens39" > kpktgend_1

这样就会生成2个文件ens38 ens39

root@ubuntu:/proc/net/pktgen# ls
ens38  ens39  kpktgend_0  kpktgend_1  pgctrl
root@ubuntu:/proc/net/pktgen# cat ens38
Params: count 1000  min_pkt_size: 0  max_pkt_size: 0
     frags: 0  delay: 0  clone_skb: 0  ifname: ens38
     flows: 0 flowlen: 0
     queue_map_min: 0  queue_map_max: 0
     dst_min:   dst_max:
     src_min:   src_max:
     src_mac: 00:0c:29:df:92:59 dst_mac: 00:00:00:00:00:00
     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: 0  errors: 0
     started: 0us  stopped: 0us idle: 0us
     seq_num: 0  cur_dst_mac_offset: 0  cur_src_mac_offset: 0
     cur_saddr: 0.0.0.0  cur_daddr: 0.0.0.0
     cur_udp_dst: 0  cur_udp_src: 0
     cur_queue_map: 0
     flows: 0
Result: Idle

互相绑定 mac

root@ubuntu:/proc/net/pktgen# echo "dst_mac 00:0c:29:df:92:63" > ens38
root@ubuntu:/proc/net/pktgen# echo "dst_mac 00:0c:29:df:92:59" > ens39

设定要测的封包大小

root@ubuntu:/proc/net/pktgen# echo "pkt_size 1000" > ens38
root@ubuntu:/proc/net/pktgen# echo "pkt_size 1000" > ens39

设定要测的封包数量

root@ubuntu:/proc/net/pktgen# echo "count 1000000" > ens38
root@ubuntu:/proc/net/pktgen# echo "count 1000000" > ens39

最后是这样

root@ubuntu:/proc/net/pktgen# cat ens38
Params: count 1000000  min_pkt_size: 1000  max_pkt_size: 1000
     frags: 0  delay: 0  clone_skb: 0  ifname: ens38
     flows: 0 flowlen: 0
     queue_map_min: 0  queue_map_max: 0
     dst_min:   dst_max:
     src_min:   src_max:
     src_mac: 00:0c:29:df:92:59 dst_mac: 00:0c:29:df:92:63 <== 由原来的00 变成了ens39的地址
     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: 0  errors: 0
     started: 0us  stopped: 0us idle: 0us
     seq_num: 0  cur_dst_mac_offset: 0  cur_src_mac_offset: 0
     cur_saddr: 0.0.0.0  cur_daddr: 0.0.0.0
     cur_udp_dst: 0  cur_udp_src: 0
     cur_queue_map: 0
     flows: 0
Result: OK: count=1000000

3 pktgen 测试

3.1
关注点是 RX packets, TX packets, 以 ens39为例
RX packets 102 bytes 9384 (9.3 KB)
TX packets 15 bytes 1146 (1.1 KB)

root@ubuntu:/proc/net/pktgen# ifconfig ens39
ens39: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fedf:9263  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:df:92:63  txqueuelen 1000  (Ethernet)
        RX packets 102  bytes 9384 (9.3 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 15  bytes 1146 (1.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

3.2 进行测试
执行echo之后.会 5~10s 时间, 要等测试结束

root@ubuntu:/proc/net/pktgen#
root@ubuntu:/proc/net/pktgen# echo start > pgctrl

3.3 结果分析

root@ubuntu:/proc/net/pktgen# ifconfig ens39
ens39: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fedf:9263  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:df:92:63  txqueuelen 1000  (Ethernet)
        RX packets 1000102  bytes 1000009384 (1.0 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1000015  bytes 1000001146 (1.0 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

RX=1000102 - 102 = 1000000
TX=1000015 - 15 = 1000000
就等于前面设定的count 1000000
echo “count 1000000” > ens39

ens38也是差不多…

root@ubuntu:/proc/net/pktgen# ifconfig ens38
ens38: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::20c:29ff:fedf:9259  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:df:92:59  txqueuelen 1000  (Ethernet)
        RX packets 1000114  bytes 1000010488 (1.0 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1000015  bytes 1000001146 (1.0 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值