【openstack网络】neutron专项总结七:qos特性

一、OVS qos原理

QoS在OVS中的使用和传统网络一样,主要分为如下两种:

Policing管制介绍

Policing用于控制接口上接收分组(ingress)的速率,是一种简单的QoS的功能,通过简单的丢包机制实现接口速率的限制,它既可以作用于物理接口,也可以作用于虚拟接口;

Shaping介绍

Shaping是作用于接口上的出口流量(egress)策略,可以实现多个QoS队列,不同队列里面处理不同策略;

OVS自身并不实现QoS功能,QoS功能的实现是在linux内核中,OVS只是能够配置部分OVS支持的QoS类型。如果需要一些OVS不支持的QoS类型,可以通过patch来支持这些配置,也可以通过传统的TC工具直接进行QoS的策略配置。

Policing实现

policing在OVS中采用ingress_policing_rate和ingress_policing_burst两个字段完成ingress入口限速功能,该两个字段放在Interface表中,由于QoS的内核实现都是原有的linux的sch_xx模块,所以这里不分析内核实现。

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

eth1:加入ovs桥端口的网络接口名称;
ingress_policing_rate:为接口最大收包速率,单位kbps,超过该速度的报文将被丢弃,默认值为0表示关闭该功能;
ingress_policing_burst:为最大突发流量大小,单位kb。默认值0表示1000kb,这个参数最小值应不小于接口的MTU,通常设置为ingress_policing_rate的10%更有利于tcp实现全速率;
通过命令ovs-vsctl list interface eth1可以查看配置:
在这里插入图片描述-

Shaping整形实现

shaping用于实现出口流量的控制,使用了队列queue,可以缓存和调度数据包发送顺序,比policing更加精确和有效,在OVS的数据表中主要使用QoS和Queue两张表。

ovs-vsctl set port eth1 qos=@newqos -- 
--id=@newqos create qos type=linux-htb queues=0=@q0 -- 
--id=@q0 create queue other-config:max-rate=100000000

其中
–id=@q0 create queue other-config:max-rate=100000000创建q0队列,设置最大速率100M,通过ovs-vsctl查看配置的Queue表内容如下:
在这里插入图片描述
–id=@newqos create qos type=linux-htb queues=0=@q0 创建qos规则newqos,类型为linux-htb,并连接key值为0的队列q0,通过ovs-vsctl查看配置的Qos表内容如下:
在这里插入图片描述
set port eth1 qos=@newqos 设置接口eth1的qos为newqos,通过ovs-vsctl list port查看配置的port表内容如下:
在这里插入图片描述

二、qos测试(使用iperf3 工具)

iperf工具介绍

Iperf3 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失.对于每个测试,它都会报告带宽,丢包和其他参数,可在Windows、Mac OS X、Linux、FreeBSD等各种平台使用,是一个简单又实用的小工具。

测试模型

在这里插入图片描述

policing测试

在vCPE1的eth1桥端口上配置policing配置(这里注意vxlan端口不能配置QoS策略,因为OVS的QoS策略配置等同于TC的配置,而vxlan端口在OVS之外是不可见的)

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

分别在pc1上和pc2上运行iperf3
pc2作为服务器的命令:

iperf3 –s -p 12345

pc1作为客户端的命令:

iperf3 -c 192.168.0.2 –p 12345 -t 500

测试结果如下:
在这里插入图片描述

queue测试

在vCPE1上eth1桥端口上创建htb算法的QoS策略,同时创建两个队列q0和q1,其中q0限速1Mbps,q1限速100Kbps,命令如下:

ovs-vsctl set port eth1 qos=@newqos --
--id=@newqos create qos type=linux-htb queues=0=@q0,1=@q1 -- 
--id=@q0 create queue other-config:max-rate=1000000 -- 
--id=@q1 create queue other-config:max-rate=100000

分别在pc1上和pc2上运行iperf3
pc1作为服务器的命令:

iperf3 –s -p 12345

pc2作为客户端的命令:

iperf3 -c 192.168.0.1 –p 12345 -t 300

测试结果如下所示,可以看出,设置两个队列后,默认走了第一个q0队列(1Mkbps限速的测试误差较大,可能是由于软件和网络环境问题引起,暂时忽略这些误差)
在这里插入图片描述
接下来根据数据包条件选择不同队列,这里指定源地址为192.168.0.2的数据走q1队列,通过配置OVS流表完成队列设置,命令如下:

ovs-ofctl add-flow br priority=5, ip,nw_src=192.168.0.2, 
actions= set_queue:1,normal

再次运行iperf3,测试结果如下,可以看出测试数据按照q1队列进行了限速处理。
在这里插入图片描述

priority测试

priority主要用来指定队列的优先级,可以用来保证重要的数据进入优先队列而优先发送,下面给出测试priority的配置方法(配置在vCPE1上):
面给出测试priority的配置方法(配置在vCPE1上):

  • 创建QoS策略newqos并限速1Mbps,创建两个队列q0和q1并分别指定优先级(值越小优先级越高)
ovs-vsctl set port eth1 qos=@newqos -- 
--id=@newqos create qos type=linux-htb 
other-config:max-rate=1000000 queues=0=@q0,1=@q1 -- 
--id=@q0 create queue other-config:priority=0 -- 
--id=@q1 create queue other-config:priority=1
  • 配置OVS流表,源地址为192.168.0.2的进入队列q0,源地址为192.168.0.3的报文进入队列q1(组网参见vCPE网络结构章节)
ovs-ofctl add-flow br priority=5,ip,nw_src=192.168.0.2, 
actions=set_queue:0,normal
ovs-ofctl add-flow br priority=5,ip,nw_src=192.168.0.3, 
actions=set_queue:1,normal

PC1作为服务器启动两个进程分别监听不同端口:

iperf3 –s -p 12345
iperf3 –s -p 54321

PC2和PC3作为客户端同时发起测试,其中PC2命令为

iperf3 -c 192.168.0.1 –p 12345 -t 500

测试结果如下:
在这里插入图片描述
PC3命令为

 - iperf3 -c 192.168.0.1 –p 54321 -t 500

测试结果如下
在这里插入图片描述
从上面的测试结果可以看出,在vCPE1上,在eth1端口上,从PC2发送过来的数据根据流表进入了队列q0,从PC3发送过来的数据根据流表进入了队列q1,由于q0的优先级高于q1,所以优先转发PC2过来的数据到PC1,因此PC2和PC1之间的测速带宽远远高于PC1和PC3。
通过上述针对OVS中QoS的相关功能测试可以得出,如果仅仅是想针对OVS中的桥端口进行限速,最简单的方法就是使用policing策略;如果想根据不同条件进行不同级别的限速(比如根据IP地址、port、协议等条件),可以创建不同队列queue,然后采用OVS中的流表条件指定数据到不同的队列,从而完成不同业务数据的限速策略;如果想对重要的业务数据进行质量保证,可以设置队列的priority,这样在网络拥塞的时候就会优先发送高优先级队列中的数据。

三、neutron qos的实现

QoS被定义为保证带宽、延迟、抖动和可靠性等特定网络要求的能力,以满足应用提供商和终端用户之间的服务级别协议(SLA)。
交换机和路由器等网络设备可对流量进行标记,以便以更高的优先级处理流量,从而满足SLA中约定的QoS条件。在其他情况下,某些网络流量(如IP语音(VoIP)和视频流)需要在最小带宽限制下传输。在没有网络QoS管理的系统中,所有流量都将以 "尽力而为 "的方式传输,从而无法保证向客户提供服务。
QoS是一种高级服务插件。QoS在多个层面上与OpenStack网络代码的其余部分解耦,并通过ml2扩展驱动程序提供。

neutron配置

要在具有网络架构中所述架构启用服务,请按照以下步骤操作:
在控制器节点上:

  1. 将 QoS 服务添加到 /etc/neutron/neutron.conf 中的 service_plugins 设置中。例如
service_plugins = \
neutron.services.l3_router.l3_router_plugin.L3RouterPlugin,
neutron.services.metering.metering_plugin.MeteringPlugin,
neutron.services.qos.qos_plugin.QoSPlugin
  1. 可选择在/etc/neutron/neutron.conf的[qos]部分设置所需的通知驱动(默认为message_queue)。
  2. 为启用浮动IP QoS扩展qos-fip,可在/etc/neutron/neutron.conf中设置service_plugins选项,使其包括router和qos。例如
service_plugins = router, qos
  1. 在 /etc/neutron/plugins/ml2/ml2_conf.ini 中,在 [ml2] 部分的 extension_drivers 中添加 qos。例如
[ml2]
extension_drivers = port_security, qos
  1. 编辑所用agent的配置文件,在配置文件的 [agent] 部分将扩展名设置为包含 qos。代理配置文件位于 /etc/neutron/plugins/ml2/<agent_name>_agent.ini,其中 agent_name 是使用的代理名称(例如 openvswitch)。例如
[agent]
extensions = qos

neutron qos应用

创建qos-test

openstack network qos policy create qos-test

创建出方向qos

openstack network qos rule create --type bandwidth-limit --max-kbps 3000 --max-burst-kbits 3000 --egress qos-test

创建入方向qos

openstack network qos rule create --type bandwidth-limit --max-kbps 5000 --max-burst-kbits 5000 --ingress qos-test

为网络端口绑定qos

openstack port set --qos-policy qos-test 667c2a1d-4865-48bb-8b22-7936ee3f4fd3

查看端口详情
在这里插入图片描述
查看qos详情
在这里插入图片描述
查看数据面 ovs qvo667c2a1d-48 (br-int对应的口)上的 egress 规则(以 ovs 的视角,egress 就是 虚机的 ingress,所以这里看到的 5000000, 就是 neutron 上对虚机 ingress 配置的 5000,它们只是单位不同)
在这里插入图片描述或者使用 ovs-appctl 命令查看
在这里插入图片描述
ingress规则:
在这里插入图片描述

浮动ip qos 原理(待详细打开分析)

neutron l3 agent 的一个插件叫做 fip_qos,neutron 就是通过该插件实现的对浮动 ip 进行限速

原理就是,对浮动 ip 绑定 qos 策略时,会通过 Linux TC(Traffic Control) 对路由器设置规则

对于传统中心化路由器(HA/legacy),这些规则将被添加到网络节点 qouter 命名空间,并且 traffice control device 名称为 qg-device(前缀为 qg- 的设备)

对于分布式路由器(DVR), 这些规则将被添加到计算节点 qouter 命名空间,并且 traffice control device 名称为 rfp-device(前缀为 rfp- 的设置)

例如,在分布式路由器环境下,我们将用户子网绑定到 id 为 80e80f56-6f7e-4994-bc0a-0f836b632fa6 的路由器,在该子网下创建虚机,绑定浮动 ip 后,对浮动 ip 进行限速, 限速为 1M

四、neutron qos的源码原理(待补充)

五、参考文档:

https://www.sdnlab.com/19208.html
https://blog.csdn.net/zhouzixin053/article/details/111317101

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值