
# Pod带宽管理工具
在业务混合部署的场景下，Pod带宽管理功能根据QoS分级对资源进行合理调度，提升网络带宽利用率。HCE提供oncn-tbwm带宽管理工具，通过tbwmcli工具命令配置收发包方向的网络限速，实现网络QoS。
#### 前提条件
本功能固定使用ifb0，使用前请确定虚拟网卡ifb0未被使用，并加载ifb驱动。
#### 约束与限制
- 仅HCE 2.0 x86架构支持使用tbwmcli命令。
- 仅允许root用户执行tbwmcli命令。
- tbwmcli命令同一时间只能在一个网卡使能QoS功能，多个网卡不支持并行使能网络QoS。
- 网卡被插拔重新恢复后，原来设置的QoS规则会丢失，需要手动重新配置网络QoS功能。
- 不支持cgroup v2。
- 升级oncn-tbwm软件包不会影响升级前的使能状态。卸载oncn-tbwm软件包会关闭对所有设备的使能。
- 仅支持识别数字、英文字母、中划线"-" 和下划线"_"四类字符类型的网卡名，其他字符类型的网卡不被识别。
- 实际使用过程中，带宽限速有可能造成协议栈内存积压，此时依赖传输层协议自行反压，对于udp等无反压机制的协议场景，可能出现丢包、ENOBUFS、限流不准等问题。
- 收包方向的网络限速依赖于TCP的反压能力，在非TCP协议的场景中，网络包已经收至目标网卡，不支持对于收包方向的网络限速。
- 不支持tbwmcli工具、tc命令和网卡命令混用，只能单独使用tbwmcli工具进行限速。例如，某个网卡上已经设置过tc qdisc规则的情况下，对此网卡使能网络QoS功能可能会失败。
 
#### 使用方法
1. 安装oncn-tbwm软件包。
   1. 确认repo源配置正常。 请检查默认的/etc/yum.repos.d/hce.repo配置文件中参数是否正确，正确的配置如下。
      ```
      [base]
      name=HCE $releasever base
      baseurl=https://repo.huaweicloud.com/hce/$releasever/os/$basearch/
      enabled=1
      gpgcheck=1
      gpgkey=https://repo.huaweicloud.com/hce/$releasever/os/RPM-GPG-KEY-HCE-2
      [updates]
      name=HCE $releasever updates
      baseurl=https://repo.huaweicloud.com/hce/$releasever/updates/$basearch/
      enabled=1
      gpgcheck=1
      gpgkey=https://repo.huaweicloud.com/hce/$releasever/updates/RPM-GPG-KEY-HCE-2
       
      [debuginfo]
      name=HCE $releasever debuginfo
      baseurl=https://repo.huaweicloud.com/hce/$releasever/debuginfo/$basearch/
      enabled=0
      gpgcheck=1
      gpgkey=https://repo.huaweicloud.com/hce/$releasever/debuginfo/RPM-GPG-KEY-HCE-2
      ```
      ![](https://support.huaweicloud.com/usermanual-hce/public_sys-resources/note_3.0-zh-cn.png)
      HCEOS 3.0的配置中，RPM-GPG-KEY-HCE-2换成RPM-GPG-KEY-HCE-3。
      
   
   2. 执行**yum install oncn-tbwm**命令安装oncn-tbwm软件包。
   
   3. 验证oncn-tbwm软件包正确性。
      - 执行**tbwmcli -v** 命令，正确安装则结果显示如下，具体版本以实际为准。
        ```
        version: 1.0
        ```
        
      
      - 确认以下oncn-tbwm服务组件，正常情况下均存在。
        ```
        /usr/bin/tbwmcli
        /usr/share/tbwmcli
        /usr/share/tbwmcli/README.md
        /usr/share/tbwmcli/bwm_prio_kern.o
        /usr/share/tbwmcli/tbwm_tc.o
        ```
        
       
    
2. 根据需要执行tbwmcli命令。
   表1tbwmcli命令说明 
   | 命令                                                                                    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   |:---|:---|
   | tbwmcli -e ethx tbwmcli -d ethx egress                   | 使能/关闭某个网卡的发包方向QoS功能。 示例：使能eth0网卡的发包方向QoS功能。 ``` tbwmcli -e eth0 enable eth0 egress success ``` 示例：关闭eth0网卡的发包方向QoS功能。 ``` tbwmcli -d eth0 egress disable eth0 egress success ```                                                                                                                                                                                                                                                                                     |
   | tbwmcli -i ethx online/offline tbwmcli -d ethx ingress  | 使能/关闭某个网卡的收包方向QoS功能。 示例：使能eth0网卡收包方向QoS功能，并设置为在线网卡。 ``` tbwmcli -i eth0 online enable eth0 ingress success, dev is online ``` 示例：使能eth0网卡收包方向QoS功能，并设置为离线网卡。 ``` tbwmcli -i eth0 offline enable eth0 ingress success, dev is offline ``` 说明： 收包方向不支持同时设置为多个离线网卡的情况，支持一个离线网卡和多个在线网卡。 示例：关闭eth0网卡收包方向QoS功能。 ``` tbwmcli -d eth0 ingress disable eth0 ingress success ```                                       |
   | tbwmcli -d ethx                                                                       | 强制关闭某个网卡的所有QoS功能，并关闭ifb功能。 示例：强制关闭eth0网卡的所有QoS功能，并关闭ifb功能。 ``` tbwmcli -d eth0 disable eth0 success ```                                                                                                                                                                                                                                                                                                                                                                                                |
   | tbwmcli -p istats/estats                                                              | 打印收/发包方向内部统计信息。 示例：打印收包方向内部统计信息。 ``` tbwmcli -p istats offline_target_bandwidth: 94371840online_pkts: 3626190offline_pkts: 265807online_rate: 0offline_rate: 13580offline_prio: 0 ``` 示例：打印发包方向内部统计信息。 ``` tbwmcli -p estats offline_target_bandwidth: 94371840online_pkts: 4805452offline_pkts: 373961online_rate: 0offline_rate: 19307offline_prio: 1 ```                                                                                                             |
   | tbwmcli -s path \<prio\> tbwmcli -p path                 | 设置/查询cgroup的QoS优先级。 当前仅支持设置离线和在线两个QoS优先级。 - 0：设置cgroup为在线QoS优先级。  - -1：设置cgroup为离线QoS优先级。   示例：设置test_online cgroup的优先级为0。 ``` tbwmcli -s /sys/fs/cgroup/test_online 0 set prio success ``` 示例：查询test_online cgroup的优先级。 ``` tbwmcli -p /sys/fs/cgroup/test_online prio is 0 ``` |
   | tbwmcli -s bandwidth \<low，high\> tbwmcli -p bandwidth | 设置/查询离线带宽范围。 示例：设置离线带宽范围为30mb\~100mb。 ``` tbwmcli -s bandwidth 30mb,100mb set bandwidth success ``` 示例：查询离线带宽范围。 ``` tbwmcli -p bandwidth bandwidth is 31457280(B),104857600(B) ```                                                                                                                                                                                                                                                                                   |
   | tbwmcli -s waterline \<val\> tbwmcli -p waterline      | 设置/查询在线网络带宽水线。 示例：设置在线网络带宽水线为20mb。 ``` tbwmcli -s waterline 20mb set waterline success ``` 示例：查询在线网络带宽水线。 ``` tbwmcli -p waterline waterline is 20971520 (B) ```                                                                                                                                                                                                                                                                                                        |
   | tbwmcli -p devs                                                                       | 查看系统上所有网卡的使能状态。 ``` tbwmcli -p devs lo      Egress : disabled lo      Ingress : disabled eth0    Egress : disabled eth0    Ingress : enabled, it's offline ifb0    Egress : enabled ```                                                                                                                                                                                                                                                                                                                                            |
   | tbwmcli -c                                                                            | 强制删除所有网卡的QoS，谨慎使用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | modprobe ifb numifbs=1                                                                | 加载ifb。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | rmmod ifb                                                                             | 卸载ifb。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
      
   
 
