51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1616|回复: 0
打印 上一主题 下一主题

基于ODL与Pica8交换机端到端的限速实验

[复制链接]

 成长值: 15613

  • TA的每日心情
    开心
    2022-7-17 17:50
  • 2444

    主题

    2544

    帖子

    7万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    74104
    跳转到指定楼层
    楼主
    发表于 2017-9-17 15:57:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    </p>一、介绍

    本实验中,使用OpenDaylight控制器的REST APIs来控制Pica8交换机。使用flow table与meter table(OF1.3的特性)来达到端到端限速的目的。没有实体交换机的同学可以使用CPqD与Mininet来完成实验(安装指南见参考资料1)。目前,OpenvSwitch 2.5不支持meter。
    1.1 OF1.3 Meter简介
    Meter Table是在OF1.3中引入的一个新概念。个人认为它最与众不同的地方是用它可以实现per-flow的QoS,例如本次实验展示的就是rate-limiting。OVSDB也具有限流功能,但OVSDB的限流只能针对端口(不知道有没有小伙伴成功使用过OVSDB限流的,在本机上测试可行,但是用两台实体机操作暂时还未成功)。
    每一个Meter Table表项由三元组构成,Meter Identifier,Meter Bands和Counters。这里介绍一下Meter Bands,在Meter Bands中定义了这个Meter的速率(rate)以及busrt size。不同交换机在拥有相同Meter rate的情况下,不同的burst size会带来不同的限流结果。在某台交换机上,使用rate=8000,burst size=200的时候,实际限流效果为7000多左右,而在另一台交换机上,使用rate=8000,burst size=8000的时候,实际限流效果才为7000多左右。
    Band由四元组构成Band Type、Rate、Counters、Type specific arguments。OF1.3中只定义了drop与dscp remark两种类型的band。前者就是当包的速率超过一个阈值的时候,会丢包。dscp remark,当包的速率超过一定阈值的时候,会减少包IP头中的DSCP域的值。上述这个阈值即为rate。
    每一个flow entry可以在其instruction域里对应一个meter。

    二、实验环境

    OpenDaylight distribution-karaf-0.4.1-Beryllium-SR1
    Pica8 Switch (p3, p4)
    FW Version: 2.6.5/24714
    OF Version: 1.3
    OVS Version: 2.3
    Switch ID in OpenDaylight:
    p3: openflow:6790870225108767794
    p4: openflow:6790870225108767797
    Iperf Server (SR1)
    IP: 1.1.1.1 (eth2)
    Iperf Client (SR2)
    IP: 1.1.1.2 (eth3)
    2.1 实验拓扑


    2.2 步骤与结果

    注意1:必须先下meter然后才能下flow entry! 注意2:在写request的时候要记得填写authorization,默认用户名和密码都是admin!


    A. 配置交换机P3

    往交换机P3上加meter
    方法: PUT
    URI: http://{controller-IP}:8181/restconf/config/opendaylight-inventory:nodes/node/{node-id}/meter/{meter-id}
    这个URI很好理解,就是往一个id为{node-id}的交换机上添加一个id为{meter-id}的meter。Request body中的
    Shell
    <meter xmlns="urn:opendaylight:flow:inventory">
    <meter-id>5</meter-id>
    <flags>meter-kbps meter-burst</flags>
    <container-name>abcd</container-name>
    <meter-band-headers>
    <meter-band-header>
    <band-id>0</band-id>
    <meter-band-types>
    <flags>ofpmbt-drop</flags>
    </meter-band-types>
    <drop-rate>8000</drop-rate>
    <drop-burst-size>100</drop-burst-size>
    </meter-band-header>
    </meter-band-headers>
    <meter-name>Foo</meter-name>
    </meter>

    B. 往交换机P3上加带有meter的flow entry (从源IP到目的IP)

    方法: PUT
    URI: http://{controller-IP}:8181/restconf/config/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}/flow/{flow-id}
    通过这个可以看出一个简单的OF1.3的flow table表项是由match和instructions构成的(当然还有priority、couter、timeout和cookie)。Instructions由instruction构成,然后每一个instruction又由一个或多个action构成。
    Shell

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <flow xmlns="urn:opendaylight:flow:inventory">
    <priority>1</priority>
    <flow-name>Foo</flow-name>
    <match>
    <ethernet-match>
    <ethernet-type>
    <type>2048</type>
    </ethernet-type>
    </ethernet-match>
    <in-port>48</in-port>
    </match>
    <id>2</id>
    <table_id>0</table_id>
    <instructions>
    <instruction>
    <order>0</order>
    <apply-actions>
    <action>
    <order>0</order>
    <output-action>
    <output-node-connector>68</output-node-connector>
    </output-action>
    </action>
    </apply-actions>
    </instruction>
    <instruction>
    <order>1</order>
    <meter>
    <meter-id>5</meter-id>
    </meter>
    </instruction>
    </instructions>
    </flow>


    C. 往交换机P3上加从目的IP到源IP的flow entry

    方法: PUT
    URI: http://{controller-ip}:8181/restconf/config/opendaylight-inventory:nodes/node/{node-id}/table/{table-id}/flow/{flow-id}
    本条流与上条流最大的区别就是在action中没有指定meter-id。
    Shell

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <flow xmlns="urn:opendaylight:flow:inventory">
    <priority>1</priority>
    <flow-name>Foo</flow-name>
    <match>
    <ethernet-match>
    <ethernet-type>
    <type>2048</type>
    </ethernet-type>
    </ethernet-match>
    <in-port>68</in-port>
    </match>
    <id>2</id>
    <table_id>0</table_id>
    <instructions>
    <instruction>
    <order>0</order>
    <apply-actions>
    <action>
    <order>0</order>
    <output-action>
    <output-node-connector>48</output-node-connector>
    </output-action>
    </action>
    </apply-actions>
    </instruction>
    </instructions>
    </flow>


    D. 查看P3上的流表

    其中最后两条是应用meter的flow entry。事实上只要指定单向流即可。
    这个meter的结果是缺少meter-burst的。当你添加了meter-burst,这个结果会增加一项burst_size=100。
    2.3 测试结果
    在P3与P4都设置了8000Kbits/sec的限流。然后使用SR2来以10000Kbits/s的速度向SR1发送UDP。然后结果显示传输速率已经被限制为7767Kbits/s。
    SR1 Server


    SR2 client



    三、遇到问题与解决方案

    1.删除了一些流表项,但是他们过了一段时间又出现了。
    据猜测,OpenDaylight会将一些流表项存在其data store中,他们不会被自动删除。而且就算在交换机端手动删除掉了流表,ODL里的这个流表还是存在的。故当ODL试图保持data store和交换机中的数据的一致性时,会再次下发这个流表。
    2.配置了流表项和meter项,但是发送的限速的效果不好。
    可能是由于没有设置burst size导致。解决方案就是设置burst size。经测试,如果多条flow entries使用了同一个meter,那么这个meter的效果会变差。多个meter同时存在的时候,那么meter的效果也没有有且只有一个meter的效果好。

    参考资料


    作者简介:
    林潇,同济大学SNlab(先进网络与系统联合中心)
    QQ:378633397,Email: linxiao9292@outlook.com
    陈明明,同济大学SNlab(先进网络与系统联合中心)
    QQ:544396901,Email:544396901@qq.com

    声明:本文转载自网络。版权归原作者所有,如有侵权请联系删除。
    扫描并关注51学通信微信公众号,获取更多精彩通信课程分享。

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2025-1-31 23:03 , Processed in 0.102033 second(s), 33 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表