ebpf流拥塞控制算法使用笔记

一、原理

首先在内核态收集TCP信息,并通过eBPF发送给用户态。
然后使用Antelope来选择合适的CC算法
最后将CC算法传输给内核(bpf_map),并在内核中切换拥塞控制算法

1、收集数据流信息

通过 saddr,daddr,lport, dport 来区分每一个流
每个流收集 srtt, mdev, min_rtt, packets_out, total_retrans, pacing_rate, TCP状态等信息记录在sock结构体中
每个ACK到达时,生命周期函数会触发把信息通过eBPF发送到用户态

2、传输信息

内核->用户态:数据格式为ebpf_hash
用户态-> 内核:数据格式为bpf_map
bpf_map:
key- IP+flow ID
value - CC mechanism

3、更换拥塞控制算法

使用eBPF切换TCP拥塞控制。
首先我们要把编译后的eBPF程序放到内核中去,在eBPF程序中我们使用bpf_getsockopt和bpf_setsockopt在tcp_ebpf库中切换相应的CC 策略。且我们设置了三个生命周期函数:tcp_init_transfer, tcp_sendmsg, tcp_close_state.
① tcp_init_transfer: eBPF程序会基于IP地址设置一个默认的拥塞控制策略。(section VB)
② tcp_sendmsg: 根据当前预测状态设置一个新的拥塞控制策略
③ tcp_close_state: 删除该流在map中维护的相关键值对,并重启内核(rebuild the kernel, reboot the system)
在线预测模块中,每当N个ACK到达时,预测进程被触发,如果发现有一个新的适合的拥塞控制,会更新ebpf_map,加入(IP+flowID,CC mechanism)的键值对。如果所有流的拥塞控制算法和当前一样,那么map就是空的。
tcp_sendmsg生命周期函数就会检查当前map是不是空的,如果有新的就需要设置对应流的拥塞控制算法。为了避免拥塞控制算法切换的太过频繁,我们只设置连续M次推荐的拥塞控制算法。

二、运行步骤:

1、 安装个BCC

首先安装一下依赖:

sudo apt-get -y install bison build-essential cmake flex git libedit-dev libllvm6.0 llvm-6.0-dev libclang-6.0-dev zlib1g-dev libelf-dev libfl-dev python3-distutils

在这里插入图片描述
注意:
如果执行容易报错就分开装,反正就是 sudo apt-get -y install xxx (-y只是让你不用自己输yes,不写也行)。
如果发生以下错误,参考链接

The following packages have unmet dependencies:
python : PreDepends: python-minimal (= 2.7.11-1) but it is not going to be installed
Depends: libpython-stdlib (= 2.7.11-1) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

注意这里需要 cmake版本>=3.1 , gcc版本>=8 (**血淋淋的教训,g++版本同样也要在8以上,我一直都是gcc -v在8以上没有管g++)

然后安装:

git clone https://github.com/iovisor/bcc.git
mkdir bcc/build; cd bcc/build
cmake …
make
sudo make install
cmake -DPYTHON_CMD=python3 … # build python3 binding
pushd src/python/
make
sudo make install
popd

这个需要记录一下:参考链接
血淋淋的教训,llvm版本要在11以上!!!!!!!!!!!!!!!!!!!!!!!!!!!!!自己百度查一下怎么换成11

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值