!1 add first version
From: @wo_cow Reviewed-by: @nlgwcy Signed-off-by: @nlgwcy
This commit is contained in:
commit
b949562bd9
36
README.en.md
36
README.en.md
@ -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/)
|
|
||||||
158
README.md
158
README.md
@ -1,25 +1,155 @@
|
|||||||
# oncn-bwm
|
# 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
|
1. 以执行bwmcli命令的方式设置一个主机/虚拟机的在线业务的水线,执行bwmcli命令时需要指定的参数包括:水线值(KB/MB/GB)
|
||||||
3. xxxx
|
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 <prio> 设置某个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 <low,high> 设置离线带宽
|
||||||
|
bwmcli –p bandwidth 查询离线带宽
|
||||||
|
```
|
||||||
|
示例
|
||||||
|
```
|
||||||
|
# bwmcli -s bandwidth 30mb,100mb
|
||||||
|
set bandwidth success
|
||||||
|
|
||||||
|
# bwmcli -p bandwidth
|
||||||
|
bandwidth is 31457280(B),104857600(B)
|
||||||
|
```
|
||||||
|
|
||||||
|
**接口4**
|
||||||
|
|
||||||
|
说明
|
||||||
|
```
|
||||||
|
bwmcli –s waterline <val> 设置在线水线
|
||||||
|
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 本仓库
|
1. Fork 本仓库
|
||||||
2. 新建 Feat_xxx 分支
|
2. 新建 Feat_xxx 分支
|
||||||
@ -27,7 +157,7 @@ Pod bandwidth management in mixed deployment scenarios of online and offline ser
|
|||||||
4. 新建 Pull Request
|
4. 新建 Pull Request
|
||||||
|
|
||||||
|
|
||||||
#### 特技
|
## 特技
|
||||||
|
|
||||||
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
|
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
|
||||||
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
|
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
|
||||||
|
|||||||
BIN
oncn-bwm-1.0.tar.gz
Normal file
BIN
oncn-bwm-1.0.tar.gz
Normal file
Binary file not shown.
90
oncn-bwm.spec
Normal file
90
oncn-bwm.spec
Normal file
@ -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 <niuiqianqian@huawei.com> - 1.0-1
|
||||||
|
- init oncn-bwm
|
||||||
Loading…
x
Reference in New Issue
Block a user