问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Linux中的RCU机制[二] - GP的处理

发布网友 发布时间:2024-09-30 20:13

我来回答

1个回答

热心网友 时间:2024-10-17 00:17

Linux中的RCU机制[一] - 原理与使用方法

说明:由于现代 RCU 的实现已非常复杂,本文将基于 Linux 2.5.43 版本来解释 RCU 的基本概念与使用方法,同时也会涉及一些现代 RCU 的特性。

GP 的生命周期

RCU 的 Grace Period(GP)从产生到结束的生命周期如下:GP 由 writer 的 CPU 发起,发生在 writer 调用 synchronize_rcu()/call_rcu() 的时刻,表示准备释放一个 object 的时候。释放的具体操作(callback)被填入 object 的 "rcu_head" 中,然后加入到待执行的链表中。"rcu_head" 主要用于携带 callback 信息,类似于 "list_head"。

何时开始与何时结束

GP 开始于 writer 发起释放 object 的操作,结束条件取决于 CPU 的状态。在默认的 non-preemptible 的 RCU 中,reader 所在的 CPU 上的调度在进入临界区时关闭,直到退出后重新打开。除非涉及 SRCU 的情况,临界区内的代码不能睡眠或阻塞,因此不会发生线程切换。

判断退出临界区

当 CPU 开始执行其他任务,说明发生了线程切换,意味着该 CPU 已退出临界区。在 tick 中断时,如果 CPU 在 userspace 执行代码,同样可以判断临界区已退出。处于 idle loop 中的 CPU 也可作为判断依据,虽然代码做了裁剪,未加入 interrupt context 的判断。

判断退出的机制

在 tasklet 的执行函数中,通过比较 "qsctr" 的变化来判断是否退出了临界区。"qsctr" 是 QS 的计数,从 reader 退出临界区开始,到可以判定离开临界区的这段时间,被称为 "Quiescent State"(QS)。

QS 与 GP

QS 是 CPU 私有的,而 GP 是全局的,类似于“一票否决制”。当所有 CPU 都进入 QS,GP 才能结束。分配 bitmap 用于标记每个 CPU 的状态,GP 开始后将所有 bit 置 1,一个 CPU 进入 QS 后,将其对应的 bit 清零。所有 bits 都被置 0 后,就可以判断 GP 的结束。

存在的问题与解决方案

多个 CPU 同时操作 bitmap 的问题需要使用 spinlock 来保护。对于 CPU 数量较多的情况,采用层级管理结构,每个 CPU 向 "rcu_node" 的 leader 汇报 QS 标记状态,增强了系统的扩展性。

为什么 writer 侧的 callback 需要 per-cpu 的链表?

同一个 writer 可能发起多个 object 的 GP,因此采用链表排队,并且链表是 per-cpu 的。即使在 GP 之间,一个 writer 可能同时处理多个 callback,直到所有 GP 的 CPU 都进入 QS,这些 GP 的 callback 才能一起执行。

RCU 的优势与问题

RCU 的基本流程介绍完毕,下文将探讨 RCU 的优势、问题以及衍生品种 SRCU。

注-1:Tree RCU 的实现没有采用 rbtree 或者 radix tree,而是通过数组与指针连接形成逻辑上的树形关系,同时实现广度优先遍历。

注-2:郭大侠的讲解深入浅出,让一些难以理解的 Linux 内核细节变得清晰,实属难得。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
信息系统集成资质几级最高 计算机信息系统集成企业资质等级评定条件计算机信息系统集成企业资质等 ... 计算机信息系统集成企业资质等级评定条件实施细则一级资质 win10电脑密码错误win10开机密码错误 windows怎么更换密码错误 电脑没设置密码老是显示密码不正确电脑密码一直显示输入不正确 我把苹果手机系统 。 一更新 。 卡着了 。 然后就这样了 。 这出现... 我iphone想更新到9,是直接在手机按的更新,但是中途变成了这样 为什么有时早上4点多觉胸一下感觉很累的像给人吓一跳似 睡觉醒来时觉得胸部难受有点累是怎么回事 Linux 内核数据结构:位图(Bitmap) ...16岁还没有满、<大概5月份的时候满> 。我想知道我变声期过了没... 我男生 15岁 我想做个歌手 可以么 我觉得我唱歌很好听 我可以吃任何... 什么是变声啊?会不会变得很难听?(我十月十五过12岁生日)怎么断定_百度... 我男的 15岁 变声期有几阶段?我也不知道我什么时候开始变声的 但一定... 奶瓶龋齿早期如何治疗 ...花藤字初ོ见ꦿ℘゜এ符号改成西瓜,谢谢! ...帮我吧这个花藤字初ོ见ꦿ℘゜এ符号改成清风过 和梨花落... 求大神帮忙改下花藤字体初ོ见ꦿ℘゜এ 改成 沧海 谢谢 ...帮我吧这个花藤字初ོ见ꦿ℘゜এ符号改成死神,谢谢了_百度... ...可以把花藤字体初ོ见ꦿ℘゜এ符号改成卟忆。帮帮我谢谢啦... ...我把这个花藤字初ོ见ꦿ℘゜এ符号改成:逗猫 谢谢了!_百 ... 哪位大神能帮我把这个花藤字初ོ见ꦿ℘゜এ符号改成:未 谢谢... 人工肾上市吗 中长期铁路网规划相关信息 我买的车是朗逸1.6AT 发现打空调油耗好大啊 基本在9升 夏天了有什么办... 2015款朗逸,1.6L手舒油耗多少?希望已经买了这款车的朋 女生穿过膝袜该怎么搭配才吸睛? 过膝袜怎样穿搭比较时髦? 怎样做出好看的生日贺卡 好看的生日贺卡做法 (二)Linux 内存初始化-看见DTB zlib业界应用 贝雷架适用范围 321型贝雷桥介绍 抓娃娃口诀上上 抓娃娃口诀上上下下左左右右 硫酸铝理化性质 中华人民共和国化工行业标准:工业硫酸铝化学性质 猛犸牙的收藏价值高吗? 猛犸象牙有收藏价格吗? amd fx8120eight core processor陪那款风扇好 ...推荐一些好看的老一点的武侠电影啊(很好看的就算不是武侠也可以) FX-8120求静音与散热强力的风扇 怎么把歌放到酷狗里,说清楚点,好难啊!歌词怎么老改不了。拜托各位高手了... 辽宁速航物流有限公司怎么样? 小米手机怎么gps定不起位置 本人小米1S为什么打开GPS后一颗卫星也找不到(注:本人小米刷过机为最新... 金涵畲族乡历史沿革 金涵畲族乡行政区划 天山雪莲多少一克