OFTest(四)-一种测试交换机流表下发速率的方法

引言:对于OpenFlow交换机,流表下发速率是一个非常重要的指标。虽然OpenFlow交换机的Spec定义了barrier_request和barrier_reply机制来查询交换机是否操作完毕,但是可信度是存疑的。最有说服力的方法是用匹配流表的报文来做检测。此处提供一种使用OFTest套件来测试流表下发速率的方法供参考。

作者简介:刘敬一,盛科网络SDN交换机产品线测试主管

环境搭建

  • 一台待测的OpenFlow交换机,配置好controller的IP和port信息,保证OFTest运行时能够正确连接
  • 安装了OFTest测试套件的PC,需要有两个网口连接到交换机上(eth1->port1,eth2->port2)
  • 一台发包测试仪,例如Ixia,用来持续发探测包(ixia->port8)

组包发包

  • 使用发包测试仪组以太报文,并在运行OFTest脚本前就开始持续发包
  • dest mac固定为0000:ffff:ffff
  • source mac从0000:0000:0001递增,step=1,repeat=4000(后面添加flow条目数)
  • 线速发包,报文长度固定为64bytes,那么发包速率是1488095pps,意味着每秒每种报文会发1488095/4000=372.02次
  • 那么一种报文循环周期的时间就是1/372.02=0.0027s,所以在后面脚本中在端口poll的等待周期需要超过0.0027秒

测试思路

  • 首先在交换机上加一条priority为0的flow,将从port8进来的所有流量都转发到port1
  • 提前组好4000个add_flow的message,这些message会逐个匹配不同source mac,并转发到port2
  • 开始计时,并将上一步准备好的message一次性发给交换机
  • 立即开始polling交换机的port1,直到在一秒的周期内没有dest mac为0000:ffff:ffff的报文再转发出来,说明后加的4000条flow全部生效了
  • 立即再次计时
  • 4000条flow除以两次计时之差再减去等待时间,即为每秒真正下发的流表数
  • 删除所有流表,并需要抓包验证真正删除了
  • 多次重复上述步骤,取得平均值,即为最后 测试结果

脚本实现

  • 在OFTest中,一个class就是一个case,继承自base_tests.SimpleDataPlane即可

  • 在class内部定义函数timekeeping,用来计算单次的流表下发速率

  • 定义函数rateVerify,用来提前组好4000个添加flow的报文,存储在一个list里,并调用timekeeping返回单次测试结果

  • 定义函数checkNoForward,用来清除流表后确认指定端口没有报文转发出来,说明所有流表都被真正删除了

  • 入口函数runTest中,可以设定测试次数testtime,并把每次测试结果和最终平均速率写到log中

  • 运行脚本然后查看结果

扩展

不同priority的排列

  • 上面举例中,rateVerify中定义的所有流表的priority是固定的
  • 如果需要priority递增:priority=flow_num
  • 如果需要priority递减:priority=6000-flow_num
  • 如果需要priority随机:priority=flow_num ,然后将组好的request打乱顺序 random.shuffle(requests)

删除流表速率

  • 根据上面的思路,很容易设计出按照不同priority的顺序(升序/降序/随机)删除流表的测试速率的方法。

 
注:投稿文章仅出于传递更多信息之目的,系SDNLAB《原创文章奖励计划》的投稿文章,仅供参考,不代表证实其描述或赞同其观点,投资者据此操作,风险自担;技术问题请留言指正。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/17103.html
分享到:
相关文章
条评论

登录后才可以评论

ljyfree 发表于16-06-14
0