|
|
测试qos过程' j. O! b& u O$ z. `# ?
测试环境介绍
w. b+ u9 l* a' I* O+ ]; A7 h7 q& C3 X/ |7 a" C2 p; }+ A5 H2 Z
创建两个网络,每个网络下创建一台虚拟机,将两个网络绑在同一个路由器下面,通过iperf测试两台虚拟机之间的带宽。. r# _: _6 r4 }: m. \' U
9 T$ r1 V/ E6 Z% ?) l
首先创建两个网络,分别是t2cloud_net1(172.160.1.0/24)和t2cloud_net2(172.160.2.0/24),两个网络下各创建一台虚拟机,分别是qosvm1和qosvm2。
# Z1 s( T8 _$ H4 C9 }. v) j
( p! W$ X" A8 n9 f接下来创建路由器router,将两个网络绑定在路由器下,路由器出口选择外部网络external_net。
+ F6 v/ v/ N0 f# I- i5 _
3 r9 X. a- l7 b* \& O G2 F! F0 b网络拓扑如下
! U" h5 @# B* s: o, B. l7 O1 B* A" q, Y2 a0 a
4 M0 W, A2 S) b( {接下来要做的就是查询虚拟机网卡对应port的信息,以qosvm1为例。8 d- m- \8 P8 m" w! b
/ Q, ~, U& u4 U# X5 lneutron port-list |grep 172.160.1.
8 M$ V/ C# d ?: T; F# U- I u, h
) ?- h0 _/ X7 c( \; D6 g4 X x& a; V- J# v
172.160.1.1为网关地址,172.160.1.2和172.160.1.3为两个dhcp服务地址,172.160.1.4为qosvm1虚拟机地址。8 [4 Z& Y8 ?6 E- ~. X# N' r
0 O# W# P: J. i' t" }
查看虚拟机所在节点. ^7 D& G' a8 m* C
7 V8 J* {' U" ^ W, |; |nova list--all |grep qos
! u0 d1 U0 S; p- L3 i0 X3 h& F
: h. L3 q+ k. {nova show b40056c3-b9ce-4031-8125-96a7a79f74a2
P6 S( i; ]$ ]$ \: r, F5 d' ]3 x: X# q7 X
可以看到qosvm1虚拟机在sr-computer-27计算节点上
3 w0 }0 r' J4 O" R! Q7 |0 T0 I9 |
& R2 T! [+ Q+ q6 Z0 J
登录到sr-computer-27计算节点上,查看网络对应的网桥和虚拟机网卡tap设备号(neutron中一个网络对应物理机上的一个网桥,虚拟机网卡对应网桥上一个tap设备)。
' l( |8 q/ V" c' E5 b! t# g; T9 g0 Y- J2 W3 m
neutron net-list |grep t2cloud_net16 ^6 j" g4 H0 ?( Q- [
' K( X' f# F. y2 r; N5 }
brutl show
8 r6 @% O4 _# g: h! \
4 Q) w7 M# Z7 \; Y" m* G
}0 T& m1 G$ a' a查询路由器所在物理节点0 e2 L. \9 L$ {
6 f, O7 }3 A j9 m: g- _+ n" Q
neutron router-list|grep router
}) _/ ]; X+ p7 D( B+ G F+ Q
; P6 |- c( X3 i& Rneutron l3-agent-list-hosting-router 7aa3ebbe-34a3-47e8-ab06-2e7f89b6053f
3 h0 F! O O0 Q6 l* l1 ]1 V# m; `; V
可以看到路由器在sr-compuer-28节点上2 H' I m d1 W7 t
* F3 s' s' |. v, C& Q: R- s# _8 a( H2 g" t W9 Y' @
qosvm2也采用上述方法来获取相关信息。( p$ W$ Y. o( d& e1 R d3 o6 G( [
+ I, ^ T& F6 b# y% L* v" C) g总结一下上面查询的结果; l- R: @) h/ L" ~$ y7 g
/ h2 i; V: ?3 H; m
虚拟机qosvm1在计算节点sr-computer-27上,网卡对应tap设备tap9873a7ae-41,所在网络对应网桥为brq307fde1c-61,网桥出口vxlan-85。
* c B# i+ |3 m! ^2 i0 O/ T
# d$ t7 e4 j0 P( u: D虚拟机qosvm2在计算节点sr-computer-32上,网卡对应tap设备tap0b55bd71-2f,所在网络对应网桥为brqf8fd20d0-e6,网桥出口vxlan-6。
5 P4 l! s" U2 D: U o4 a+ ]' w& c4 T" @" A& S! Q T3 h
路由器router在节点sr-computer-28(计算+网络混合节点)上,对应名称为qrouter-7aa3ebbe-34a3-47e8-ab06-2e7f89b6053f,连接net1设备为tapa64b82b1-e4,连接net2设备为tap460865e7-03,暂时不考虑dhcp服务。
& w. k: S: Y. x0 ? W9 C( Y% N$ y
; ]. n7 G$ `# z9 v根据查询结果,以下是简化的拓扑图
- Q7 Z8 w1 Y; b* [) O# k- V
; }# ~/ m5 n9 `$ a) b. `% q, X& ?' l; }: {, J' K: B
带宽测试8 P- Y1 m u; N
qosvm1如果与qosvm2通信,需要经过网络节点上的虚拟路由来转发2 e9 f- ~" |! k
7 s ]1 M6 V, Q' r6 D: U8 J首先不做任何限制,用iperf来测试qosvm1和qosvm2之间的网络带宽,qosvm1(172.160.1.4)做client端,qosvm2(172.160.2.4)做server端。+ g; V3 a5 g% ^ `! {/ ?( ?
2 [' M, j/ `0 `6 f( r
在server端运行iperf -s1 ~9 h# `% {: ~, ^) P/ h6 Y
2 ~9 s! l/ {; F8 @: |
然后client运行 iperf -c 172.16.2.4 -i 1 -t 5 –r
( D C, T9 x$ N7 n# ]- Y" Q6 W" t# h3 e- J& }, T/ f N1 n
实际测试中可以运行更长时间,得出一个更稳定的值
5 ?8 `7 K: s" }0 M2 R% i8 l n
# q; S+ t2 f; K( g0 q7 L/ ~' D, s, ]$ H# I! W0 M7 J
不做任何限制的情况下,qosvm1对qosvm2的上传带宽为596Mbits/sec,下载带宽为693Mbits/sec
8 @; O* v- g3 ]
8 J6 x% I5 F9 N& ]& r对计算节点sr-computer-27 上的tap9873a7ae-41设备进行限制,限制上传带宽100Mbps,下载带宽200Mbps1 g1 |1 V- b/ X9 ~
( l8 T; [+ d- N% D/ Y首先创建qos策略& j1 T x3 [& U( B ^3 ^/ w
4 W; p0 J7 U( b( U
neutron qos-policy-create --shared t2cloud_qos
$ m. V0 A8 V0 f" z
- `4 W% l/ j1 o1 m0 j" m- E f- y/ b6 ?: p
然后创建对应规则,分别限制上传带宽和下载带宽& j9 M# f3 x; D- O
5 S* |. @; n; v( N
neutron qos-bandwidth-limit-rule-create --max-kbps=100000 --max-burst-kbps=100000 t2cloud_qos --direction ingress
( J: q; F' k+ [" @! t) {! `( U0 S$ M0 T0 y; e4 n
neutron qos-bandwidth-limit-rule-create --max-kbps=200000 --max-burst-kbps=200000 t2cloud_qos
# e, u* [# a2 N' ~9 b4 p( ~ S4 @. `1 s9 X) Z
( N3 U' M* Y }$ T
需要注意的是,端口的ingress对应虚拟机的上传带宽,egress对应虚拟机的下载带宽! E; `) T3 j8 I! T
6 Q; r! n9 H8 C+ M$ J将qos规则与虚拟机对应的port绑定
& r6 _2 g3 q% b1 i
9 C3 v1 ^) c0 G: lneutron port-list |grep 172.160.1.4
, f7 g2 ~8 ~" M7 ?7 Y
6 D5 H/ k- ~3 S) N/ q; c% Y2 bneutron port-update --qos-policy 0be11a7d-97e3-4dd9-a74e-616e7bdf65c99873a7ae-41ad-4b30-8c3e-1167a7e1c3bd. W+ `' R( S* ~5 H
' ?0 U5 m9 \% d: O5 H
neutron port-show 9873a7ae-41ad-4b30-8c3e-1167a7e1c3bd
5 H" t; I' ]& |4 }" u, d* u$ O
/ k% @3 v4 \- J因为neutron 的qos最终是通过linux tc来实现。可以使用tc命令查看设置是否生效; j; J/ A) A" e# v0 K$ U
. u t6 k1 q! A+ G# ?( I I
tc qdiscshow dev tap9873a7ae-41' V% N* B7 j! @
/ W* L% v# S9 \* G$ Ktc filtershow dev tap9873a7ae-41 parent ffff:
" s' y' i" _ n+ M3 L* J
4 p1 X) I* c' N4 z+ f! V6 f, C% x4 O% ?4 y7 P2 i: t
再次用iperf测试带宽" C$ v' G& M2 W8 X& t+ k% Y
$ B1 g& s, _6 v9 |+ a" h' b7 C可以看出,稳定值基本限制在qos限制的范围内" E) a4 F9 C: s$ R- B
. c1 K$ i1 t: H" B9 y4 l: q! |测试总结+ `) J. i1 Z% P# Y$ X
以上测试了qos中最简单的场景,通过限制虚拟机网卡对应tap设备来限制虚拟机之间的通信带宽,过程中有过一些困惑和问题,现总结如下:
8 T. x0 ?5 v) p& ~, \$ C! b( [9 Q L0 d' t# z+ u0 ^4 E0 W
Iperf使用tcp测试带宽,短时间内的数据不是特别准确,特别是带宽上限的测试,因此尽可能测试时间长点,得出一个稳定的带宽值( d s) u9 Y0 Y1 V+ |( B% I" X. I& `
, R ]2 h* s" `' W, V. l/ ?
关于max-kbps和max-burst-kbps的理解,max-kbps比较容易理解,就是最大带宽,max-burst-kbps在tc里面会转成字节单位burst,指的是令牌桶的大小,如果桶中有多余的令牌,允许短暂的突发流量通过,也就是说令牌桶越大,也就允许更多的突发流量通过。: y5 m) S' Z+ g) @* D( y
# z$ k- T( y+ W7 I3 ?
neutron还可以对一个网络设置qos1,这样所有创建在该网络下的虚拟机都会使用该qos1,如果对虚拟机再单独设置qos2,那么对于该虚拟机来说,只有qos2生效。目前对网络设置的qos只会作用于虚拟机对应的port,不会影响其他port(例如dhcp)。2 @: o5 i; d/ @: d
. e8 I0 Y0 ?6 y% x
k6 Y P0 v4 H1 r& m. P( Q) t
|
|