蜜果私塾:使用SIPP来进行SIP压力测试(2)

蜜果私塾:使用SIPP来进行SIP压力测试(2)
  上一篇: 使用SIPP进行SIP压力测试(1)


蜜果私塾:使用
SIPP来进行SIP压力测试(2

记录人:阿蜜果

记录时间:2010-7-21

1.     使用场景

笔者最近需要对新做的一个SBCSsession Border Controller,会话边界控制器)进行大呼测试。所做的SBC包括两个模块:CNVNCN模块做信令转发,VN模块主要做媒体转发,SBC用于解决SIP和媒体流的NAT穿越问题。

SBC服务器为双网卡机器,IP地址为:192.168.2.47125.39.155.110UAS服务器的IP192.168.2.66UAC所在机器(笔者机器)的IP125.39.155.107

UACSBC服务器发INVITE消息,SBC接收到消息后,由CN模块将消息转发给UAS服务器,并转发UAS发过来的信息给UAC,呼叫建立后,UASUAC的媒体流的转发由SBCVN模块来做。

UAC(125.39.155.107)< -------------------> SBC (192.168.2.47125.39.155.110)<----------------->UAS(192.168.2.66)

在该大呼测试中,UAC由笔者机器的Sipp软件来做,UAS是另一台经过测试的稳定的服务器,它在收到SBCINVITE消息后,发100180200,并放一段音。

2. uac.xml编辑

因为我们需要在媒体包、所带的音频Codec等、另外流程等上有一些不同,所以还需要准备自定义的uac.xml。在Sipp的安装目录(eg. C:"Program Files"Sipp_3.1)新建uac.xml文件,该文件内容编写如下:

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE scenario SYSTEM "sipp.dtd">

 

<!-- This program is free software; you can redistribute it and/or      -->

<!-- modify it under the terms of the GNU General Public License as     -->

<!-- published by the Free Software Foundation; either version 2 of the -->

<!-- License, or (at your option) any later version.                    -->

<!--                                                                    -->

<!-- This program is distributed in the hope that it will be useful,    -->

<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of     -->

<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the      -->

<!-- GNU General Public License for more details.                       -->

<!--                                                                    -->

<!-- You should have received a copy of the GNU General Public License -->

<!-- along with this program; if not, write to the                      -->

<!-- Free Software Foundation, Inc.,                                    -->

<!-- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA             -->

<!--                                                                    -->

<!--                 Sipp default 'uac' scenario.                       -->

<!--                                                                    -->

 

<scenario name="Basic Sipstone UAC">

 <send retrans="500">

    <![CDATA[

 

      INVITE sip:[service]@[remote_ip]:[remote_port] SIP/2.0

      Via: SIP/2.0/[transport] [local_ip]:[local_port]

      From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]

      To: sut <sip:[service]@[remote_ip]:[remote_port]>

     Call-ID: [call_id]

      Cseq: 1 INVITE

      Contact: sip:sipp@[local_ip]:[local_port]

      Max-Forwards: 70

      Subject: Performance Test

      Content-Type: application/sdp

      Content-Length: 136

 

      v=0

      o=user1 53655765 2353687637 IN IP4 127.0.0.1

      s=-

      t=0 0

      m=audio [media_port] RTP/AVP 8

      c=IN IP4 [media_ip]

      a=rtpmap:8 PCMA/8000

 

    ]]>

 </send>

 

 <recv response="100"

        optional="true">

 </recv>

 

 <recv response="180" optional="true">

 </recv>

 

 <recv response="200" rtd="true">

 </recv>

 

 <!-- Packet lost can be simulated in any send/recv message by         -->

 <!-- by adding the 'lost = "10"'. Value can be [1-100] percent.     -->

 <send>

    <![CDATA[

      ACK sip:[service]@[remote_ip]:[remote_port] SIP/2.0

      Via: SIP/2.0/[transport] [local_ip]:[local_port]

      From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]

      To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]

      Call-ID: [call_id]

      Cseq: 1 ACK

      Contact: sip:sipp@[local_ip]:[local_port]

      Max-Forwards: 70

      Subject: Performance Test

      Content-Length: 0

 

    ]]>

 </send>

 

 <nop>

    <action>

        <exec play_pcap_audio="pcap/g711a.pcap"/>

    </action>

 </nop>

 

 <!-- This delay can be customized by the -d command-line option       -->

 <!-- or by adding a 'milliseconds = "value"' option here.           -->

 <pause/>

 

 <!-- The 'crlf' option inserts a blank line in the statistics report. -->

 <send retrans="500">

    <![CDATA[

 

      BYE sip:[service]@[remote_ip]:[remote_port] SIP/2.0

      Via: SIP/2.0/[transport] [local_ip]:[local_port]

      From: sipp <sip:sipp@[local_ip]:[local_port]>;tag=[call_number]

      To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]

      Call-ID: [call_id]

      Cseq: 2 BYE

      Contact: sip:sipp@[local_ip]:[local_port]

      Max-Forwards: 70

      Subject: Performance Test

      Content-Length: 0

 

    ]]>

 </send>

 

 <recv response="200" crlf="true">

 </recv>

 

 <!-- definition of the response time repartition table (unit is ms)   -->

 <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>

 

 <!-- definition of the call length repartition table (unit is ms)     -->

 <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>

</scenario>

         该流程表示的意思是首先由uac主动往外发INVITE,接着期望收到100180200信息,UAC收到SBC200 OK信息后,往SBC发送ACK信息,接着往服务器发送pcap/g711a.pcapRTP包信息。接着开始pausepause的是时间是uac启动时所带的d参数(在后续章节带了该参数)。等待ds)后,往服务器发BYE消息,并期待得到服务器的200 OK信息,流程结束。

         上面脚本中的“[]”中都是用户带入的一些参数,若未指定,系统会自动指定。

1) remote_ip:服务器的IP,本实例中指定为125.39.155.100

2) remote_port:服务器的端口,本实例中指定为5040

3) local_ipUACIP,未指定时,使用UAC所在主机的IP,本例中指定为192.168.4.20

4) local_portUAC的端口,本例中指定为6060

5) call_number主叫号码,本实例中通过-s参数指定为01077778888

6) transport未指定,默认为udp

7) call_idCall-ID,由系统生成,未指定。

……

注意如下这段脚本:

<nop>

    <action>

        <exec play_pcap_audio="pcap/g711a.pcap"/>

    </action>

</nop>

这段表示接通后UAC向服务器发送的RTP包,笔者使用的是Sipp安装目录pcap下的g711.pcap包,也可以自己录制。

3. 媒体包准备

         在测试过程中常常需要携带RTP流,此时需要有对应的RTP流文件,Sipp安装目录pcap下有一些默认的RTP流文件,若不满足条件,也可以自行录制,录制好后,可在wireshark中过滤好需要的包后,点击“Save As”另存到Sipp安装目录/pcap目录。

4. 测试结果分析

         选择“开始”->“程序”->Sipp_3.1->start sipp”,在弹出的窗口中可以先运行如下语句先试呼叫一个:

sipp -sf uac.xml -m 1 -i 192.168.4.20 -d 5000 -p 6060 -s 01077778888 -rtp_echo 125.39.155.110:5040

         其中:

1-sf后跟的是自定义的uac的脚本文件;

2-m后跟的是呼叫次数;

3-i后跟的是本机IP(该参数可以不加,默认使用本机IP);

4-p后跟的是本地的端口;

5-d后跟的是暂停的秒数,可“2. uac.xml

6-s后跟的是助教号码;

7rtp_echo表示需要对方发送RTP

8125.39.155.110:5040表示的服务器的IP和端口。

一个试呼成功后,可以开始进行大呼,此时可以去掉-m参数。命令如下:

sipp -sf uac.xml -i 192.168.4.20 -d 5000 -p 6060 -s 01077778888 -rtp_echo 125.39.155.110:5040

另外在SBC服务器开三个窗口观察当前的运行情况,分别使用如下命令:

1inmon 观察SCFload值等情况(我们公司平台的一个命令);

2vmstat 3:主要观察id列等,一般要稳定在idle 70%以上;

3top     实时查看当前cpu的占用排位情况。

caps值加到25,运行一段时间后,笔者观察到topvmstat 3的情况比较稳定,测试基本情况如下:

1sipp uac窗口:
    

         从该结果中可看出,虽然有重复现象,但是重发布多,而且没有“Timout”和“Unexpected Msg”,总体算正常。

         2vmstat 3运行基本情况:
    

         从上图可以看出,idle值太低,基本在57%,离70%还有距离;

         3top运行基本情况:
    

         从上图中可以看出,sbcvn模块所占CPU比较高,需要重点优化效率,sbcVN模块基本在12%,只是负责信令转发,所以瓶颈在 VN模块。

         4inmon运行基本情况:
    

         inmonload值一般在17%,而且比较稳定,没有突然居高位,并持续居高位的情况,CN模块比较稳定。

5. 参考文献

         sip使用秘籍-v1.2》阮班勇:

http://wenku.baidu.com/view/632ac7c758f5f61fb73666c5.html

你可能感兴趣的:(蜜果私塾:使用SIPP来进行SIP压力测试(2))