FQ队列detached流管理

2023-12-19 09:38
文章标签 管理 队列 detached fq

本文主要是介绍FQ队列detached流管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对于FQ中的流结构,如果其没有任何要发送的报文,即其为空,将其设置为detached状态,这样的流结构即不在new_flow链表,也不在old_flow链表。在detach设置函数中,不仅将其next指向固定的地址(静态变量detached的地址),而且,记录下其进入detached状态的时间戳。

/* special value to mark a detached flow (not on old/new list) */
static struct fq_flow detached, throttled;static void fq_flow_set_detached(struct fq_flow *f)
{f->next = &detached;f->age = jiffies;
}static bool fq_flow_is_detached(const struct fq_flow *f)
{return f->next == &detached;
}

1. FQ流初始化detached状态

在函数fq_classify中,新创建出来的fq流结构,初始化为detached状态,还没有加入到new_flows或者old_flows链表中。

static struct fq_flow *fq_classify(struct sk_buff *skb, struct fq_sched_data *q)
{struct rb_node **p, *parent;struct sock *sk = skb->sk;struct rb_root *root;struct fq_flow *f;...root = &q->fq_root[hash_ptr(sk, q->fq_trees_log)];...p = &root->rb_node;...f = kmem_cache_zalloc(fq_flow_cachep, GFP_ATOMIC | __GFP_NOWARN);if (unlikely(!f)) {q->stat_allocation_errors++;return &q->internal;}fq_flow_set_detached(f);f->sk = sk;

在函数fq_enqueue中,对于处在detached状态的流结构,由于其接收到了新的报文,将其添加到new_flows链表的尾部。

static int fq_enqueue(struct sk_buff *skb, struct Qdisc *sch, struct sk_buff **to_free)
{   struct fq_sched_data *q = qdisc_priv(sch);struct fq_flow *f;if (unlikely(sch->q.qlen >= sch->limit))return qdisc_drop(skb, sch, to_free);f = fq_classify(skb, q);...f->qlen++;qdisc_qstats_backlog_inc(sch, skb);if (fq_flow_is_detached(f)) {struct sock *sk = skb->sk;fq_flow_add_tail(&q->new_flows, f);...

2. Detached状态设置

在函数fq_dequeue中,如果流结构为空,不包含任何报文,并且old_flows不为空,将其由new_flows链表移动到old_flows链表的尾部。否则,以上条件不成立,即此流结构原本就位于old_flows链表中,或者old_flows链表为空,将此流结构设置为detached状态。

static struct sk_buff *fq_dequeue(struct Qdisc *sch)
{...skb = fq_dequeue_head(sch, f);if (!skb) {head->first = f->next;/* force a pass through old_flows to prevent starvation */if ((head == &q->new_flows) && q->old_flows.first) {fq_flow_add_tail(&q->old_flows, f);} else {fq_flow_set_detached(f);q->inactive_flows++;}goto begin;}

3. 回收Detach流结构

如下函数fq_gc_candidate,如果流结构处于detached状态,并且已经超过3秒钟,可进行回收。

/* limit number of collected flows per round */
#define FQ_GC_MAX 8
#define FQ_GC_AGE (3*HZ)static bool fq_gc_candidate(const struct fq_flow *f)
{return fq_flow_is_detached(f) &&time_after(jiffies, f->age + FQ_GC_AGE);
}

在函数fq_gc中,调用以上fq_gc_candidate函数,判断是否可回收当前流结构,fq_gc每次调用时最多释放8个(FQ_GC_MAX)流结构。

static void fq_gc(struct fq_sched_data *q, struct rb_root *root, struct sock *sk)
{struct fq_flow *f, *tofree[FQ_GC_MAX];struct rb_node **p, *parent;int fcnt = 0;p = &root->rb_node;parent = NULL;while (*p) {parent = *p;f = rb_entry(parent, struct fq_flow, fq_node);if (f->sk == sk)break;if (fq_gc_candidate(f)) {tofree[fcnt++] = f;if (fcnt == FQ_GC_MAX)break;}

内核版本 5.0

这篇关于FQ队列detached流管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511714

相关文章

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Redis延迟队列的实现示例

《Redis延迟队列的实现示例》Redis延迟队列是一种使用Redis实现的消息队列,本文主要介绍了Redis延迟队列的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、什么是 Redis 延迟队列二、实现原理三、Java 代码示例四、注意事项五、使用 Redi

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选

hdu1180(广搜+优先队列)

此题要求最少到达目标点T的最短时间,所以我选择了广度优先搜索,并且要用到优先队列。 另外此题注意点较多,比如说可以在某个点停留,我wa了好多两次,就是因为忽略了这一点,然后参考了大神的思想,然后经过反复修改才AC的 这是我的代码 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

安全管理体系化的智慧油站开源了。

AI视频监控平台简介 AI视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。用户只需在界面上进行简单的操作,就可以实现全视频的接入及布控。摄像头管理模块用于多种终端设备、智能设备的接入及管理。平台支持包括摄像头等终端感知设备接入,为整个平台提

poj 3190 优先队列+贪心

题意: 有n头牛,分别给他们挤奶的时间。 然后每头牛挤奶的时候都要在一个stall里面,并且每个stall每次只能占用一头牛。 问最少需要多少个stall,并输出每头牛所在的stall。 e.g 样例: INPUT: 51 102 43 65 84 7 OUTPUT: 412324 HINT: Explanation of the s

poj 2431 poj 3253 优先队列的运用

poj 2431: 题意: 一条路起点为0, 终点为l。 卡车初始时在0点,并且有p升油,假设油箱无限大。 给n个加油站,每个加油站距离终点 l 距离为 x[i],可以加的油量为fuel[i]。 问最少加几次油可以到达终点,若不能到达,输出-1。 解析: 《挑战程序设计竞赛》: “在卡车开往终点的途中,只有在加油站才可以加油。但是,如果认为“在到达加油站i时,就获得了一