IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Neutron社区每周记(6.20~6.26)|MTU 到底能不能愉快的设置了?

    hu, xueqing发表于 2016-07-04 08:11:58
    love 0

    Mailing Lists

    从 Neutron 社区的最近动态中可以看出,目前的工作重点依旧是关于 Neutron 的升级问题。本期我们主要关注 Neutron 中关于 MTU 的问题。

    1、OVO 是其中非常重要的一方面

    最近一周中,关于 subnetpools(https://review.openstack.org/300056) 和 allowedaddresspairs(https://review.openstack.org/327249) 的 OVO 改造已经完成。
    关于 DNSNameServer(https://review.openstack.org/326477) Security Groups (https://review.openstack.org/284738) 和Port Security(https://review.openstack.org/327257) 的 OVO 改造还在审核确认中。

    2、测试方面

    完善了一些关于 Neutron 资源的排序、分页的单元测试,具体的 Gerrit 链接可以参考:
    – next/prev href links tests: https://review.openstack.org/318270
    – subnet tests: https://review.openstack.org/329340
    – subnetpools tests: https://review.openstack.org/327081

    3、关于 Neutron 中的 QoS

    目前,Neutron 只针对虚拟网卡做了 QoS 限制。具体的配置做法是,在 Neutron Server 的 service_plugins 中配置添加 qos,在使用 ml2 的场景下,在 extension_drivers 中添加 qos 选项,对于 l2 agent 侧,在 [agent] 下添加qos 的扩展。关于目前实现的 QoS 本质上是通过 OVS 对在 br-int 上的虚拟网卡进行限速,具体命令如下:

    ovs-vsctl set interface tap0 ingress_policing_rate=1000
    ovs-vsctl set interface tap0 ingress_policing_burst=100

    但是对于目前的实现,肯定无法满足需求,客户需要的往往是针对 FloatingIP 的限速。

    4、关于 Neutron 中的 MTU

    什么是 MTU ?MTU 是数据链路层的概念,指数据链路层对数据帧长度的限制。以以太网为例,MTU 指的是包含 IP 头在内的数据帧长度。
    在 Neutron 中定义了很多关于 MTU 的参数,比如 path_mtu, segment_mtu 和 physical_network_mtus。
    在介绍上述关于 MTU 的参数意义之前,首先了解下数据帧的格式,对于未封包的数据帧,格式如下:

    mtu (1)
    对于封包的数据帧,格式如下(刚才说到的『MTU』指的就是 IP + Payload 部分):

    mtu22222

    因此,Neutron 中各个 MTU 的意义分别是:

    • path_mtu:虚拟机内看到的 MTU
    • segment_mtu:物理网络下的 MTU
    • physical_network_mtus:物理网络下的 MTU

    对于创建 physical network 来说,其 mtu 是 segment_mtu 和对应的physical_network_mtus 最小值;对于创建 vxlan network 来说,其 mtu 是 path_mtu 和 segment_mtu – 50 (vxlan) 的最小值;对于创建 gre network 来说,其 mtu 是 path_mtu 和 segment_mtu – 42 (gre) 的最小值;而 network 的 mtu 值,最终会通过推送 DHCP option 的方式,推送给虚拟机:

    333333

    值得注意的是,Neutron 的 DHCP agent 可以指定读取的 dnsmasq 配置文件(默认是 /etc/neutron/dnsmasq-neutron.conf ),作为 dnsmasq 进程的一个配置项。如果该配置文件中也配置了 MTU 相关配置,那么相当于,一个 dnsmasq 进程中有两个关于 MTU 的配置项,通过在该 network 中创建虚拟机,观察虚拟机获取的 MTU可知,当一个dnsmasq 进程中有两个关于 MTU 的配置项时,以配置文件(/etc/neutron/dnsmasq-neutron.conf)中配置的 MTU 为准。

    然而在 OVS bridge 中,当添加一个 port 时,如果该 port 的 MTU 比 bridge MTU 大时,添加完成后, port 的 MTU 以 bridge 为准。

    目前该问题已经得到了 OVS 社区的回复,OVS 社区表示这是 ovs-vswitchd 在实现时的 bug。当前 workaround 的方法(https://review.openstack.org/#/c/327651)是,先将该 port 添加到 namspace 中,在调整 port 的 MTU,最后在将该 port 添加到 OVS bridge 上。

    Merged Patches

    1.废弃了 mac_generation_retries 参数
    该参数用于在生成 mac 地址时避免重复,在该 Patch 中废弃了该参数。默认的重试次数是10。Link: https://review.openstack.org/#/c/330273

    2. 优化了创建 router 时的代码逻辑
    本 patch 针对 https://bugs.launchpad.net/neutron/+bug/1543094 的fix
    Link: https://review.openstack.org/#/c/303638

    3. QoS 支持 policy 和 rules 的排序和分页
    Link:https://review.openstack.org/#/c/328273



沪ICP备19023445号-2号
友情链接