|
|
qos基础
+ D8 H! ?& z* f' i6 }: B在Linux系统上,无论去使用怎样的工具,最终都要使用TC来做流量控制。TC利用队列规定建立处理数据包的队列,并定义队列中的数据包被发送的方式, 从而实现对流量的控制。Linux内核中支持的队列主要有:
( H' k' m" F. P3 K2 V2 xTBF(Token Bucket Flow令牌桶过滤器); _' J7 s) T+ u5 a5 W& A
pfifo_fast(Third Band First In First Out Queue先进先出队列)
6 Q5 `0 a2 r# X, pSFQ(Stochastic Fairness Queueing随机公平队列)
9 q% F1 W7 G6 B( W7 I$ p% H( HHTB(Hierarchy Token Bucket分层令牌桶)等。1 v# f9 J$ H% \" U
! y# ?, J4 A+ U: p5 J
一。内容% r8 L5 d' m$ c, J* D* Q$ J
OpenStack在L版中支持网络qos,这是一个非常实用的功能,以前的版本中,对于虚机网络流量qos,我们只能通过Flavor来设置qos,这需要去维护很多个Flavor来保证不同的qos需求,因此Flavor-qos非常不灵活。9 C% v$ i$ I$ E
Neutron中qos限制发送数据采用TBF队列。
4 A8 m5 J" \. F2 M# g以下是通过限制端口来达到限速目的,也就是将qos规则绑定在虚拟机网卡对应的tap设备上限速。主要设置两个参数,一个是rate带宽,一个是burst,neutron命令中分别对应max-kbps和max-burst-kbps& c0 a$ M8 z5 f0 f
+ e- q7 k8 g% O
二。配置+ M F) Z( G: N: H
1.修改neutron-server的neutron.conf配置
# M$ W7 ] `( m: \% ]1 H# vi /etc/neutron/neutron.conf
+ ^4 T7 K: s' M" ~/ A3 V% `" n[DEFAULT]$ t) G9 g% p/ X3 \
service_plugins =neutron.services.qos.qos_plugin.QoSPlugin
0 ?& X# }$ w+ Y0 r0 S2.修改neutron-server的ml2_conf.ini配置- X3 l0 U0 G4 q @: Y. \
# vi /etc/neutron/plugins/ml2/ml2_conf.ini
& E; u- W$ N3 D3 M: }# H' Q. C[ml2]
- ^6 }4 f$ Q" Q( Iextension_drivers = qos
1 |" J" m0 F* m |3.修改neutron-linuxbridge-agent的linuxbridge_agent.ini配置
. ~) c' [/ {; {9 ^3 v, w6 U# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
4 r5 ]/ }4 G& h% L4 t" o[agent]
) L k( R8 Y) w' Textensions = qos
9 Q' y% c2 g. i三。规则0 A) m! d) g! y7 U
1.bandwidth limit rule
, {# q `. R' A' |( d0 K2.minimum bandwidth rule
$ O/ O& g! s/ |# D- D0 d四。使用
- o7 J. }" p: I) o$ v+ n1.创建qos-policy,并给policy设置rule# e: {' B4 [3 I. }, P/ r* w8 ?
neutron qos-policy-create bw-limiter
, _! { W. Z' F: l* @9 o, vneutron qos-bandwidth-limit-rule-create bw-limiter --max-kbps 3000 --max-burst-kbps 3004 R8 |4 K. D4 j7 X+ {$ o
2.给port或网络设置qos-policy
* T0 K: @8 c4 _. {neutron port-create --qos-policy bw-limiter
0 T& G0 f) s3 {" d, S8 X3 Bneutron port-update --qos-policy bw-limiter | --no-qos-policy9 W7 y% ]# p; m1 J; Y! I* \
neutron net-create --qos-policy bw-limiter
' s8 o7 {9 ]6 t! ?neutron net-update --qos-policy bw-limiter | --no-qos-policy* \/ p- C/ B J# R9 l& ^! P; z) L
使用举例:4 v R0 \4 u1 Y8 |
# tc -s qdisc show dev tap77f1557f-fd
& y- ]. d9 w* b+ Vqdisc pfifo_fast 0: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
( _: q9 w* Y5 S' u" TSent 91481254 bytes 69639 pkt (dropped 0, overlimits 0 requeues 0)
. p2 l0 F( ^+ C* ubacklog 0b 0p requeues 02 P+ w) c% {( x! W9 @! U; M
qdisc ingress ffff: parent ffff:fff1 ----------------1 b- F% R! N0 h; P0 Y6 d
Sent 155682 bytes 2195 pkt (dropped 835, overlimits 0 requeues 0)' P, C/ Y; V# Q$ u5 T
backlog 0b 0p requeues 0
8 _; N% O- X m5 T9 {7 P# ~# tc filter show dev tap77f1557f-fd parent ffff:
/ [. \+ H) H) Z, l2 `filter protocol all pref 49 basic& v4 B9 {! b; Q) C L- t
filter protocol all pref 49 basic handle 0x1
: A& P$ J3 h! C* kpolice 0x5 rate 30Kbit burst 3Kb mtu 64Kb action drop overhead 0b) p& T1 i) k( D' M) i. c p4 J
ref 1 bind 1: _# S6 h& u4 J% P* Q
1 I0 z$ G; ~8 ^0 q3 [
|
|