TCP加速:腾讯单边拥塞算法TCPA(类似于BBR、锐速)

腾讯内部使用的TCPA,由腾讯TEG操作系统组研发,基于RHEL7.4源码,定制化的TCPA。
团队介绍:
腾讯TEG操作系统组, 2010年成立,专业的内核团队,维护研发腾讯内部linux操作系统tlinux, 保证百万级server高效稳定运行, 为腾讯业务提供有力支撑。

优势:TCPA启用后,小文件比BBR能提升40%以上,大文件比BBR能提升5%~10%。TCPA的优势在于小文件的性能提升,程序也默认仅加速网站端口(80/443/8080),所以更适用于建站场景。

安装要求:
centos7以上
boot分区不小于500M(太小可能导致安装内核失败)

部署流程:
安装必要依赖:

yum -y install net-tools

更换系统内核

[root@vultr ~]# wget http://down.08mb.com/tcp_opz/tcpa/kernel-3.10.0-693.5.2.tcpa06.tl2.x86_64.rpm
[root@vultr ~]# rpm -ivh kernel-3.10.0-693.5.2.tcpa06.tl2.x86_64.rpm --force
Preparing...                          ################################# [100%]
Updating / installing...
   1:kernel-3.10.0-693.5.2.tcpa06.tl2 ################################# [100%]
Install kernel
Set Grub default to "3.10.0-693.5.2.tcpa06.tl2" Done.

重启操作系统

reboot

下载主程序:

wget http://down.08mb.com/tcp_opz/tcpa/tcpa_packets_180619_1151.tar.gz

开始安装:

tar xf tcpa_packets_180619_1151.tar.gz
cd tcpa_packets
sh install.sh

TCPA(默认只加速80,443,8080这3个端口),如需新增加速端口:

vim /usr/local/storage/tcpav2/start.sh

第46行后添加:

$BINDIR/$CTLAPP access add tip $ip tport 自定义端口

启动tcpa拥塞算法:

cd /usr/local/storage/tcpav2
sh start.sh

查看是否开启成功

[root@vultr tcpav2]# lsmod|grep tcpa
tcpa_engine           224249  0

卸载方法:

cd /usr/local/storage/tcpav2
sh uninstall.sh

想偷懒的弟弟,可以用博主的一键安装脚本:

wget http://down.08mb.com/tcp_opz/tcpa/tcpa.sh
sh tcpa.sh

使用说明:一键包会自动安装依赖(仅epel-release、net-tools)和内核并重启,重启后安装自动完成无需人工干预。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是用C++编写的程序,用于计算两船间的DCPA和TCPA。程序中包含了详细注释,以便理解和使用。 ```cpp #include <iostream> #include <cmath> using namespace std; // 计算两个点之间的距离 double distance(double x1, double y1, double x2, double y2) { return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2)); } // 计算两个点之间的方位角 double bearing(double x1, double y1, double x2, double y2) { double dx = x2 - x1; double dy = y2 - y1; double angle = atan2(dy, dx) * 180 / M_PI; return angle < 0 ? angle + 360 : angle; } // 计算两船间的DCPA和TCPA void calcDCPATCPA(double b1, double s1, double b2_1, double r2_1, double b2_2, double r2_2, double& dcpa, double& tcpa) { // 将方位角转换为弧度 double b1_rad = b1 * M_PI / 180; double b2_1_rad = b2_1 * M_PI / 180; double b2_2_rad = b2_2 * M_PI / 180; // 计算两个目标点的坐标 double x2_1 = r2_1 * sin(b2_1_rad); double y2_1 = r2_1 * cos(b2_1_rad); double x2_2 = r2_2 * sin(b2_2_rad); double y2_2 = r2_2 * cos(b2_2_rad); // 计算两个时间点本船的位置坐标 double x1_1 = x2_1 + s1 * sin(b1_rad); double y1_1 = y2_1 + s1 * cos(b1_rad); double x1_2 = x2_2 + s1 * sin(b1_rad); double y1_2 = y2_2 + s1 * cos(b1_rad); // 计算两个时间点两船之间的距离和方位角 double dist_1 = distance(x1_1, y1_1, x2_1, y2_1); double bearing_1 = bearing(x1_1, y1_1, x2_1, y2_1); double dist_2 = distance(x1_2, y1_2, x2_2, y2_2); double bearing_2 = bearing(x1_2, y1_2, x2_2, y2_2); // 计算最短距离点的位置坐标 double x3 = (x2_1 + (dist_1 * sin(bearing_1 * M_PI / 180) + s1 * sin(b1_rad)) + x2_2 + (dist_2 * sin(bearing_2 * M_PI / 180) + s1 * sin(b1_rad))) / 2; double y3 = (y2_1 + (dist_1 * cos(bearing_1 * M_PI / 180) + s1 * cos(b1_rad)) + y2_2 + (dist_2 * cos(bearing_2 * M_PI / 180) + s1 * cos(b1_rad))) / 2; // 计算DCPA和TCPA dcpa = distance(x1_1, y1_1, x3, y3); tcpa = distance(x1_1, y1_1, x1_2, y1_2) / s1; } int main() { double b1, s1, b2_1, r2_1, b2_2, r2_2; double dcpa, tcpa; // 读取输入数据,b1为本船的真方位角,s1为本船的航速,b2_1和r2_1为目标船第一个时间点的真方位角和距离,b2_2和r2_2为目标船第二个时间点的真方位角和距离 cout << "请输入本船的真方位角(度):"; cin >> b1; cout << "请输入本船的航速(节):"; cin >> s1; cout << "请输入目标船第一个时间点的真方位角(度)和距离(海里):"; cin >> b2_1 >> r2_1; cout << "请输入目标船第二个时间点的真方位角(度)和距离(海里):"; cin >> b2_2 >> r2_2; // 计算DCPA和TCPA calcDCPATCPA(b1, s1, b2_1, r2_1, b2_2, r2_2, dcpa, tcpa); // 输出结果 cout << "DCPA:" << dcpa << " 海里" << endl; cout << "TCPA:" << tcpa << " 小时" << endl; return 0; } ``` 该程序主要的算法计算公式如下: 1. 计算两个点之间的距离公式: $$ distance(x_1, y_1, x_2, y_2) = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} $$ 2. 计算两个点之间的方位角公式: $$ bearing(x_1, y_1, x_2, y_2) = atan2(y_2 - y_1, x_2 - x_1) * \frac{180}{\pi} $$ 3. 计算两船间的DCPA和TCPA公式: $$ DCPA = distance(x_{1,1}, y_{1,1}, x_3, y_3) $$ $$ TCPA = \frac{distance(x_{1,1}, y_{1,1}, x_{1,2}, y_{1,2})}{s_1} $$ 其中,$ x_{1,1} $ 和 $ y_{1,1} $ 分别表示本船在第一个时间点的位置坐标,$ x_{1,2} $ 和 $ y_{1,2} $ 分别表示本船在第二个时间点的位置坐标,$ x_3 $ 和 $ y_3 $ 分别表示两个时间点两船之间的最短距离点的位置坐标,$ s_1 $ 表示本船的航速。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值