Linux sch_fq公平队列FQ流分类与credit机制
Linux sch_fq公平队列FQ流分类与credit机制Fair QueueFQqdisc位于net/sched/sch_fq.c核心目标是每个流flow一个FIFO队列按轮询DRR, Deficit Round Robin方式调度保证各流间的公平性同时支持 pacing 和 per-flow 限速。FQ的流分类基于sk_buff的hash值默认使用内核计算的skb-hash。fq_classify函数将报文分配到对应流static struct fq_flow *fq_classify(struct Qdisc *sch, struct sk_buff *skb){struct fq_sched_data *q qdisc_priv(sch);struct fq_flow *f;u32 hash;if (skb-protocol htons(ETH_P_IP) ||skb-protocol htons(ETH_P_IPV6)) {hash skb_get_hash_perturb(skb, q-perturbation);} else {hash skb-hash;if (!hash)hash (u32)(unsigned long)skb_dst(skb) ^skb-sk_hash;}hash reciprocal_scale(hash, FQ_HASH_SIZE);f q-flows[hash];if (f-flowchain.prev NULL) {struct fq_flow *new_flow;new_flow fq_find_fitting_flow(q, skb, hash);if (new_flow)return new_flow;if (f-qlen 1 || f-stats.stoll q-flow_refill)return q-internal;f-fq_tin skb_find_txq(skb, q-flow_max_rate ?q-rate_limiting_struct : NULL);}return f;}每个flow通过定时器进行pacing控制。fq_dequeue是核心调度函数static struct sk_buff *fq_dequeue(struct Qdisc *sch){struct fq_sched_data *q qdisc_priv(sch);struct fq_flow *f;struct sk_buff *skb;u32 now ktime_get_ns();s64 credit;f list_first_entry_or_null(q-new_flows, struct fq_flow,flowchain);if (!f) {f list_first_entry_or_null(q-old_flows, struct fq_flow,flowchain);if (!f)return NULL;}if (f-time_next_packet now) {if (!q-timer_active) {q-timer_active true;hrtimer_start(q-fq_timer,ns_to_ktime(f-time_next_packet - now),HRTIMER_MODE_REL_PINNED);}return NULL;}credit f-credit;skb f-head;if (skb) {credit - skb-len;if (credit 0 !q-rate_enable) {return NULL;}__skb_unlink(skb, f-queue);sch-q.qlen--;f-credit credit;if (f-credit 0) {f-credit q-quantum;list_move_tail(f-flowchain, q-old_flows);}}if (f-credit 0 f-qlen 0)list_move_tail(f-flowchain, q-new_flows);else if (f-qlen 0)list_del_init(f-flowchain);if (q-rate_enable) {f-time_next_packet now max_t(u64, q-flow_max_rate ?div64_u64(skb-len * 1000ULL * NSEC_PER_USEC,q-flow_max_rate) : 0,skb-len * q-pacing_divider);}return skb;}credit机制是DRR的核心。每个flow拥有一个credit计数器初始值为quantum。每次从该flow出队一个报文减去其长度。当credit变为负数或零以下时该flow被移到old_flows链表并补充一个quantum的credit。调度器优先服务new_flows链表中的flow只有new_flows为空时才处理old_flows。这种设计确保新产生的active flow不会被old_flows中的flow饿死。quantum参数的默认值在fq_change函数中设定static int fq_change(struct Qdisc *sch, struct nlattr *opt,struct netlink_ext_ack *extack){struct fq_sched_data *q qdisc_priv(sch);struct tc_fq_qopt *ctl nla_data(opt);if (ctl-quantum)q-quantum ctl-quantum;elseq-quantum 2 * psched_mtu(qdisc_dev(sch));if (ctl-initial_quantum)q-initial_quantum ctl-initial_quantum;elseq-initial_quantum 0;if (ctl-maxrate) {q-flow_max_rate ctl-maxrate;q-rate_enable 1;}if (ctl-pacing) {q-pacing_divisor ctl-pacing;}}在credit计算中fq_dequeue对每个flow出队后重新计算creditstatic void fq_flow_add_to_list(struct fq_sched_data *q,struct fq_flow *f){if (f-credit 0) {f-credit q-quantum;list_add_tail(f-flowchain, q-old_flows);} else {list_add_tail(f-flowchain, q-new_flows);}}flow从new_flows转移到old_flows的条件是credit耗尽转移后补充quantum credit。但如果补充后credit仍为正则留在new_flows继续参与调度。这种设计保证credit用尽的flow暂时让出调度机会实现按字节严格公平。per-flow的pacing依靠fq-time_next_packet字段hrtimer到期后才会调用fq_dequeue控制报文发送速率。timer回调函数为fq_timerstatic enum hrtimer_restart fq_timer(struct hrtimer *timer){struct fq_sched_data *q container_of(timer, struct fq_sched_data,fq_timer);struct Qdisc *sch q-sch;struct net_device *dev qdisc_dev(sch);q-timer_active false;__netif_schedule(sch);return HRTIMER_NORESTART;}timer仅触发一次调度fq_dequeue在必要时重新启新timer。这种defer机制将pacing粒度控制在纳秒级适合高速网卡下精确流量整形。

相关新闻

2026年openclaw智能体下载推荐 五款主流产品实测 覆盖多场景办公需求

2026年openclaw智能体下载推荐 五款主流产品实测 覆盖多场景办公需求

随着本地AI智能体技术逐步落地,openclaw生态衍生出多款定位差异化的产品,不少用户搜索openclaw智能体下载推荐时,难以快速匹配适配自身需求的版本。本文结合实测体验,选取五款不同定位的openclaw系智能体展开客观介绍,…

2026/6/23 0:36:05阅读更多 →
混合衍射-全息光子AI:被动光学实时图像分类原理与应用

混合衍射-全息光子AI:被动光学实时图像分类原理与应用

1. 从“计算”到“感知”:为什么我们需要被动光学实时图像分类?在AI模型动辄百亿参数、推理依赖庞大算力集群的今天,提出一个“被动光学实时图像分类”的框架,听起来有些反直觉。这就像是在大家都在研究如何造出更快的跑车时&…

2026/6/23 0:36:05阅读更多 →
连续体机器人接触感知规划与控制:在受限空间实现安全导航

连续体机器人接触感知规划与控制:在受限空间实现安全导航

1. 项目缘起:当机器人需要“挤”过狭小空间时在工业自动化、医疗手术、灾难救援乃至航空航天领域,我们常常会遇到一个棘手的问题:如何让机器人进入那些结构复杂、空间极度受限、甚至充满未知障碍的环境?传统的刚性连杆机器人&…

2026/6/23 0:36:05阅读更多 →
DeepSeek Harness 部门急缺人才,崔添翼直聘三类岗位,速来!

DeepSeek Harness 部门急缺人才,崔添翼直聘三类岗位,速来!

DeepSeek Harness 部门急缺人才,崔添翼直聘三类岗位,速来!DeepSeek 好缺 Agent 人才啊…… 刚刚,Harness 部门负责人崔添翼再次在线直聘:Harness 部门空缺较大,速来!这次一口气放出来的岗位有三…

2026/6/23 1:51:20阅读更多 →
嵌入式实时车辆轨迹预测:从YOLO、ByteTrack到TensorRT的EdgeVTP实战

嵌入式实时车辆轨迹预测:从YOLO、ByteTrack到TensorRT的EdgeVTP实战

1. 项目概述:为什么路侧监控需要“预测未来”?想象一下,你正开车经过一个繁忙的十字路口,路边的摄像头默默地记录着一切。传统的监控系统就像一个尽职的“记录员”,它告诉你刚才发生了什么:A车闯了红灯&…

2026/6/23 1:51:20阅读更多 →
医疗AI特征工程:数值离散化与时间编码的实践指南

医疗AI特征工程:数值离散化与时间编码的实践指南

1. 项目概述:为什么医疗AI的“第一口饭”如此重要?在医疗AI模型开发的漫长链条中,数据预处理和输入表示常常被戏称为“脏活累活”,远不如模型架构创新那般引人注目。然而,我多年的实践经验反复验证了一个朴素的道理&am…

2026/6/23 1:51:20阅读更多 →
产品经理视角:如何用“用户旅程地图”选一家靠谱民宿?

产品经理视角:如何用“用户旅程地图”选一家靠谱民宿?

产品经理视角:如何用“用户旅程地图”选一家靠谱民宿? 前言: 做产品经理久了,看什么都像在做需求分析。上周带家属去桐庐度周末,选民宿的时候,我下意识地把这个过程拆成了标准的产品选型流程——定义用户画…

2026/6/23 1:51:20阅读更多 →
为什么买了 SCA 工具,开源依赖还是管不住?

为什么买了 SCA 工具,开源依赖还是管不住?

开源治理不是买工具,是建流程——全生命周期设计方案 上一篇结尾留了一个问题:当开发引入一个高风险组件时,企业有没有能力阻止它进入生产环境? 答案是:大多数企业没有。 不只是没有能力,甚至根本没人知…

2026/6/23 1:51:20阅读更多 →
ReconVLA:让机器人更可靠,基于不确定性感知的VLA模型增强实践

ReconVLA:让机器人更可靠,基于不确定性感知的VLA模型增强实践

1. 项目缘起:当机器人“看”与“说”不再可靠 在机器人领域,尤其是人形机器人、工业机器人和服务机器人快速发展的当下,一个核心的挑战正变得越来越突出:如何让机器人真正理解并可靠地执行基于自然语言和视觉感知的指令&#xff1…

2026/6/23 1:46:19阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/22 6:01:42阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/22 1:15:34阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/22 5:42:46阅读更多 →
2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南

2026年京东云 618 活动 Hermes Agent/OpenClaw配置Token Plan新手必看指南。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流…

2026/6/23 0:00:38阅读更多 →
2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

2026年北京电子沙盘制作公司深度评测:从技术选型到落地效果,谁在真正定义“数字+实体”的融合边界?

模块一:行业背景——百亿赛道爆发,北京市场的特殊性与选型困局2026年,电子沙盘行业已走过“要不要做”的讨论,进入“找谁做、怎么做”的深水区。据行业研究机构数据,2025年国内电子沙盘市场规模已突破85亿元&#xff0…

2026/6/23 0:00:38阅读更多 →
音视频场景下的 Java 开发者面试:技术与挑战

音视频场景下的 Java 开发者面试:技术与挑战

面试互联网大厂:从音视频场景看 Java 开发者的技能与挑战 在互联网大厂求职的面试中,Java 开发者往往需要面对严苛的技术问题。今天,我们将通过一位名叫燕双非的搞笑程序员与严肃的面试官之间的对话,看看在音视频场景下&#xff0…

2026/6/23 0:00:38阅读更多 →