绝不放手 發表於 2019-9-4 13:59:00

发行版Linux和麒麟操作系统下netperf 网络性能测试

<h1 class="postTitle">发行版Linux和麒麟操作系统下netperf 网络性能测试</h1>
<div class="clear">&nbsp;</div>
<div class="postBody">
<div id="cnblogs_post_body" class="blogpost-body ">
<p data-source-line="1">Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不同,可以进行不同模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。</p>
<h4 id="工作原理" data-source-line="3">工作原理</h4>
<p data-source-line="4">Netperf工具以client/server方式工作。server端是netserver,用来侦听来自client端的连接,client端是netperf,用来向server发起网络测试.在client与server之间,首先建立一个控制连接,传递有关测试配置的信息,以及测试的结果:在控制连接建立并传递了测试配置信息以后,client与server之间会再建立一个测试连接,进行来回传递特殊的流量模式,以测试网络的性能</p>
<h4 id="软件安装" data-source-line="6">软件安装</h4>
<ol data-source-line="7">
<li>下载安装Netperf工具</li>
</ol>
<pre data-source-line="9"><code class="hljs less">  下载链接:<span class="hljs-attribute"><span class="hljs-attribute">ftp:<span class="hljs-comment"><span class="hljs-comment">//ftp.netperf.org/netperf/
  # wget <span class="hljs-attribute"><span class="hljs-attribute">ftp:<span class="hljs-comment"><span class="hljs-comment">//ftp.netperf.org/netperf/netperf-2.7.0.tar.gz</span></span></span></span></span></span></span></span></span></span></code></pre>
<ol start="2" data-source-line="14">
<li>安装依赖包gcc cc</li>
</ol>
<pre data-source-line="16"><code class="hljs perl">  <span class="hljs-preprocessor"><span class="hljs-comment"># yum install gcc cc -y</span></span></span></code></pre>
<ol start="3" data-source-line="20">
<li>解压安装</li>
</ol>
<p>    发行版Linux(CentOS7等)下编译和安装步骤如下:</p>
<ol start="3" data-source-line="20">
<li>
<div class="cnblogs_code">
<pre>  # tar -zxvf netperf-2.7.0.tar.gz
  #cd ./netperf-2.7.0/
  # ./configure
  # cd ./src/
  # make
  # make install</pre>
</div>
<p>麒麟操作系统Linux(银河麒麟,搭配的是飞腾1500A 64位处理器)下编译和安装步骤如下:</p>
</li>
</ol>
<pre>  # tar -zxvf netperf-2.7.0.tar.gz
  #cd ./netperf-2.7.0/
  # ./configure &nbsp;–build=alpha //注释:<strong>此处指定编译平台为alpha</strong>
  # cd ./src/
  # make
  # make install</pre>
<h4 id="命令参数介绍" data-source-line="28">命令参数介绍</h4>
<p data-source-line="29">命令行参数包括如下选项:</p>
<pre data-source-line="31"><code class="hljs diff"><span class="hljs-deletion">-<span class="ruby"><span class="hljs-constant"><span class="hljs-deletion">H host :指定远端运行netserver的server <span class="hljs-constant"><span class="hljs-deletion">IP地址。
<span class="hljs-deletion">-<span class="ruby"><span class="hljs-deletion">l testlen:指定测试的时间长度(秒)
<span class="hljs-deletion">-<span class="ruby"><span class="hljs-deletion">t testname:指定进行的测试类型,包括<span class="hljs-constant"><span class="hljs-deletion">TCP_STREAM,<span class="hljs-constant"><span class="hljs-deletion">UDP_STREAM,<span class="hljs-constant"><span class="hljs-deletion">TCP_RR,<span class="hljs-constant"><span class="hljs-deletion">TCP_CRR,<span class="hljs-constant"><span class="hljs-deletion">UDP_RR
<span class="hljs-deletion">-<span class="ruby"><span class="hljs-deletion">s size        设置本地系统的socket发送与接收缓冲大小
<span class="hljs-deletion">-<span class="ruby"><span class="hljs-constant"><span class="hljs-deletion">S size        设置远端系统的socket发送与接收缓冲大小
<span class="hljs-deletion">-<span class="ruby"><span class="hljs-deletion">m size        设置本地系统发送测试分组的大小
<span class="hljs-deletion">-<span class="ruby"><span class="hljs-constant"><span class="hljs-deletion">M size        设置远端系统接收测试分组的大小
<span class="hljs-deletion">-<span class="ruby"><span class="hljs-constant"><span class="hljs-deletion">D 对本地与远端系统的socket设置<span class="hljs-constant"><span class="hljs-deletion">TCP_NODELAY选项</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h3 id="netperf-网络测试" data-source-line="42">netperf 网络测试</h3>
<p>1、TCP_STREAM Netperf缺省情况下进行TCP批量传输,即-t TCP_STREAM。测试过程中,netperf向netserver发送批量的TCP数据分组,以确定数据传输过程中的吞吐量:</p>
<ol data-source-line="43">
<li>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre># netserver# 服务端启动netserver 服务
Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC
# netperf-H 192.168.130.20 -l 60
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.130.20 () port 0 AF_INET
Recv   Send    Send                        
Socket SocketMessageElapsed            
Size   Size    Size   Time   Throughput
bytesbytes   bytes    secs.    10^6bits/sec
873801638416384    60.01   935.66   
#
# netperf-H 192.168.130.20 -l 60 -- -m 10240   # 修改发送的包的大小
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.130.20 () port 0 AF_INET
Recv   Send    Send                        
Socket SocketMessageElapsed            
Size   Size    Size   Time   Throughput
bytesbytes   bytes    secs.    10^6bits/sec

873801638410240    60.02   937.58</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
</li>
</ol>
<p>2、UDP_STREAM UDP_STREAM用来测试进行UDP批量传输时的网络性能。注意:此时测试分组的大小不得大于socket的发送与接收缓冲大小,否则netperf会报出错提示:</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre># netperf -t UDP_STREAM-H 192.168.130.20 -l 10
MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.130.20 () port 0 AF_INET
SocketMessageElapsed      Messages               
Size    Size   Time         Okay Errors   Throughput
bytes   bytes    secs            #      #   10^6bits/sec

212992   65507   10.01      131286      0    6874.75
212992         10.01         1            0.05

#
# netperf -t UDP_STREAM-H 192.168.130.20 -l 10 -- -m 300000   # 超过socket的发送与接收缓冲大212992
MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.130.20 () port 0 AF_INET
send_data: data send error: Message too long (errno 90)
netperf: send_omni: send_data failed: Message too long</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>3、TCP_RR TCP_RR方式的测试对象是多次TCP request和response的交易过程</p>
<ol start="3" data-source-line="89">
<li>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre># netperf -t TCP_RR -H 192.168.130.20
MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.130.20 () port 0 AF_INET : first burst 0
Local /Remote
Socket Size   RequestResp.   ElapsedTrans.
Send   Recv   Size   Size    Time   Rate         
bytesBytesbytes    bytes   secs.    per sec   

16384873801      1       10.00    8228.63   
1638487380</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p data-source-line="106">我们可以通过测试相关的参数来改变request和response分组的大小,TCP_RR方式下的参数如下表所示:</p>
<pre data-source-line="108"><code class="hljs diff">参数                   说明
<span class="hljs-deletion">-<span class="ruby"><span class="hljs-deletion">r req,resp        设置request和reponse分组的大小
<span class="hljs-deletion">-<span class="ruby"><span class="hljs-deletion">s size          设置本地系统的socket发送与接收缓冲大小
<span class="hljs-deletion">-<span class="ruby"><span class="hljs-constant"><span class="hljs-deletion">S size          设置远端系统的socket发送与接收缓冲大小
<span class="hljs-deletion">-<span class="ruby"><span class="hljs-constant"><span class="hljs-deletion">D                对本地与远端系统的socket设置<span class="hljs-constant"><span class="hljs-deletion">TCP_NODELAY选项</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</li>
<li>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre># netperf -t TCP_RR -H 192.168.130.20 -- -r 64 64
MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.130.20 () port 0 AF_INET : first burst 0
Local /Remote
Socket Size   RequestResp.   ElapsedTrans.
Send   Recv   Size   Size    Time   Rate         
bytesBytesbytes    bytes   secs.    per sec   

163848738064       64      10.00    8143.22   
1638487380</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
</li>
</ol>
<p>4、TCP_CRR 与TCP_RR不同,TCP_CRR为每次交易建立一个新的TCP连接。</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre># netperf -t TCP_CRR -H 192.168.130.20
MIGRATED TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.130.20 () port 0 AF_INET
Local /Remote
Socket Size   RequestResp.   ElapsedTrans.
Send   Recv   Size   Size    Time   Rate         
bytesBytesbytes    bytes   secs.    per sec   

16384873801      1       10.00   899.38      # 数值明显比TCP_RR值小
1638487380</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>5、UDP_RR UDP_RR方式使用UDP分组进行request/response的交易过程</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre># netperf -t UDP_RR -H 192.168.130.20
MIGRATED UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.130.20 () port 0 AF_INET : first burst 0
Local /Remote
Socket Size   RequestResp.   ElapsedTrans.
Send   Recv   Size   Size    Time   Rate         
bytesBytesbytes    bytes   secs.    per sec   

212992 212992 1      1       10.00    8425.86   
212992 212992</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>6、netperf 的命令使用帮助:netperf --help</p>
<div class="cnblogs_code">
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
<pre># netperf --help
netperf: invalid option -- '-'

Usage: netperf --

Global options:
    -a send,recv      Set the local send,recv buffer alignment
    -A send,recv      Set the remote send,recv buffer alignment
    -B brandstr       Specify a string to be emitted with brief output
    -c    Report local CPU usage
    -C    Report remote CPU usage
    -d                Increase debugging output
    -D time, * Display interim results at least every time interval
                      using units as the initial guess for units per second
                      A negative value for time will make heavy use of the
                      system's timestamping functionality
    -f G|M|K|g|m|k    Set the output units
    -F lfill[,rfill]* Pre-fill buffers with data from specified file
    -h                Display this text
    -H name|ip,fam *Specify the target machine and/or local ip and family
    -i max,min      Specify the max and min number of iterations (15,1)
    -I lvl[,intvl]    Specify confidence level (95 or 99) (99)
                      and confidence interval in percentage (10)
    -j                Keep additional timing statistics
    -l testlen      Specify test duration (&gt;0 secs) (&lt;0 bytes|trans)
    -L name|ip,fam *Specify the local ip|name and address family
    -o send,recv      Set the local send,recv buffer offsets
    -O send,recv      Set the remote send,recv buffer offset
    -n numcpu         Set the number of processors for CPU util
    -N                Establish no control connection, do 'send' side only
    -p port,lport*    Specify netserver port number and/or local port
    -P 0|1            Don't/Do display test headers
    -r                Allow confidence to be hit on result only
    -s seconds      Wait seconds between test setup and test start
    -S                Set SO_KEEPALIVE on the data connection
    -t testname       Specify test to perform
    -T lcpu,rcpu      Request netperf/netserver be bound to local/remote cpu
    -v verbosity      Specify the verbosity level
    -W send,recv      Set the number of send,recv buffers
    -v level          Set the verbosity level (default 1, min 0)
    -V                Display the netperf version and exit
    -y local,remote   Set the socket priority
    -Y local,remote   Set the IP_TOS. Use hexadecimal.
    -Z passphrase   Set and pass to netserver a passphrase

For those options taking two parms, at least one must be specified;
specifying one value without a comma will set both parms to that
value, specifying a value with a leading comma will set just the second
parm, a value with a trailing comma will set just the first. To set
each parm to unique values, specify both and separate them with a
comma.

* For these options taking two parms, specifying one value with no comma
will only set the first parms and will leave the second at the default
value. To set the second value it must be preceded with a comma or be a
comma-separated pair. This is to retain previous netperf behaviour.</pre>
<div class="cnblogs_code_toolbar"><span class="cnblogs_code_copy"><img src="https://common.cnblogs.com/images/copycode.gif"></span></div>
</div>
<p>&nbsp;</p>
<p>参考链接:</p>
<p>1、源代码和帮助文档</p>
<p>2、netperf 网络性能测试</p>
<p>3、netperf的安装及使用</p>
<p>4、ARM64平台编译stream、netperf出错解决办法</p>
<p>5、netperf使用指南</p>
<p>6、netperf 与网络性能测量</p>
</div>
</div><br><br>
来源:https://www.cnblogs.com/xuanbjut/p/11458734.html
頁: [1]
查看完整版本: 发行版Linux和麒麟操作系统下netperf 网络性能测试