Openflow Switch 测试方法学
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Contents
1. Test case 1:测试Openflow 交换机的流表容量 (1)
2. Test case 2:测试Openflow 交换机的流表学习速率 (5)
3. Test case 3:测试Openflow 交换机的吞吐量,时延,抖动和丢包率 (12)
4. Test case 4:测试Openflow 交换机的流表震荡 (14)
1.Test case 1:测试Openflow交换机的流表容量
∙测试目的:测试Openflow交换机最多能支持的流表数量
∙测试拓扑:
∙预配置(请注意,预配置部分是写本文需要,在OpenvSwitch上所做的配置。
读者在用OVS做实验时候可参考此配置,实际测试则不需要进行此部分)
设置br1 的flow table 0 表项容量为100
Step 1:在OVS 的ovsdb中,在Bridge 表中,把br1 条目的flow_tables列中关联br1 的
flow_table 0, 并且在Flow_Table表中创建一行。
ovs-vsctl set Bridge br1 flow_tables:0=@table0 -- --id=@table0 create Flow_Table name=table0 查看Bridge表和Flow_Table表:
[root@localhostmrzhao]# ovs-vsctl list bridge
_uuid : c5601237-6574-465b-843f-ac52c61d5bad
Controller : [bca3710d-1280-44eb-8436-20bbe5c8161c]
datapath_id : "0000000c2992086a"
datapath_type : ""
external_ids : {}
fail_mode : []
flood_vlans : []
flow_tables : {0=bebe5b02-6216-4a8a-af5d-27f1dde2bf48}
ipfix : []
mirrors : []
name : "br1"
netflow : []
other_config : {}
ports : [358480c2-0709-476d-8446-3020584454d0, 4f1a7238-d611-4345-8b06-83a62d414952,
5dd30471-07c4-4eac-90a1-0cf7d96e7b07, a4c3be4c-bda5-4686-af08-4e59d51040bd, eaf6eb05-0d95-4775-9abb-1b139469a9b9]
protocols : []
sflow : []
status : {}
stp_enable : false
[root@localhostmrzhao]# ovs-vsctl list Flow_table
_uuid : bebe5b02-6216-4a8a-af5d-27f1dde2bf48
external_ids : {}
flow_limit : []
groups : []
name : "table0"
overflow_policy : []
prefixes : []
Step 2:设置br1 的table0 的流表大小是100条流表项
ovs-vsctl set Flow_Table table0 flow_limit=100
查看流表项设置:
[root@localhostmrzhao]# ovs-vsctl list Flow_table
_uuid : bebe5b02-6216-4a8a-af5d-27f1dde2bf48
external_ids : {}
flow_limit : 100
groups : []
name : "table0"
overflow_policy : []
prefixes : []
测试步骤
1.查看初始流表,显示只有一条流表(对应LLDP 报文转发控制器的流表):
[root@localhostmrzhao]# ovs-ofctl dump-flows br1
NXST_FLOW reply (xid=0x4):
cookie=0x0, duration=3.937s, table=0, n_packets=0, n_bytes=0, idle_age=3, dl_type=0x88cc actions=CONTROLLER:5000
2.创建 50条流表(初始值, Initial flow number), 下发。
本例中一条流表包含三个匹配字段:
Ethernet.type
IP.Source Address
IP.Destination Address
显示成功下发50条流表:
流量验证也显示全部转发,没有丢包:
3.增加50条流表,总共100条(step = 50 条流表 ),下发。
显示成功下发90条流表:
发送流量也可以看到有10%丢包:
从OpenvSwitch上查看,也可以看到,除了LLDP 那条flow table 之外,只有90条流表:[root@localhostmrzhao]# ovs-ofctl dump-aggregate br1
NXST_AGGREGATE reply (xid=0x4): packet_count=26760 byte_count=3318240 flow_count=91
∙测试结果:
指标值:交换机最大支持的流表数量
本例的测试结果为91条。
注: a.为什么只有91条,而不是设置的100条,需要查看OVS 文档分析原因。
b.为了验证这个测试结果的正确性,仪表配置不动,我们把table0的流表数限制改为200:
ovs-vsctl set Flow_Table table0 flow_limit=200
然后可以看到,原配置的100条流表全部下发:
OVS 上查看,100条流表也全部学到。
[root@localhostmrzhao]# ovs-ofctl dump-aggregate br1
NXST_AGGREGATE reply (xid=0x4): packet_count=26760 byte_count=3318240 flow_count=101
∙测试方法深入讨论
1.配置单独的 L2 匹配域测试例,单独的 L3 匹配域测试例。
根据交换机的实现方式不同,不
同匹配方式对交换机的性能和流表规格有明显影响。
例如有些交换机会把 L2 匹配放在 L2 内存中,而不是在通常放流表的 TCAM 中,这样测试例如果只测试 L2 匹配则无法验证
TCAM 容量。
2.配置12元组全匹配的测试例。
匹配元组的多少,可能对Openflow交换机流表的容量发生
影响。
3.单个流表和多个流表对性能规格也有明显区别,需验证交换机在单个流表下的容量,多个
流表下的流表容量,以及能同时支持多少个表的数量(例如255 个)。
对于多流表的容量,由于流表之间并非一一对应的关系,比如逻辑上流表1的多个流表项可以映射到流表2 的
同一个流表项。
所以多流表下的流表容量,可以考虑和应用场景结合起来,比如用
Openflow来实现VPN,可以测试伪线的容量,VPN VRF 的容量等等。
2.Test case 2:测试Openflow交换机的流表学习速率
∙测试目的:测试Openflow交换机流表的学习速率,即每秒学习多少条流表
∙测试拓扑:
∙预配置(请注意,预配置部分是写本文需要,在OpenvSwitch上所做的配置。
读者在用OVS做实验时候可参考此配置,实际测试则不需要进行此部分)
在Test case 1 的基础上,把br1 的table0 的容量调整为1,000,000 条流表
ovs-vsctl set Flow_Table table0 flow_limit=1000000
测试方法1:流量图形采样法
A.用Custom 方式创建流表
B.用flow 方式创建和流表相对应的验证流量
C.用图形结果计算流表学习时间和学习速度
∙测试步骤
1.用custom 方式创建5000条flow(创建的流表条数必须在Test Case 1 测试到的最大流表数
之内)。
2.创建一条验证流,匹配5000条flow。
验证流量的带宽可设置小于转发吞吐量,避免因为
转发丢包导致的测试结果偏差。
3.在验证流统计视图上,把”Rx Rate(fps)”统计量加入到图形显示中。
4.先发送流量,然后在Openflow仿真控制器上把5000条流表发送给被测交换机:
5.观察流量,等待接收流量上升到和发送流量一致。
6.用标尺测量出从流量开始上升到平稳之间的时间,从标尺中可以看到,流表全部学习到
4.883秒:
∙测试结果:
本例测试结果:学习5000条流表,用了4.883秒,平均每秒学习1024条流表
测试方法2:流量直接验证法
A.创建Bound 流量
B.用Bound 方式从Bound stream中提取流表
C.用Command Sequence 中“Openflow: Add flows to switches”命令,来直接测试结果
∙测试步骤
1.创建bound stream,有5000个目的IP地址,对应5000条Stream. 请注意,创建流的时候
需要创建”stream only generator”
2.用Bound 方式,从Bound Streams 中提取5000条bound flow entries。
3.在”Command sequence中”,加入”Openflow: add flows to switches”命令,并编辑这条命令,
4.仿真的控制器和被测交换机建立连接。
请注意,仿真的控制器不要选择”Add flows on
connect”选项。
5.先开发发送验证流量
6.运行command sequence
7.从Result Report查看结果
∙测试结果:
本例测试结果:
Flow add time(us): 4,758,889 微秒=4.759 秒
Flow add rate(flows/秒): 1050条/秒
Observed Flow Add Setup Time(us) = 4,994,641 微秒 = 4.995秒
Observed Traffic Latency From Last Flow Add Time(us) = 234,751 微秒
∙测试方法深入讨论
1.已有流对新增速度的影响:
流表中已有的流数量对新增流表学习的速度是有影响的,影响程度在不同 DUT 上表现不同。
有研究表明,随着 TCAM 存储被流表逐步填满,流表的学习速度是会下降的,对于有大
TCAM 的尤为明显。
建议根据流表容量,分别测试流表在空表、轻量、中量、接近满的几种情况下,测试增加
流的学习速度。
例如 10、50、100、1000、2000 直到满表。
2.修改流表的学习速度:
有测试表明,修改流表的速度是会比增加流的速度要慢的。
所以建议分别测试,增加、修
改、删除流的三种学习速度。
3.通配符:
分别测试完全匹配和采用通配符匹配分别不同的测试例,考量这两种场景的学习速度。
4.流表匹配项的长度和学习速率也会有影响,考量不通数量的匹配项流表学习速度。
5.两种测试方法比较:
流量图形采样法:
优点:
a.不受Spirent Testcenter最大支持流数量的限制,可以测试超大容量流表项情况
下流表学习速率。
b.可以通过图形中线的变化趋势,看到整个流表学习过程中,学习速率的变化,
比如在流表尚空的时候,每秒学习的流表项较快,随着流表项的增加,流表项
学习速度放慢,这个可以在流量接收曲线上得到体现。
缺点:
Spirent Testcenter曲线采样间隔是1秒,所以测试结果有0-1秒的误差,最好的
情况是无误差,最坏的情况是1秒的误差。
流量直接验证法
优点:测量精度很高,误差只在一条流表对应的相应两个帧的间隔
缺点:无法查看学习的过程。
3.Test case 3:测试Openflow交换机的吞吐量,时延,抖动和丢包率
∙测试目的:测试Openflow交换机转发性能
∙测试拓扑:
∙测试步骤
1.Spirent Testcenter仿真的控制器,向交换机下发1000条流表
2.创建验证流量并发送,确保所有流量都被转发。
3.运行RFC 2544 测试套,在验证流量上创建RFC2544 测试。
4.运行,查看结果
5.增加流表条目到5000条,创建绑定流量,重复上述测试。
∙测试结果
1000条流表下的转发吞吐量是35.361Mbps
5000条流表下的转发吞吐量是7.215Mbps
∙测试方法深入讨论
1.流表的数量,可能对于交换机的转发吞吐量有影响。
2.流表的匹配字段的多少,可能对交换机的转发吞吐量有影响。
4.Test case 4:测试Openflow交换机的流表震荡
∙测试目的:测试Openflow交换机在流表添加/删除下的稳定性
∙测试拓扑:
∙预配置(请注意,预配置部分是写本文需要,在OpenvSwitch上所做的配置。
读者在用OVS做实验时候可参考此配置,实际测试则不需要进行此部分)
在Test case 1 测试Openflow交换机的流表容量基础上
Step 1:设置br1 的table0 的流表大小是200条流表项
ovs-vsctl set Flow_Table table0 flow_limit=200
查看流表项设置:
[root@localhostmrzhao]# ovs-vsctl list Flow_table
_uuid : bebe5b02-6216-4a8a-af5d-27f1dde2bf48
external_ids : {}
flow_limit : 200
groups : []
name : "table0"
overflow_policy : []
prefixes : []
∙测试步骤
∙如Test case 1 测试Openflow交换机的流表容量建立基本测试床,流表下发成功,流量成功转发:
[root@localhost ~]# ovs-ofctl dump-aggregate br1
NXST_AGGREGATE reply (xid=0x4): packet_count=3 byte_count=180 flow_count=101
∙把”rx sig rate(fps)”放入图形化显示:
∙在command Sequence 中,创建命令序列循环,每过30秒完成一次流表下发+流表撤销行为:
执行command sequence,长时间运行,观察每次流表是否能下发全和撤销全。
流量是否正常。