废话

已经好久没有更新博客了,主要是最近有新的项目,加上自己婚期将近,忙的事比较多,所以就没更新了

昨天我的玩客云旁网关报废了,迫不得已出巨资又整了一台X86的小主机,打算用来做软路由,接替玩客云的岗位

X86做软路由有一些网卡有问题,需要关闭TSO才能正常使用,所以整了一个脚本来做测试



简介


TSO是什么

假设CPU要做一顿“发送数据”的大餐:

没有 TSO:CPU需要自己把一整块大肉(数据包)切成无数小块(标准MTU大小),再一块块递给网卡发出。这非常消耗CPU算力。

有 TSO(开启状态):CPU直接把一整块大肉丢给网卡,并说:“帮我切成小块再端出去!” 网卡硬件接过肉自己切好发出。CPU省下了切菜的力气,可以去处理其他任务。

所以,TSO 本质上是个“硬件加速”功能,对普通的电脑、服务器来说,通常百利而无一害。


为什么 X86 软路由有时要关闭 TSO

软路由既是一台电脑,又是一台“快递分拨中心”。当它用电脑的硬件去干路由器的活时,TSO 这个功能就可能“帮倒忙”:

驱动Bug导致断流或重启:这是最常见的原因。部分网卡(尤其是Intel I225-V等2.5G网卡)的驱动程序在Linux下的TSO实现存在Bug。开启后可能导致网卡“卡死”断流,甚至导致软路由系统内核崩溃重启。关闭TSO是回避Bug的无奈之举。

“分拨中心”不喜欢“大包裹”:路由器的核心工作是“快速接收→查表→快速转发”小数据包。TSO把数据包“变大”再交给网卡,实际上改变了数据包的大小和形态,这会额外增加路由转发时的CPU开销,反而让效率下降。因此像pfSense这样的专业防火墙系统,默认就是关闭TSO的。

虚拟机里的“水土不服”:虚拟化运行软路由,半虚拟化网卡(VirtIO)的TSO跟物理网卡的TSO经常互相冲突,导致性能下降。这时虚拟化教程通常都会建议关闭TSO。



测试原理

这个检测方法本质上就是下载数据,然后对比开启和关闭后的下载速率,如果开启和关闭下载速率相差不大,那么就直接开启就可以,如果开启和关闭后下载速率相差较大,那么就更具情况来开启或者关闭



测试需要软件/环境

测试使用的软件工具是iperf3,需要有一台电脑来运行iperf3的服务端

iperf3-windows端项目地址:https://github.com/ar51an/iperf3-win-builds iperf3二进制文件项目地址:https://github.com/userdocs/iperf3-static 还有一个利用AI自制的脚本:【点击下载



测试方法


下载/运行服务端

打开项目地址,点击tags

1.png

然后点击最新的版本号

2.png

点击下载zip包

3.png

把下载的zip包进行解压

4.png

在地址栏输入cmd并回车打开命令行窗口

5.png

在命令行窗口中输入下面命令

iperf3 -s

6.png


下载/运行客户端开始检测

打开二进制项目地址,点击Tags

7.png

点击版本号,客户端和服务端需要下载同一个版本

8.png

点击下载二进制文件

9.png

把二进制文件上传到openwrt里面,记住上传的路径

10.png

授权可执行

chmod +x iperf3-i386

11.png

上传脚本

12.png

授权脚本可执行

chmod +x tos-file.sh

13.png

修改脚本# --- 配置区域 ---里面的IPERF3_CMD变量,改为刚刚上传的iperf3的位置,修改完成后保存并退出

14.png

执行脚本

./tos-file.sh

15.png

选择网卡

16.png

输入服务端地址

17.png

确认配置无误回车开始

18.png

等待出测试结果

19.png



STO永久关闭方法

如果需要关闭STO的话,创建一个脚本,脚本名称为tsooff,赋予可执行权限,然后放到/etc/init.d目录下,然后加入开机自动执行


手动关闭STO

ethtool -K eth0 tso off

注意把名称中的eth0改为实际的网卡名称,可以使用ip add show命令查询网卡名称


进入/etc/init.d目录

cd /etc/init.d

创建脚本

vi tsooff

脚本内容:

#!/bin/sh /etc/rc.common

START=99
STOP=15

start() {        
        echo start
        ethtool -K eth0 tso off
}                 

stop() {          
        echo stop
}

赋值权限

chmod +x tsooff

设置开机执行

/etc/init.d/tsooff enable


本站资源下载

本站带宽小,下载速度慢,建议从项目地址上下载,本站提供的下载连接只适合做为应急打不开项目地址的情况下使用

iperf3-windows端:【点击下载

iperf3-二进制:【点击下载

测试脚本:【点击下载

二维码

发表评论