学习笔记
📚AI大数据相关
00. Ai大数据模型
模型整理
使用 DeepSeek 通用公式
学会这8招,让DeepSeek变得超好用!
大数据购物分析选优
Windows和Ubuntu部署DeepSeek性能差距
本地部署 Ollam+DeepSeek 探索爬坑
模型对比测试
React Native 和 native 半屏弹窗
React Native Modal + WebView
01. Ai 提示词
00. 🌟提示词黄金公式:让 AI 秒变专家的通用指令框架
01. 🚀 AI短篇小说创作:大神级实操指南与提示词模板
02. Gemini专用Agent:今日头条硬核技术博主
03. Gemini专用Agent:小红书金牌育儿养生博主
04. Gemini专业Agent:全栈架构导师 & 终极面试官
05. Gemini专业Agent:资深私募操盘手 & 首席证券分析师
06. 🤖IDE&&CLI使用Agent:单元测试
07. 高度自主化开发提示词
Java基础相关
JVM内存模型及线程空间
动态代理
java并发编程
Java基础知识
Java中Future
Java中9种常见的CMS GC问题分析与解决
移动端相关
杂乱整理
HarmonyOS 鸿蒙开发知识
ArkTS中如何自定义组件和复用统一样式
Android开发相关
WebView设置圆角
📄 Android 实时屏幕共享技术方案文档
Android线程与线程池全面解析:从使用到源码剖析
🔥 RecyclerView全面解析:从架构原理到性能优化与面试指南
🔥 OkHttp全面解析:从架构原理到性能优化与面试指南
🔥 Retrofit全面解析:从设计架构与核心思想到常见问题
开发工具相关
Git cmd学习整理
Markdown用法大全集
【2023年12月】工作常用
Git如何单独合并某次提交到另一个分支
Debina/Ubuntu安装Node环境
🐳 Docker 命令行与 Docker Compose 全面指南
使用Podman来替代Docker
中文注释提交git后变成"\u0087\u0079..."问题
macOS 容器化工具深度解析:Docker Desktop、OrbStack、Podman 及其他替代方案对比
前端开发相关
Node+TypeScript相关记录
TypeScript 读写 MariaDB
Node TypeScript项目 token生成、管理及拦截校验的实现
TypeScript+Express创建和实现一个服务示例
Express接口处理器抽取注册方式
Express 实现 RESTful API
创建 TypeScript Express 项目,并配置直接用 npm start 运行
TypeScript + Express 实现文件下载接口
export 和 export default的区别
TypeScript+Express 实现用户注册和登录接口
TypeScript 和 JavaScript 中,`===` 和 `==`
CSS中的尺寸大小标准
小程序px和rpx
使用Python快速处理Excel的合并拆分
读书写作相关
一些句子01
李敖语录
罗翔老师的一些经典语句
周易相关知识
周易是对自然描述还是为自然立法
40句落寞诗词,穿透柔魂弱魄
杂玩整理
黑苹果睿频问题
基于纯Linux自己部署Nas构思
Ubuntu换源
Ubuntu挂载tf卡
Ubuntu运行Docker报错
Ubuntu安装运行Docker报错处理
官方镜像安装Docker
Docker 设置root dir 切换数据到其他存储位置
systemctl stop docker 报错
NextCloud安装ffmpeg 显示视频缩略图
Docker源不生效解决方式
Docker源不生效解决方式II——搭建docker-hub镜像
搞定群晖总Docker部署gitea启用ssh协议
MacOS一键安装命令软件列表
群晖ssl证书目录
Android通过ADB命令播放视频
[完成] 群晖自动更新https证书项目
Linux设备整机限速
Linux限速2
Gitea部署Runner服务
精选网站
有声主播知识
学习笔记
有声主播入门到进阶
有声主播新手的入门练手内容推荐
DeepSeek分析喜马拉雅旗下 喜播平台 的有声主播培训
录书设备资料1
典故专辑资料整理
0B. 脚本和大纲
0A. 前置准备资料
临时
Linux下对设备进行限速
C++ 学习
01 Android开发学习C++
其他资料分组
【面试相关】💡 面试后、Offer前,可以主动了解和确认的信息
【工作经验】会计师事务所工作中如何有效管理和规避法律风险
职业发展规划
-
+
home page
Linux限速2
好的,我们来详细分析一下这个问题。 ### 核心问题:`tc` 限速会导致延迟变高吗? **答案是:会的,您使用的这种配置很可能会导致延迟增加,尤其是在网络接近或达到您设定的 3Mbit/s 速率限制时。** 这背后的主要原因是 **缓冲区膨胀 (Bufferbloat)**。 #### 原理说明: 1. **排队机制**:当您使用 `tc` 设置一个速率限制时,内核会在网络接口 (`eth0`) 上建立一个数据包队列 (Queue)。当发送的数据包速率超过了您设置的 `rate` (3Mbit/s),超出的数据包不会被立即丢弃,而是会被放入这个队列中,等待轮到它们被发送。 2. **排队产生延迟**:数据包在队列中等待的这段时间,就是**排队延迟 (Queuing Delay)**。您的网络负载越高(越接近3Mbit/s),队列里的数据包就越多、越长,等待时间也随之增加,从而导致您感受到的总延迟(例如 `ping` 值)显著升高。 3. **缓冲区膨胀 (Bufferbloat)**:传统的队列为了防止丢包,其缓冲区(Buffer)往往设置得非常大。这会导致一个恶性循环:即使网络已经拥堵,数据包也只是在队列里长时间排队而不是被丢弃。这使得TCP等协议误以为网络状况良好,继续发送数据,进一步加剧了排队,导致延迟极高,但表面上看起来丢包率却很低。这就是典型的“缓冲区膨胀”问题。 您使用的 `htb` (Hierarchical Token Bucket) 本身是一个优秀的整形器 (Shaper),但它默认关联的叶子队列(leaf qdisc)可能是 `pfifo`,这正是导致 Bufferbloat 的一个常见原因。 ------ ### 如何处理:既保证限速,又控制延迟? 目标是:在流量超过限制时,我们希望**快速地**通知发送方“慢一点”,而不是让数据包在缓冲区里“慢慢地”排长队。实现这一目标有几种现代化的方法。 #### 方案一:使用 CAKE (最推荐,最简单) `CAKE` (Common Applications Kept Enhanced) 是一个现代化的队列管理算法,它被设计出来就是为了解决 Bufferbloat 问题。它集成了速率整形、公平队列和智能的队列管理,通常只需要一行命令就能获得极佳的效果。 如何使用: 忘掉复杂的 htb 配置,直接用 cake 替换即可。 Bash ``` # 删除旧的 qdisc 规则 tc qdisc del dev eth0 root # 添加新的 CAKE 规则,限速 3mbit tc qdisc add dev eth0 root cake bandwidth 3mbit ``` **CAKE 的优点:** - **极其简单**:一条命令替代了您原来复杂的多条命令。 - **内置抗延迟机制**:它内部使用了类似 `CoDel` 的技术,会主动管理排队延迟,一旦延迟超过某个阈值,就会智能地丢弃少量数据包,从而向TCP协议发出拥塞信号,让发送方主动降低速度,而不是被动地在队列里等待。 - **公平性**:它能确保网络内的多个设备或多个连接(例如,您的下载任务不会因为家人在看视频而完全卡死)公平地共享带宽。 - **开箱即用**:通常不需要复杂的调优。 > **注意**:请确保您的 Debian 系统内核版本足够新以支持 `CAKE` (通常在 Kernel 4.19+ 已全面支持,现代 Debian 系统都满足)。 ------ #### 方案二:优化现有的 HTB 配置 (HTB + FQ-CoDel) 如果您因为某些复杂的需求(例如需要为不同类型的流量设置不同的优先级)而必须使用 `htb`,那么优化的关键在于**为叶子类别 (leaf class) 替换一个更智能的队列算法**,例如 `fq_codel`。 `fq_codel` (Fair Queuing with Controlled Delay) 结合了公平队列和延迟控制,是解决 Bufferbloat 的利器。 如何使用: 在您的 htb 类别下,附加 fq_codel 队列。 Bash ``` # 1. 设置根 htb qdisc tc qdisc add dev eth0 root handle 1: htb default 12 # 2. 设置父类别(总带宽) # 这里的 rate 是整个接口的总速率上限 tc class add dev eth0 parent 1: classid 1:1 htb rate 3mbit burst 15k # 3. 设置默认子类别,并为其附加 fq_codel 队列 # 所有未分类的流量都会进入这里 tc class add dev eth0 parent 1:1 classid 1:12 htb rate 3mbit burst 15k # 关键步骤:在子类别下附加 fq_codel tc qdisc add dev eth0 parent 1:12 handle 120: fq_codel ``` **这种方法的优点:** - **灵活**:保留了 `htb` 的层级结构,可以创建更复杂的流量控制策略(例如,为游戏流量创建一个高优先级、有保障带宽的类别)。 - **有效控制延迟**:`fq_codel` 会像 `cake` 一样主动管理队列延迟,效果显著。 分析您原来的配置问题: 您原来的配置 classid 1:1 和 classid 1:12 的 rate 都是 3mbit。这有点冗余,通常父类别的 rate 应该是所有子类别 rate 之和或一个总的上限。不过对于您只有一个默认类别的简单场景,功能上是能实现的,主要问题还是在于没有使用现代化的队列管理算法来对抗延迟。 ------ ### 总结与建议 | 方法 | 复杂度 | 抗延迟效果 | 适用场景 | | ------------------------------- | -------- | ---------- | ------------------------------------------------------------ | | **您的原始配置 (`htb`)** | 中等 | **差** | 不推荐,容易引起高延迟。 | | **方案一 (`cake`)** | **极低** | **优秀** | **强烈推荐**。适用于绝大多数家庭、小型办公室等需要简单高效限速的场景。 | | **方案二 (`htb` + `fq_codel`)** | 较高 | **优秀** | 需要对不同流量(如游戏、下载、网页)做复杂分级和优先级处理的进阶场景。 | **给您的最终建议:** 1. **首选 `CAKE`**。先尝试用下面这一行命令来满足您的需求: Bash ``` sudo tc qdisc replace dev eth0 root cake bandwidth 3mbit ``` 2. 然后进行测试,例如在进行下载任务的同时,打开另一个终端 `ping` 一个可靠的地址(如 `ping 8.8.8.8`)。您会发现,即使带宽被占满,ping 的延迟也只会轻微上涨,而不会像之前那样飙升到几百甚至上千毫秒。 3. 只有当您有更复杂的流量分类需求时,再考虑使用 `HTB + FQ-CoDel` 的方案。
嘿手大叔
Aug. 1, 2025, 6:49 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
share
link
type
password
Update password