|
|
qos基础, s5 v$ u" a8 y% T
在Linux系统上,无论去使用怎样的工具,最终都要使用TC来做流量控制。TC利用队列规定建立处理数据包的队列,并定义队列中的数据包被发送的方式, 从而实现对流量的控制。Linux内核中支持的队列主要有:
0 v# L( F, t8 A7 m3 zTBF(Token Bucket Flow令牌桶过滤器)
! f9 H* U1 A d6 V$ Lpfifo_fast(Third Band First In First Out Queue先进先出队列)
5 }/ n, L+ J/ P( YSFQ(Stochastic Fairness Queueing随机公平队列)9 z* J' ~2 Y7 I F$ E$ r
HTB(Hierarchy Token Bucket分层令牌桶)等。8 k( s" i U5 C7 P! m0 O
$ M$ [6 t& B$ X5 _
一。内容: J2 R5 K$ Y [4 a4 v$ s; q4 \
OpenStack在L版中支持网络qos,这是一个非常实用的功能,以前的版本中,对于虚机网络流量qos,我们只能通过Flavor来设置qos,这需要去维护很多个Flavor来保证不同的qos需求,因此Flavor-qos非常不灵活。" D& D6 K1 B; b% v9 y+ w
Neutron中qos限制发送数据采用TBF队列。
2 `- H2 E& T1 z1 g5 `以下是通过限制端口来达到限速目的,也就是将qos规则绑定在虚拟机网卡对应的tap设备上限速。主要设置两个参数,一个是rate带宽,一个是burst,neutron命令中分别对应max-kbps和max-burst-kbps! ^9 V' ^# ^; B/ Z+ W
7 U. x0 N& R) H. [0 B) Y9 L% c( Y
二。配置3 d# v( X8 [) V( R8 L' K
1.修改neutron-server的neutron.conf配置( Y+ g. V! }2 L7 P$ A% G
# vi /etc/neutron/neutron.conf
' J% q" v7 w# f3 p[DEFAULT]
! Z! h- D3 h; C6 k9 Oservice_plugins =neutron.services.qos.qos_plugin.QoSPlugin) i! _; O" I ^! y! L# N
2.修改neutron-server的ml2_conf.ini配置
. q7 G$ p1 k% o- G4 K# vi /etc/neutron/plugins/ml2/ml2_conf.ini
3 x* n: t" i. \3 B, V5 ]# W[ml2]* F6 P1 l0 _1 N2 L+ P: j
extension_drivers = qos
5 L, Q# y7 S3 @5 L$ s/ }) w3.修改neutron-linuxbridge-agent的linuxbridge_agent.ini配置
4 o1 z; c1 W+ F" Y# vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini' m6 ?2 M- ~5 e( r& D# `) g7 c
[agent]
( _$ d9 S2 j% z5 {- Rextensions = qos
0 k3 C6 t/ @' S& R三。规则7 w$ V* v9 H! R9 X
1.bandwidth limit rule
& B' M5 T: H) b6 N0 i' q2.minimum bandwidth rule ~9 J* u; G: S
四。使用- g6 {7 w# G2 K* H
1.创建qos-policy,并给policy设置rule/ c5 A# m' y H+ [9 K- L# A
neutron qos-policy-create bw-limiter
3 B( L1 _, c" w( Sneutron qos-bandwidth-limit-rule-create bw-limiter --max-kbps 3000 --max-burst-kbps 3004 F, `% O A5 r, T' C" U. H: S
2.给port或网络设置qos-policy
% w! \, u9 W/ _1 Q" @neutron port-create --qos-policy bw-limiter
5 r7 d0 m9 o1 v6 a" \( bneutron port-update --qos-policy bw-limiter | --no-qos-policy' z/ N( v0 Y6 D% G; @
neutron net-create --qos-policy bw-limiter7 { s# \! h. Z+ c" ~8 I
neutron net-update --qos-policy bw-limiter | --no-qos-policy, O% t8 |& o1 [8 B. X$ ^8 l
使用举例:
7 z. b* O O# q) P) |) [5 p) a: f# tc -s qdisc show dev tap77f1557f-fd
. y$ W7 T( w/ b* e/ ]( u* ^qdisc 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- p* w, J4 Q7 y: f5 ^+ r; H1 @0 E7 o
Sent 91481254 bytes 69639 pkt (dropped 0, overlimits 0 requeues 0)
7 R0 ]$ J ^ Y9 a# {% rbacklog 0b 0p requeues 0& W/ G& S4 l5 M
qdisc ingress ffff: parent ffff:fff1 ----------------$ @! [$ V& r. j
Sent 155682 bytes 2195 pkt (dropped 835, overlimits 0 requeues 0)
1 E" s" Z- k$ M! O/ Xbacklog 0b 0p requeues 0
9 E2 V! k1 _7 `8 o, }# tc filter show dev tap77f1557f-fd parent ffff:# F/ p+ l, I% q5 {, e7 ]$ s
filter protocol all pref 49 basic
7 g7 J, X% n4 W( U4 h4 {filter protocol all pref 49 basic handle 0x19 [ h( P+ \2 \0 V& h. K) W
police 0x5 rate 30Kbit burst 3Kb mtu 64Kb action drop overhead 0b
" N9 Y4 h; N0 x% Y% C# qref 1 bind 15 y( ?! S' u- Y6 z
# D9 l8 i4 x" B$ C: r- r |
|