diff --git a/README.en.md b/README.en.md deleted file mode 100644 index af21ca4..0000000 --- a/README.en.md +++ /dev/null @@ -1,36 +0,0 @@ -# oncn-bwm - -#### Description -Pod bandwidth management in mixed deployment scenarios of online and offline services - -#### Software Architecture -Software architecture description - -#### Installation - -1. xxxx -2. xxxx -3. xxxx - -#### Instructions - -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request - - -#### Gitee Feature - -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md index 77b708a..141266b 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,155 @@ # oncn-bwm -#### 介绍 -Pod bandwidth management in mixed deployment scenarios of online and offline services +## 介绍 -#### 软件架构 -软件架构说明 +本特性通过区分在线、离线业务从而既能保证在线业务带宽的需求,还能保证充分的利用网络带宽资源。 +具体提供了下列功能: +### 支持设置Pod网络优先级 +1. 以执行bwmcli命令的方式设置某个cgroup的网络优先级,执行bwmcli命令时需要指定的参数包括:cgrp_path、prio +2. 优先级默认值为0,0标识为在线业务,-1标识为离线业务。 -#### 安装教程 +### 支持设置离线业务网络带宽限制 +1. Pod网络带宽限制对所有离线业务生效,所有离线业务的总带宽不能超过设置的网络带宽限制,在线业务没有网络带宽限制。 +2. 以执行bwmcli命令的方式设置一个主机/虚拟机的离线业务网络带宽限制,执行bwmcli命令时需要指定的参数包括:允许使用的:最低带宽(KB/MB/GB),最高带宽(KB/MB/GB) +3. 网络带宽限制特性与水线特性共同完成离线业务带宽限制,当在线业务带宽低于设置的水线时:离线业务允许使用设置的最高带宽,当在线业务带宽高于设置的水线时,离线业务允许使用设置的最低带宽。 -1. xxxx -2. xxxx -3. xxxx +### 支持设置在线业务水线 +1. 以执行bwmcli命令的方式设置一个主机/虚拟机的在线业务的水线,执行bwmcli命令时需要指定的参数包括:水线值(KB/MB/GB) +2. 当一个主机上所有在线业务的总带宽高于水线时,会限制离线业务可以使用的带宽,反之当一个主机上所有在线业务的总带宽低于水线时,会提高离线业务可以使用的带宽。 +3. 判断在线业务的总带宽是否超过/低于设置的水线的时机:每10ms判断一次,根据每个10ms内统计的在线带宽是否高于水线来决定对离线业务采用的带宽限制。 -#### 使用说明 +### 支持使能/除能Pod网络Qos功能 +1. 以执行bwmcli命令的方式来使能/除能一个网卡的Qos功能,执行bwmcli命令时需要指定的参数包括:网卡名,不指定网卡名则默认操作主机上的所有网卡。 +2. 一个主机上的所有使能Qos功能的网卡在实现内部被当成一个整体看待,也就是共享设置的水线和网络带宽限制。 -1. xxxx -2. xxxx -3. xxxx +## 软件架构 +``` +oncn-bwm +│ bwmcli.c # bwmcli命令行工具 +│ bwmcli.h +│ CMakeLists.txt +│ LICENSE +│ README.md +│ +├─bpf # 两个ebpf程序文件实现带宽管理逻辑 +│ +└─tools # 在离线带宽检测工具,基于bpftrace +``` -#### 参与贡献 +## 安装教程 + +1. yum install oncn-bwm + +## 使用说明 + +### 接口说明 +**接口1** + +说明 +``` +bwmcli –e/-d ethx 使能/除能某个网卡的Qos功能 +bwmcli –e/-d 使能/除能所有网卡的Qos功能 +``` +示例 +``` +# bwmcli –e eth0 –e eth1 +enable eth0 success +enable eth1 success + +# bwmcli –d eth0 –d eth1 +disable eth0 success +disable eth1 success +``` + +**接口2** + +说明 +``` +bwmcli –s path 设置某个cgroup的优先级 +bwmcli –p path 查询某个cgroup的优先级 +``` +示例 +``` +# bwmcli -s /sys/fs/cgroup/net_cls/test_online 0 +set prio success + +# bwmcli -p /sys/fs/cgroup/net_cls/test_online +prio is 0 +``` + +**接口3** + +说明 +``` +bwmcli –s bandwidth 设置离线带宽 +bwmcli –p bandwidth 查询离线带宽 +``` +示例 +``` +# bwmcli -s bandwidth 30mb,100mb +set bandwidth success + +# bwmcli -p bandwidth +bandwidth is 31457280(B),104857600(B) +``` + +**接口4** + +说明 +``` +bwmcli –s waterline 设置在线水线 +bwmcli –p waterline 查询在线水线 +``` +示例 +``` +# bwmcli -s waterline 20mb +set waterline success + +# bwmcli -p waterline +waterline is 20971520 (B) +``` + +**接口5** + +说明 +``` +bwmcli –p stats 打印内部统计信息 +``` +示例 +``` +# bwmcli -p stats +rate: 1073741824 +online_pkts: 79752 +offline_pkts: 69730 +online rate past: 0 +offline rate past: 916194823 +``` + +**接口6** + +说明 +``` +bwmcli –p devs 描述系统上所有网卡的使能状态 +``` +示例 +``` +# bwmcli –p devs +lo : disabled +enp2s2 : disabled +``` + +### 典型使用案例 +``` +bwmcli -p devs 查询系统当前网卡使能状态 +bwmcli -s /sys/fs/cgroup/net_cls/online 0 +bwmcli -s /sys/fs/cgroup/net_cls/offline -1 +bwmcli -e eth0 使能eth0的网卡 Qos功能 +bwmcli -s bandwidth 20mb,1gb 配置离线业务带宽 +bwmcli -s waterline 30mb 配置在线业务的水线 +``` + +## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 @@ -27,7 +157,7 @@ Pod bandwidth management in mixed deployment scenarios of online and offline ser 4. 新建 Pull Request -#### 特技 +## 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) diff --git a/oncn-bwm-1.0.tar.gz b/oncn-bwm-1.0.tar.gz new file mode 100644 index 0000000..bdf2fcd Binary files /dev/null and b/oncn-bwm-1.0.tar.gz differ diff --git a/oncn-bwm.spec b/oncn-bwm.spec new file mode 100644 index 0000000..a4e49e8 --- /dev/null +++ b/oncn-bwm.spec @@ -0,0 +1,90 @@ +Name: oncn-bwm +Version: 1.0 +Release: 1 +Summary: Pod bandwidth management in mixed deployment scenarios of online and offline services +License: GPL-2.0 +URL: https://gitee.com/src-openeuler/oncn-bwm +Source: %{name}-%{version}.tar.gz + +BuildRequires: libbpf-devel cmake gcc clang +Requires: iproute libbpf +Requires(preun): bpftool + +%description +Pod bandwidth management in mixed deployment scenarios of online and offline services + +%package -n oncn-bwm-devel +Summary: devel tools for oncn-bwm +Requires: bpftrace + +%description -n oncn-bwm-devel +devel tools for oncn-bwm + +%prep +%autosetup -n %{name}-%{version} -p1 + +%build +mkdir build && cd build && +cmake .. +make + +%install +mkdir -p %{buildroot}/%{_bindir}/%{name} +mkdir -p %{buildroot}/usr/share/bwmcli +install -Dpm 0500 %{_builddir}/%{name}-%{version}/build/bpf/CMakeFiles/bwm_prio_kern.dir/bwm_prio_kern.c.o %{buildroot}/usr/share/bwmcli/bwm_prio_kern.o +install -Dpm 0500 %{_builddir}/%{name}-%{version}/build/bpf/CMakeFiles/bwm_tc.dir/bwm_tc.c.o %{buildroot}/usr/share/bwmcli/bwm_tc.o +install -Dpm 0500 %{_builddir}/%{name}-%{version}/build/bwmcli %{buildroot}/%{_bindir} +install -Dpm 0500 %{_builddir}/%{name}-%{version}/tools/bwm_monitor.bt %{buildroot}/%{_bindir} + +%preun + +DisableAllDevices() +{ + local CGROUP2PATH + local CGROUP2ID + local tempfile + for NETPID in $(lsns -t net | grep net -w | awk '{print $4}'); do + nsenter -n -t${NETPID} bwmcli -d >/dev/null + done + + mount |grep "type cgroup2" >/dev/null + if [ $? -ne 0 ]; then + tempfile=`mktemp -d`; + mount none -t cgroup2 $tempfile; + fi + + for CGROUP2VAL in $(bpftool cgroup tree |grep _bwm_out_cg -B 1 | awk '{print $1}'); do + if [[ $CGROUP2VAL = /* ]]; then + CGROUP2PATH=$CGROUP2VAL >/dev/null + else + CGROUP2ID=$CGROUP2VAL + bpftool cgroup detach $CGROUP2PATH egress id $CGROUP2ID >/dev/null + fi + done + + if [ -n "$tempfile" ]; then + umount $tempfile + rm -rf $tempfile + fi + + rm -f /sys/fs/bpf/tc/globals/throttle_map >/dev/null + rm -f /sys/fs/bpf/tc/globals/throttle_cfg >/dev/null +} + +if [ $1 -eq 0 ]; then + DisableAllDevices +fi + +%files +%defattr(-,root,root) +%attr(0500,root,root) %{_bindir}/bwmcli +%attr(0500,root,root) /usr/share/bwmcli/bwm_prio_kern.o +%attr(0500,root,root) /usr/share/bwmcli/bwm_tc.o + +%files -n oncn-bwm-devel +%attr(0500,root,root) %{_bindir}/bwm_monitor.bt + + +%changelog +* Thu Jul 14 2022 wo_cow - 1.0-1 +- init oncn-bwm