OVN是OVS 5倍的性能--性能测试报告

2023-05-16

我们已经对OVN做了许多次的性能测试,但是缺少一个OVN和(ML2+OVS)的性能对比测试。我和许多人一起对比了这2种后端。本文是第一部分:控制平面的性能对比。 后面会另外发文公布数据平面的性能对比结果。

 

控制平面的不同之处

ML2+OVS 控制平面是基于Openstack 的。首先有大量由Python编写的agents 。 Neutron server与这些agents交互式使用基于AMQP的RPC机制(本文的案例用到了最广泛使用的RabbitMQ)。

OVN 的控制平面使用了分布式数据库驱动的方式. 配置和状态由这2个数据库管理: OVN northbound 和 southbound databases。这2个数据库都基于OVSDB。与通过RPC接收更新的方式不同, OVN中的组件监控数据库中相关表项的变化并将最新的表项应用于本地。这些组件的详细信息可以阅读the first release of OVNovn-architecture document

OVN 没有使用任何的Neutron agents。相反,所有功能都由ovn-controller 和 OVS 流实现。比如security groups, DHCP, L3 routing和 NAT功能等。

 

测试环境使用的硬件和软件

本次测试使用了实验室的13台机器,并分配下面的这几种角色:

  • 1 个OpenStack TripleO Undercloud for provisioning
  • 3 个Controllers (OpenStack and OVN control plane services)
  • 9 个Compute Nodes (Hypervisors)

硬件规格如下:

  • 2x E5-2620 v2 (12 total cores, 24 total threads)
  • 64GB RAM
  • 4 x 1TB SATA
  • 1 x Intel X520 Dual Port 10G

软件:

  • CentOS 7.2
  • OpenStack, OVS, and OVN from their master branches (early December, 2016)
  • Neutron configuration notes
    • (OVN) 6 API workers, 1 RPC worker (since rpc is not used and neutron requires at least 1) for neutron-server on each controller (x3)
    • (ML2+OVS) 6 API workers, 6 RPC workers for neutron-server on each controller (x3)
    • (ML2+OVS) DVR was enabled

       

配置和测试

性能测试工具为 OpenStack Rally 。 我们使用 Browbeat 进行快速的安装、配置、运行测试、存储分析和结果对比。

 Browbeat 中的Rally参数为:

rerun: 3
...
rally:
  enabled: true
  sleep_before: 5
  sleep_after: 5
  venv: /home/stack/rally-venv/bin/activate
  plugins:
    - netcreate-boot: rally/rally-plugins/netcreate-boot
    - subnet-router-create: rally/rally-plugins/subnet-router-create
    - neutron-securitygroup-port: rally/rally-plugins/neutron-securitygroup-port
  benchmarks:
    - name: neutron
      enabled: true
      concurrency:
        - 8
        - 16
        - 32 
      times: 500
      scenarios:
        - name: create-list-network
          enabled: true
          file: rally/neutron/neutron-create-list-network-cc.yml
        - name: create-list-port
          enabled: true
          file: rally/neutron/neutron-create-list-port-cc.yml
        - name: create-list-router
          enabled: true
          file: rally/neutron/neutron-create-list-router-cc.yml
        - name: create-list-security-group
          enabled: true
          file: rally/neutron/neutron-create-list-security-group-cc.yml
        - name: create-list-subnet
          enabled: true
          file: rally/neutron/neutron-create-list-subnet-cc.yml
    - name: plugins
      enabled: true
      concurrency:
        - 8
        - 16
        - 32 
      times: 500
      scenarios:
        - name: netcreate-boot
          enabled: true
          image_name: cirros
          flavor_name: m1.xtiny
          file: rally/rally-plugins/netcreate-boot/netcreate_boot.yml
        - name: subnet-router-create
          enabled: true
          num_networks:  10
          file: rally/rally-plugins/subnet-router-create/subnet-router-create.yml
        - name: neutron-securitygroup-port
          enabled: true
          file: rally/rally-plugins/neutron-securitygroup-port/neutron-securitygroup-port.yml


上述配置定义了几种运行场景。在3个不同的并行级别下,分别运行500次。最后,开头的"rerun: 3"意味着我们要将整个配置再运行3遍。是不是被绕晕啦, 那我们拿个例子看一下 :

"netcreate-boot" 场景是创建一个网络,并在这个网络上启动一个虚拟机。这个场景会按下面这样多次执行:

  • Run 1
    • Create 500 VMs, each on their own network, 8 at a time, and then clean up
    • Create 500 VMs, each on their own network, 16 at a time, and then clean up
    • Create 500 VMs, each on their own network, 32 at a time, and then clean up
  • Run 2
    • Create 500 VMs, each on their own network, 8 at a time, and then clean up
    • Create 500 VMs, each on their own network, 16 at a time, and then clean up
    • Create 500 VMs, each on their own network, 32 at a time, and then clean up
  • Run 3
    • Create 500 VMs, each on their own network, 8 at a time, and then clean up
    • Create 500 VMs, each on their own network, 16 at a time, and then clean up
    • Create 500 VMs, each on their own network, 32 at a time, and then clean up

总共会创建4500 个虚拟机。

 

测试结果

Browbeat 能够存储 rally 生成的测试结果。这些测试结果可以用elastic 进行查询,用Kibana显示在网页上。

接下来的几个表格分别展示 average times, 95th percentile, Maximum, 和 minimum times 下的 API执行性能

译者注:百分比响应时间是比平均响应时间更好的性能指标。

因为在数理统计学上,早就有数学家用理论证明平均值是一个非常不可信的数据。

比如稍微几个远离置信区间的数值就可以严重影响到平均值

 

译者注:average是指并行度为8、16、32的场景下完成测试所需时间的平均值

API 

ML2+OVS Average 

OVN Average 

% improvement 

nova.boot_server 

80.672 

23.45 

70.93%

neutron.list_ports 

6.296 

6.478 

-2.89% 

neutron.list_subnets 

5.129 

3.826 

25.40% 

neutron.add_interface_router 

4.156 

3.509 

15.57% 

neutron.list_routers 

4.292

3.089 

28.03% 

neutron.list_networks 

2.596 

2.628 

-1.23% 

neutron.list_security_groups 

2.518 

2.518 

0.00% 

neutron.remove_interface_router 

3.679 

2.353 

36.04% 

neutron.create_port 

2.096 

2.136 

-1.91% 

neutron.create_subnet 

1.775 

1.543 

13.07% 

neutron.delete_port

1.592 

1.517 

4.71% 

neutron.create_security_group 

1.287 

1.372 

-6.60% 

neutron.create_network 

1.352 

1.285 

4.96% 

neutron.create_router 

1.181 

0.845 

28.45% 

neutron.delete_security_group 

0.763 

0.793 

-3.93% 

  

译者注:95%指4500个测试结果按从小到大排列,选择第4275个的数据(4500*0.95=4275)

API 

ML2+OVS 95% 

OVN 95% 

% improvement 

nova.boot_server

163.2 

35.336 

78.35%

neutron.list_ports 

11.038 

11.401 

-3.29% 

neutron.list_subnets 

10.064 

6.886 

31.58% 

neutron.add_interface_router 

7.908 

6.367 

19.49% 

neutron.list_routers 

8.374 

5.321 

36.46% 

neutron.list_networks 

5.343 

5.171 

3.22% 

neutron.list_security_groups

5.648 

5.556 

1.63% 

neutron.remove_interface_router 

6.917 

4.078 

41.04% 

neutron.create_port 

5.521 

4.968 

10.02% 

neutron.create_subnet 

4.041 

3.091 

23.51% 

neutron.delete_port 

2.865 

2.598 

9.32% 

neutron.create_security_group 

3.245 

3.547 

-9.31%

neutron.create_network 

3.089 

2.917 

5.57% 

neutron.create_router 

2.893 

1.92 

33.63% 

neutron.delete_security_group 

1.776 

1.72 

3.15% 

  

译者注:Maximum是指并行度为32的场景下完成测试所需时间

API 

ML2+OVS Maximum 

OVN Maximum 

% improvement 

nova.boot_server 

221.877 

47.827 

78.44%

neutron.list_ports 

29.233 

32.279

-10.42% 

neutron.list_subnets 

35.996 

17.54 

51.27% 

neutron.add_interface_router 

29.591 

22.951 

22.44% 

neutron.list_routers 

19.332 

13.975 

27.71% 

neutron.list_networks 

12.516 

13.765 

-9.98% 

neutron.list_security_groups 

14.577 

13.092 

10.19% 

neutron.remove_interface_router

35.546 

9.391 

73.58% 

neutron.create_port 

53.663 

40.059 

25.35% 

neutron.create_subnet 

46.058 

26.472 

42.52% 

neutron.delete_port 

5.121 

5.149 

-0.55% 

neutron.create_security_group 

14.243 

13.206 

7.28% 

neutron.create_network 

32.804 

32.566 

0.73%

neutron.create_router 

14.594 

6.452 

55.79% 

neutron.delete_security_group 

4.249 

3.746 

11.84% 

  

译者注:Minimum是指并行度为8的场景下完成测试所需时间

API 

ML2+OVS Minimum 

OVN Minimum 

% improvement 

nova.boot_server 

18.665 

3.761 

79.85%

neutron.list_ports 

0.195 

0.22 

-12.82% 

neutron.list_subnets 

0.252 

0.187 

25.79% 

neutron.add_interface_router 

1.698 

1.556 

8.36% 

neutron.list_routers 

0.185 

0.147 

20.54% 

neutron.list_networks 

0.21 

0.174 

17.14% 

neutron.list_security_groups 

0.132 

0.184 

-39.39% 

neutron.remove_interface_router 

1.557 

1.057 

32.11% 

neutron.create_port

0.58 

0.614 

-5.86% 

neutron.create_subnet 

0.42 

0.416 

0.95% 

neutron.delete_port 

0.464 

0.46 

0.86% 

neutron.create_security_group 

0.081 

0.094 

-16.05% 

neutron.create_network 

0.113 

0.179 

-58.41% 

neutron.create_router 

0.077 

0.053 

31.17% 

neutron.delete_security_group

0.092 

0.104 

-13.04% 

分析

从上述表格中可以看到OVN对性能提升最猛的就是"nova.boot_server"。这是测试不只是衡量从Neutron加载配置所花时间,同时也衡量了提供网络功能所花的时间。(译者注:这个"server"其实就是虚拟机)

当Nova 启动一个虚拟机时,得先等待Neutron发出的端口可用事件。收到这个事件后,虚拟机才会被启动,启动完成时变为ACTIVE状态。ML2+OVS 和OVN 都使用这个机制。我们的测试场景测量了虚拟机变为ACTIVE状态所花时间。

在未来的测试中,我们将把这个Nova和Neutron间的同步机制关闭,再来比较ML2+OVS 和OVN的测试结果。这将确认等待Neutron报告端口可用的过程中花费了额外的时间。

我要说明一点,你不应该关闭这个同步机制。关闭这个机制的唯一原因为:不是所有的Neutron后端都支持该同步机制(ML2+OVS and OVN都支持这个同步机制 )。实施同步机制后,就能避免出现竞争状态。同时也保证在启动虚拟机之前,网络就是可用的。这个问题就是花费多长时间能让Neutron提供可用的网络。 未来将分析Neutron (ML2+OVS)在提供网络功能的过程中,到底在哪里花费了大部分的时间。 

 

 

英文原文链接:https://blog.russellbryant.net/2016/12/19/comparing-openstack-neutron-ml2ovs-and-ovn-control-plane/

因文人能力有限,翻译过程中难免出现疏漏。如果您有疑问请及时知会博主。欢迎交流

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OVN是OVS 5倍的性能--性能测试报告 的相关文章

随机推荐

  • C++实验:多态性与虚函数

    C 43 43 实验 xff1a 多态性与虚函数 1 实验目的 xff08 1 xff09 了解多态性的概念 xff08 2 xff09 了解虚函数的作用及使用方法 xff08 3 xff09 了解静态关联和动态关联的概念和用法 xff08
  • 2014流水账

    欢迎转载 xff0c 转载请注明出处 本文地址 xff1a http blog csdn net zhenggaoxing article details 42386821 三天元旦小长假结束了 xff0c 先来回顾下三天的假期 xff1a
  • IOS中文排序学习

    前言 xff1a 最近有中文排序的需要 xff0c 发现系统没有提供中文排序的方法 xff0c 于是参考学习了网上前辈的代码实现了中文排序功能 xff0c 本文记录的就是学习实现中文排序的过程 实现英文排序 系统提供了英文排序的方法 写了一
  • IOS 定制中间突出UItabBar

    前言 xff1a 公司的项目需要定制一个中间突出的TabBar xff0c 在github 上找到一份可以参考的代码 xff08 虽然是四年前的 xff0c 但是还是很有参考价值 xff09 网址 xff1a https github co
  • Xcode删除所有断点

    问题是这样的 xff1a 接手新的项目 xff0c 顿时吓尿了 xff1a 整个程序有无数个断点 xff0c 那么如何一次性删除呢 xff1f 如下图 xff1a 点击Belete Breakpoints 就可以了
  • VSCode重新启用“错误波形提示”

    2020 06 09 更新常见问题 昨天晚上写伪码的时候 xff0c 看着VSCode的错误提示实在是心烦 xff0c 就手贱点了一下 禁用错误波形提示 xff0c 也就是disable error squiggles xff0c 但写完之
  • TortoiseSVN使用教程[多图超详细]

    安装及下载client 端 下载Windows 端程序 xff1a http tortoisesvn net downloads 一般而言 xff0c 如果是32 bit的Windows XP 应该使用TortoiseSVN 1 4 x x
  • 将UIColor转换为RGB值

    objc view plain copy 将UIColor转换为RGB值 NSMutableArray changeUIColorToRGB UIColor color NSMutableArray RGBStrValueArr 61 NS
  • 业余时间你在做什么,你就会变成什么样的人?

    改变 xff0c 从业余时间开始 博客定位 xff1a 技术 43 思考 其余统统不要 2017 xff0c 我来了 xff01
  • Xcode9 无证书真机调试

    写在前面 公司分配了新的测试机 证书99台名额已满 所以上网找教程 学习了一下如何使用Xcode无证书进行真机调试 一 创建证书 1 运行Xcode xff0c Xcode Preference 添加账号 xff08 能在appstore下
  • CSP考试复习:第一单元 C++语言基础 1.1 程序结构

    第一单元 C 43 43 语言基础 1 1 程序结构 1 程序框架 注释 xff1a 注释有两种 xff0c 一种是 xff0c 另一种是 必须单独放置一行 xff0c 或代码所在行 的后面 xff1b 而 成对存在 xff0c 可以插入到
  • Intel Realsense T265开箱测试

    前言 xff1a 最近因为要做VIO xff0c 在实验室蹭到一个Realsense T265来用 xff0c 仅此记录下简单测试过程 xff08 官方文档写非常清楚 xff0c 建议详细阅读 xff0c 链接 xff1a https gi
  • posix thread介绍

    xfeff xfeff posix thread是 操作系统级 xff08 OS level xff09 的API规范 xff0c 主要用来定义线程及线程间同步的相关操作 xff0c 采用C语言定义 posix规范主要在unix like类
  • PX4飞控之自主起飞Takeoff控制逻辑

    本文主要以PX4飞控1 5 5版本为例 xff0c 介绍Navigator中自主起飞 xff08 Takeoff xff09 算法控制逻辑 注 xff1a mission任务中的自主起飞与此模块不同 Takeoff与导航中的其他模块类似 x
  • PX4飞控之导航及任务架构

    本文重点介绍PX4飞控的Navigator和mission控制框架和逻辑 Navigator导航部分是无人机自主飞行控制的核心所在 xff0c 其中包括自主起飞 自主降落 自主返航 自主任务以及GPS失效保护等各个部分 搞懂这个部分有助于理
  • PX4飞控之位置控制(1)整体架构

    位置控制是无人机飞控的核心算法之一 xff0c 一方面根据commander中的flag标志位和Navigator中提供的航点信息进行控制 xff08 自主模式下 xff09 xff0c 另一方面得到期望姿态角 xff08 setpoint
  • spring整合ehcache找不到org.springframework.cache.ehcache.EhCacheCacheManager的解决方案

    一般org springframework cache ehcache EhCacheCacheManager和org springframework cache ehcache EhCacheManagerFactoryBean会同时找不
  • CC3200之GPIO引脚分析

    预备知识 xff1a xff08 1 xff09 volatile关键字 xff1a volatile定义的变量一般为无需开发者自己赋值 xff0c 会自动改变的变量 在普通的程序中 xff0c 编译器都具有优化功能 xff0c 为了避免浪
  • OpenStack 之 OVS介绍

    一 概述 Open vSwitch的官方定义 xff1a Open vSwitch是一个具有工业级质量的多层虚拟交换机 通过可编程扩展 xff0c 可以实现大规模网络的自动化 xff08 配置 管理 维护 xff09 它支持现有标准管理接口
  • OVN是OVS 5倍的性能--性能测试报告

    我们已经对OVN做了许多次的性能测试 xff0c 但是缺少一个OVN和 xff08 ML2 43 OVS xff09 的性能对比测试 我和许多人一起对比了这2种后端 本文是第一部分 xff1a 控制平面的性能对比 后面会另外发文公布数据平面