在多租户云环境中细粒度调整 IBM AIX 7.1 和 Linux 上的网络服务质量 更新
 
- UID
- 1066743
|

在多租户云环境中细粒度调整 IBM AIX 7.1 和 Linux 上的网络服务质量 更新
在与 AIX 客户端相连的 Linux 服务器上配置网络 QoS- 分配静态 IP 地址
向 Linux 服务器和客户端 AIX 系统分配一个静态 IP 地址。
Linux 服务器 IP 地址 = 172.18.10.60
AIX 客户端 IP 地址 = 172.18.10.40
注意:确保这两个 IP 地址都是可到达的。
- 检查根排队策略 (qdisc) 是否存在
网络带宽整形是一种基于树的分层方法,其中,根 qdisc 构成基本单元(与内核通信的排队策略),被附加到与客户端相连的服务器网络接口。tc 命令(由 Linux 提供)是一个管理接口,我们在本例中使用它进行网络整形。(有关 tc 命令的更多信息,请参考 Linux 服务器的 tc 指南)。下面的步骤允许您检查是否存在与内核相连的网络带宽限定配置。本文假设不存在这些配置,并因此而创建了一个新的配置。
清单 1. 检查是否存在 qdisc1
2
3
| root@linuxserver:# tc qdisc show dev ethX0
root@linuxserver:# echo $?
0
|
确保没有根 -qdisc 与网络设备相连。如果有的话,请按照以下方式删除 -qdisc。
清单 2. 删除 qdisc1
2
3
| root@linuxserver:# tc qdisc del root dev ethX0
root@linuxserver:# echo $?
0
|
- 检查与 qdisc 相连的类
类构成了可编程的实体,它们与根排队策略相关。 清单 3. 检查是否存在类1
2
3
| root@linuxserver:# tc class show dev ethX0
root@linuxserver:# echo $?
0
|
- 检查是否存在过滤器
过滤器是操作实体,用于在所有与 Linux 服务器相连的 IP 地址中分离指定的 IP 地址。 清单 4. 检查是否存在过滤器1
2
3
| root@linuxserver:# tc -s –d filter show dev ethX0
root@linuxserver:# echo $?
0
|
在任意 tc 命令中包含 –s(统计)和/或 –d(细节)可以生成更详细的输出。
- 添加排队策略
向 ethX0(服务器的以太网卡,与 Linux 服务器相连,用于处理 AIX 客户端的请求)添加根 -qdisc。在这里,htb 指 hierarchical token bucket 类完整排队策略。有关的更多细节,请参阅 参考资料 小节。 清单 5. 添加根 -qdisc1
2
3
4
5
6
7
8
9
| root@linuxserver:# tc qdisc add dev ethX0 root handle 10: htb
root@linuxserver:# tc -s qdisc show dev eth0
qdisc htb 10: r2q 10 default 0 direct_packets_stat 29
Sent 3338 bytes 29 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
root@linuxserver:# tc -d qdisc show dev eth0
qdisc htb 10: r2q 10 default 0 direct_packets_stat 58 ver 3.17
|
- 创建子类策略
当创建了一个子类并将它附加到一个 qdisc 时,这将充当所有其他类的父类。该类的带宽参数等于接口的物理带宽的参数(这里假设接口物理带宽是 100 Mbps)。 清单 6. 添加一个子类1
2
3
4
5
6
7
8
9
10
11
12
13
| root@linuxserver:# tc class add dev ethX0 parent 10:0 classid 10:10 htb rate 100mbps
root@linuxserver:# tc -s class show dev eth0
class htb 10:10 root prio 0 rate 800000Kbit ceil 800000Kbit burst 101600b
cburst 101600b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 1016 ctokens: 1016
root@linuxserver :# tc -d class show dev eth0
class htb 10:10 root prio 0 quantum 200000 rate 800000Kbit ceil 800000Kbit
burst 101600b/8 mpu 0b overhead 0b cburst 101600b/8 mpu 0b overhead 0b level 0
|
您可以使用 ethtool 命令找到以太网卡的物理带宽,如下所示。有关 ethtool 命令的更多信息,参见 Red Hat Linux 发行版提供的手册。
清单 7. 在 Linux 服务器上使用 ethtool 命令识别物理网络带宽1
| root@linuxserver:# ethtool ethX0
|
- 向创建的子类添加一个叶类
添加一个叶类,其速度由方案中 AIX 客户端选择的参数确定。在下面的例子中,AIX 客户端选择的网络速度选项 1Mbps。 清单 8. 添加一个叶类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| root@linuxserver:# tc class add dev ethX0 parent 10:10 classid 10:100 htb rate 1mbps
root@linuxserver:# tc -s class show dev eth0
class htb 10:10 root rate 800000Kbit ceil 800000Kbit burst 101600b cburst 101600b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 1016 ctokens: 1016
class htb 10:100 parent 10:10 prio 0 rate 8000Kbit ceil 8000Kbit burst 2600b
cburst 2600b
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: 2600 ctokens: 2600
root@localhost :# tc -d class show dev eth0
class htb 10:10 root rate 800000Kbit ceil 800000Kbit burst 101600b/8 mpu 0b
overhead 0b cburst 101600b/8 mpu 0b overhead 0b level 7
class htb 10:100 parent 10:10 prio 0 quantum 100000 rate 8000Kbit ceil 8000Kbit
burst 2600b/8 mpu 0b overhead 0b cburst 2600b/8 mpu 0b overhead 0b level 0
|
- 向创建的子类附加一个 qdisc
根据公平排队算法,向 qdisc 附加一个随机公平排队 (SFQ),它属于排队策略集合。 清单 9. 向子类添加一个 qdisc 1
2
3
4
5
6
7
8
9
10
11
12
13
| root@linuxserver:# tc qdisc add dev ethX0 parent 10:100 sfq quantum 1514b perturb 15
root@linuxserver:# tc -s qdisc show dev eth0
qdisc htb 10: r2q 10 default 0 direct_packets_stat 256
Sent 37768 bytes 256 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 8002: parent 10:100 limit 128p quantum 1514b perturb 15sec
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
root@linuxserver:# tc -d qdisc show dev eth0
qdisc htb 10: r2q 10 default 0 direct_packets_stat 286 ver 3.17
qdisc sfq 8002: parent 10:100 limit 128p quantum 1514b flows 128/1024 perturb 15sec
|
在这里,quantum 用作添加子类的选项(在 中),指数据流中在轮到下一个队列之前允许从队列中去掉的字节数量。
- 向已创建的叶子类附加一个过滤器清单 10. 向叶子类添加一个过滤器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| root@linuxserver:# tc filter add dev ethX0 protocol ip parent 10:0 prio 5 u32 match
ip dst 172.18.10.40 flowid 10:100
root@linuxserver:# tc -s filter show dev eth0
filter parent 10: protocol ip pref 5 u32
filter parent 10: protocol ip pref 5 u32 fh 800: ht divisor 1
filter parent 10: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0
flowid 10:100 rule hit 30 success 0)
match 097a7a04/ffffffff at 16 (success 0 )
root@linuxserver:# tc -d filter show dev eth0
filter parent 10: protocol ip pref 5 u32
filter parent 10: protocol ip pref 5 u32 fh 800: ht divisor 1
filter parent 10: protocol ip pref 5 u32 fh 800::800 order 2048 key ht 800 bkt 0
flowid 10:100
match 097a7a04/ffffffff at 16
|
表示添加一个过滤器来匹配网络所限定的特定 IP 地址。
但在企业环境中,客户端可以请求对每个子网应用网络速度限制, 中展示了这类场景。
清单 11. 对整个子网应用过滤器1
2
| root@linuxserver:# tc filter add dev ethX0 protocol ip parent 10:0 prio 5
u32 match ip dst 172.18.10.1/24 flowid 10:100
|
|
|
|
|
|
|