码迷,mamicode.com
首页 > 系统相关 > 详细

Linux性能优化从入门到实战:18 网络篇:网络性能评估

时间:2020-05-22 12:40:42      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:ams   percent   linux   tcpcopy   启动服务   read   mac   加载   roo   

网络性能评估,就是网络带宽测试。
网络带宽测试,测试的不是带宽,而是网络吞吐量。
需要根据具体当前业务目标,来评估的某一层的网络性能:应用层、TCP/UDP、转发。

1) 转发性能

网络接口层和网络层,它们主要负责网络包的封装、寻址、路由以及发送和接收,最重要的性能指标是 每秒可处理的网络包数 PPS。 测试工具:pktgen

# to enable pktgen (加载 pktgen 内核模块后,再通过 /proc 文件系统来交互)
# modprobe 命令执行失败,需要配置内核 CONFIG_NET_PKTGEN=m,重新编译内核
$ modprobe pktgen
$ ps -ef | grep pktgen | grep -v grep
root     26384     2  0 06:17 ?        00:00:00 [kpktgend_0]
root     26385     2  0 06:17 ?        00:00:00 [kpktgend_1]
$ ls /proc/net/pktgen/
kpktgend_0  kpktgend_1  pgctrl
# 每个 CPU 上启动一个内核线程,并通过 /proc/net/pktgen 跟这些线程交互
# pgctrl 则主要用来控制这次测试的开启和停止

发包测试:

# 定义一个工具函数,方便后面配置各种测试选项
function pgset() {
    local result
    echo $1 > $PGDEV

    result=`cat $PGDEV | fgrep "Result: OK:"`
    if [ "$result" = "" ]; then
         cat $PGDEV | fgrep Result:
    fi
}

# 为 0 号线程绑定 eth0 网卡
PGDEV=/proc/net/pktgen/kpktgend_0
pgset "rem_device_all"   # 清空网卡绑定
pgset "add_device eth0"  # 添加 eth0 网卡

# 配置 eth0 网卡的测试选项
PGDEV=/proc/net/pktgen/eth0
pgset "count 1000000"    # 总发包数量
pgset "delay 5000"       # 不同包之间的发送延迟 (单位纳秒)
pgset "clone_skb 0"      # SKB 包复制
pgset "pkt_size 64"      # 网络包大小
pgset "dst 192.168.0.30" # 目的 IP
pgset "dst_mac 11:11:11:11:11:11"  # 目的 MAC

# 启动测试
PGDEV=/proc/net/pktgen/pgctrl
pgset "start"

测试报告,得到 120191pps :

$ cat /proc/net/pktgen/eth0
Params: count 1000000  min_pkt_size: 64  max_pkt_size: 64
     frags: 0  delay: 0  clone_skb: 0  ifname: eth0
     flows: 0 flowlen: 0
...
Current:
     pkts-sofar: 1000000  errors: 0
     started: 1534853256071us  stopped: 1534861576098us idle: 70673us
...
Result: OK: 8320027(c8249354+d70673) usec, 1000000 (64byte,0frags)
  120191pps 61Mb/sec (61537792bps) errors: 0

2) TCP/UDP 性能

工具:iperf 或 netperf,测试 TCP 和 UDP 的吞吐量。

# Ubuntu
apt-get install iperf3
# CentOS
yum install iperf3

测速步骤,得到 TCP 接收的带宽(吞吐量)为 860 Mb/s:

# -s 表示启动服务端,-i 表示汇报间隔,-p 表示监听端口
$ iperf3 -s -i 1 -p 10000

# -c 表示启动客户端,192.168.0.30 为目标服务器的 IP
# -b 表示目标带宽 (单位是 bits/s)
# -t 表示测试时间
# -P 表示并发数,-p 表示目标服务器监听端口
$ iperf3 -c 192.168.0.30 -b 1G -t 15 -P 2 -p 10000

# 结果:
[ ID] Interval           Transfer     Bandwidth
...
[SUM]   0.00-15.04  sec  0.00 Bytes  0.00 bits/sec       sender
[SUM]   0.00-15.04  sec  1.51 GBytes   860 Mbits/sec     receiver

3) HTTP 性能

工具:ab 或 webbench,常用的 HTTP 压力测试工具。

# Ubuntu
$ apt-get install -y apache2-utils
# CentOS
$ yum install -y httpd-tools

测试步骤:

# -c 表示并发请求数为 1000,-n 表示总的请求数为 10000
$ ab -c 1000 -n 10000 http://192.168.0.30/
...
Server Software:        nginx/1.15.8
Server Hostname:        192.168.0.30
Server Port:            80

...

Requests per second:    1078.54 [#/sec] (mean)
Time per request:       927.183 [ms] (mean)
Time per request:       0.927 [ms] (mean, across all concurrent requests)
Transfer rate:          890.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   27 152.1      1    1038
Processing:     9  207 843.0     22    9242
Waiting:        8  207 843.0     22    9242
Total:         15  233 857.7     23    9268

Percentage of the requests served within a certain time (ms)
  50%     23
  66%     24
  75%     24
  80%     26
  90%    274
  95%   1195
  98%   2335
  99%   4663
 100%   9268 (longest request)

4)应用负载性能

工具:wrk、TCPCopy、Jmeter 或 LoadRunner,为了得到应用程序的实际性能,可以模拟用户的请求负载。

$ https://github.com/wg/wrk
$ cd wrk
$ apt-get install build-essential -y
$ make
$ sudo cp wrk /usr/local/bin/

测试步骤:

# -c 表示并发连接数 1000,-t 表示线程数为 2
$ wrk -c 1000 -t 2 http://192.168.0.30/
Running 10s test @ http://192.168.0.30/
  2 threads and 1000 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    65.83ms  174.06ms   1.99s    95.85%
    Req/Sec     4.87k   628.73     6.78k    69.00%
  96954 requests in 10.06s, 78.59MB read
  Socket errors: connect 0, read 0, write 0, timeout 179
Requests/sec:   9641.31
Transfer/sec:      7.82MB

Linux性能优化从入门到实战:18 网络篇:网络性能评估

标签:ams   percent   linux   tcpcopy   启动服务   read   mac   加载   roo   

原文地址:https://www.cnblogs.com/qccz123456/p/12936396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!