LWN:RCU近期的改动!

大功率步进电机驱动系统设计:从H桥电路到STM32控制实战 步进电机驱动系统是工业自动化中的核心控制技术,通过精确的脉冲信号控制电机转动角度和速度。其原理基于H桥电路结构,利用MOSFET或IGBT实现电流放大,配合微步控制算法提升运动平滑性。在技术价值方面,大功率驱动系统解决了传统小功率芯片的局限性,能够满足24V以上、电流超过2A的高扭矩应用需求。这种技术广泛应用于CNC机床、3D打印和工业机器人等场景,其中STM32单片机的高级定时器为脉冲生成提供了硬件支持。本文基于电路设计和控制算法,详细介绍了如何构建稳定可靠的大功率步进电机驱动方案,涵盖散热计算、PCB布 阅读详情

关注了就能看到更多这么棒的文章哦~

Recent RCU changes

By Jake Edge
May 10, 2022
LSFMM
DeepL assisted translation
https://lwn.net/Articles/894379/

2022 年 Linux 存储、文件系统、内存管理和 BPF 峰会(LSFMM)的文件系统和内存管理峰会上,Paul McKenney 介绍了过去几年中对 read-copy-update(RCU)子系统进行了哪些修改。他首先快速概述了什么是 RCU,以及它存在的原因。但他并没有真正深入探讨,因为他认为许多话题中每一个都可能需要 90 分钟才能深入了解,但他确实提供了一些关于最近在 RCU 方面所做工作的描述。

RCU 仍在积极开发中,McKenney 说,这个信息让他在几年前的一次会议上与一位学术界人士交谈时让对方大吃一惊。他没好意思告诉他,locking (加锁)和 atomic(原子操作)也在积极开发中,他笑着说。"但这就是我们现在的情况"。

RCU review

1644c7b4804c71b73836d3e322c43764.png

[Paul McKenney]

最主要的问题是,在 Linux 这样的操作系统中达成共识是成本很高的。虽然 50 年前的自己也会对这一点感到震惊,但事实证明,光速太慢,原子太大;这些东西在如今的并发软件(concurrent software)中造成了大量问题。他说,RCU 处理这个麻烦的方式是在时间(time)和空间(space)上都进行同步。核心的 RCU API 被分成两组时间和空间的调用(temporal and spatial calls)。RCU 是一种允许数据结构的 reader 在 updater (更新者)做出改变时可以继续使用的方法;RCU 最常被用于各种类型的 linked list 链表。

他展示了一张有四个象限的幻灯片,描述了 RCU 在时间方面的工作方式。其基本思想是,reader 在读取数据之前调用 rcu_read_lock(),在完成之后调用 rcu_read_unlock()。这允许 updater 删除加锁了的数据,只要它在实际释放数据之前调用 synchronize_rcu()(或能接收并处理它用 call _rcu() 设置的 callback 函数)。旧的数据可能仍在被 reader 使用中,但 RCU 保证在它从 synchronize_rcu() 返回之前,所有的 reader 都已经完成了 unlock 解锁操作。四个象限中显示了 reader 的 lock/unlock 以及 updater 删除数据、synchronize_rcu() 并且释放旧数据的可能顺序。RCU 阻止了一些可能会导致严重错误行为的顺序,也就是在 lock 之后进行删除,在 unlock 之前释放旧内存。他说,如果这种情况真的发生,那就是 RCU 的一个错误。

他还研究了全局达成协议的开销,将使用 reader-writer lock 的情况与使用 RCU 的情况进行对比。当一个 updater 想使用 reader-writer lock 来修改数据时,在该 lock 传播到每个 reader 之前都会耗费一段时间,然后才可以进行 update 动作,但之后还会耗费一些时间来等待该更新能传达给所有的 reader。在上面说的这两段时间里,reader 都会被卡住,直到能再次读取才行。使用 RCU 的话,相应的时间段就不会再被浪费了,reader 可以继续进行读取,只是可能拿到的是旧版本的数据,而 updater 只需要等到 grace period 结束,就可以确保所有 reader 后续的 read 操作都能看到新的数据。

他展示了一些图表来解释为什么 RCU 的复杂性是可以接受的。RCU 比 reader-writer lock 表现得更好,而且随着线程数量的增加相应的扩展性也会好很多。此外他说,关键区(critical section)越短,CPU 越多,RCU 的效果就越好。RCU 还可以防止一些死锁问题。

关于 RCU 的更多信息可以在 LWN 内核索引的 RCU 专门条目中找到。《The RCU API, 2019 edition》就是一个很好的启蒙材料。

Changes

他的 "RCU 快速回顾" 到此结束。他列出了一份他想谈论的 RCU 的八个改动。他猜测哪些是对听众最重要的,并对它们进行更深入的讲解。首先从整合各种 flavor 开始。

早在 2018 年的某一天,他收到了一封来自 Linus Torvalds 的电子邮件,抄送给 security@kernel.org,其中描述了 RCU 的某个使用场景中的一个漏洞。reader 使用 *_sched() 这种 API 来进行加锁,但 updater 使用了 synchronize_rcu()(本来应该用 synchronize_sched())。在 Linux 4.19 和更早的版本中,需要将这两种方式配对使用。由此产生的 bug 是会出现 use-after-free 的问题,从而导致了这个安全漏洞。

Torvalds 问是否有什么办法处理这个问题。最后决定的方案是让 synchronize_rcu() 对所有种类的 API 都有效。McKenney 说,这花了 "我一年的时间来实现它",但很好地解决了这个问题,除了一个小缺点:如果需要向 4.19 或更早的版本来 backport 一些代码就很麻烦。Amir Goldstein 问道,"这是否意味着我们现在拥有诱饵和陷阱了?" McKenney 同意这一点,但 synchronize_rcu_mult()有一张 "免罪金牌":它可以在那些早期内核中被调用,并可以在当前各种类型的 call _rcu() 中使用。它会对所有调用依次进行 chain 式调用,并在返回前等待所有调用完成,这模拟了较新版本中的 synchronize_rcu(),但要付出一些额外的延迟。

在 5.4 中,Joel Fernandez 为 list_for_each_entry_rcu()(以及 hlist_* 这类变种)增加了 lockdep 支持。这些调用可以接受一个可选的 lockdep 表达式,这就消除了 API 中对这些调用的更多变种的需求。

Uladzislau Rezki 在 5.9 中添加了一个单参数版本的 kvfree_rcu()(kfree_rcu()是它的另一个名字)。以前,kvfree_rcu()需要两个参数:要释放的对象,以及该对象中包含 rcu_head 结构的字段名。现在,将 rcu_head 添加到对象中是个可选动作了,在这种情况下,不需要在参数中提供字段的名称了。如果对象的结构很小,rcu_head 增加的额外开销占比就比较大了。两个参数的版本仍然是支持的,并且一如既往地从不 sleep,但新版本可以在系统没有内存时 sleep。这是一种权衡:你可以使用更小的结构,但它可以 sleep,他说。

RCU 有一些新的变体,用于某些专门的使用场景。他没有说得太详细,但希望人们知道一下 RCU Tasks Rude 和 RCU Tasks Trace,因为它们可能会出现在 traceback 里面。它们主要用于对 trampolines 进行 tracing,他建议那些认为应该使用它们的人在使用这些 API 前与他或其他有经验的用户联系一下。RCU Tasks 从 3.18 开始就存在了,但 Rude 和 Trace 是在 Neeraj Upadhyay 的帮助下加入到 5.8 中的。

可以轮询(polling) 等待 grace period 结束,而不是调用 synchronize_rcu() 并进行等待,这个功能可以追溯到 3.14。轮询是先获得一个 cookie,然后最终将 cookie 传递给 cond_synchronize_rcu()。这个方法是可行的,但不能用于不允许 sleep 的情况。此外,获取 cookie 并不意味着 grace period 已经实际开始了,这在某些使用场景中可能会有问题。在 5.12 中,API 里又加入了一些函数,start_poll_synchronize_rcu()和 poll_state_synchronize_rcu(),以及用于 sleepable RCU 的*_srcu()变体,以便来支持这些使用场景。然而,在使用它们时都有一些需要注意的地方。

在 realtime 和 HPC 社区最感兴趣的功能就是 run-time callback offloading (以及 deoffloading)的支持,这是由 Frédéric Weisbecker 在 5.12 中加入的。通常情况下,RCU callback 都是在它们正在排队的 CPU 上执行的,但这可能会干扰到 CPU 上运行的其他 task。所以有一种方法可以将这些 callback 来 offload 到内核线程(kthread)中,然后将这些 kthread 分配到其他地方执行。

传统上是在启动时通过选择哪些 CPU 将被用于 callback 来完成指定执行的任务的,而且不重启就不能改变。Weisbecker 添加了一个基础设施,允许在运行时来改变这些指定关系;一个 CPU 在启动时被标记为 "可能被 offload",然后它可以在任何什么时候切换为 offload 模式或切换回来。目前,有一个内核内部函数来做这件事,但 McKenney 认为后续还是会将其跟用户空间的接口关联起来。

另一个功能是为 sleepable RCU(SRCU)代码提供 "内存减肥(memory diet)"。以前它会根据 NR_CPUS 来分配一个数组,这是内核可以处理的最大 CPU 数量。这个数字有时被发行版提供商设置为 4096,尽管绝大多数运行系统中的 CPU 数量都远没这么多。因此,现在不是在构建时来分配 array 了,而是在运行时来根据实际存在的 CPU 数量进行分配。这将在 5.19 版本中实现。

5.19 版的另一个功能是由 Rezki 贡献的实时加速宽限期(realtime expedited grace period)。McKenney 简要介绍了 RCU CPU-stall timeout 的历史。在 1990 年代,Dynix/PTX 使用的是 1.5s;在 2000 年代,Linux 使用 60s,这让他有些失望。在 2010 年代,Linux 下降到 21s;现在提出了一个 patch 来改为 20ms。在安卓系统上,这个 expedited grace period 的超时是 20ms,而在其他系统上将保持 21s。

为了使其发挥作用,还需要 Kalesh Singh 的一些额外 patch。通常情况下,expedited grace period 是由 workqueue 来驱动的,并且像普通的用户空间进程一样,用 SCHED_OTHER 这个 schedule class 来运行。这些 patch 将会在 SCHED_FIFO 调度类(schedule class)中增加一种新的 expedited kthread,他说这就像是 "强效药"。它仅限于少于 32 个 CPU 的系统,没有 realtime,并且启用了优先级提升(priority boosting)功能。他说,测试结果令人印象深刻,latency 降低了三个数量级,大约降低到 2ms。这就像是一种在快速路径(fast path)上有 expedited grace period 的实时系统;"如果你去年告诉我会有这种程度的优化,我一定会当面嘲笑你。"

Future

他说,他今年已经 100 岁了,也可能是 40 岁,但以十进制的话当然是 64 岁。他预计会继续这些工作,也指出他的父亲和祖父们一直工作到 90 岁左右,但 "大自然母亲的退休计划" 事实上都是我们所有人的归宿,所以需要做好准备。他列举了未来可能会致力于的一些事情,但指出,那些他看不到的事情会使这个情况变得复杂。需要有对 RCU 有很好理解的人,在这些事情出现时进行处理。

他回顾了截止 2017 年 4 月的两年时间里对 RCU 的 commit 列表(所以这是五年前的情况)。其中有 46 个贡献者,其中大多数人贡献了一个 patch,而 McKenney 贡献了绝大多数的 patch(288 个 patch, 占比 74%)。从 2022 年 4 月开始看前两年的情况的话,显示有 79 个贡献者,McKenney 所提交的 patch 比例下降到 63%(503 个补丁)。patch 总数量增加的一个原因是,自从他在 Facebook 开始工作以来,他集中精力为 RCU 增加更多的分布式测试。

总的来说,这个趋势是好的。最近有一些开发者也深入到 RCU 内部做了大量工作,这很好。然而仍有很多工作要做,他说。他多年来注意到的一件事是,一旦有一个开发者表明他们可以在 RCU 上工作,那么有一些公司就会付他们很多钱来让他们去做其他事情。这是好事,因为具有一些 RCU 知识的人分布在社区各处。最近,他注意到不少开发人员坚守在 RCU 这个领域,这就更好了。

他说,RCU 知识和理解需要在整个社区内更好地进行传播。他推荐了两个他所做的演讲,作为这方面的起点(https://www.linuxfoundation.org/webinars/unraveling-rcu-usage-mysteries/ 和 https://linuxfoundation.org/webinars/unraveling-rcu-usage-mysteries-additional-use-cases/ ),但还需要更多。还有一个更普遍的问题是,如何为一个特定的问题选择正确的同步工具,毕竟 RCU 并不总是正确的选择,这也是另一个需要在内核社区内更好地理解和宣传的领域。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

1627c18c154a75b74d89db56c7084b1a.png

深入剖析Linux RCU原理(一)初窥门径 RCU, Read-Copy-Update,是Linux内核中的一种同步机制。RCU常被描述为读写锁的替代品,它的特点是读者并不需要直接与写者进行同步,读者与写者也能并发的执行。RCU的目标就是最大程度来减少读者侧的开销,因此也常用于对读者性能要求高的场景。优点:读者侧开销很少、不需要获取任何锁,不需要执行原子指令或者内存屏障;没有死锁问题;没有优先级反转的问题;没有内存泄露的危险问题;很好的实时延迟;缺点:写者的同步开销比较大,写者之间需要互斥处理; 阅读详情

相关推荐

开源TMS系统cortex-tms私有化部署与二次开发实战指南

运输管理系统(TMS)是现代物流数字化的核心组件,它通过将线下零散的物流操作转化为线上标准化、可追溯的数据流,实现订单、调度、跟踪与结算的全流程管理。其技术原理通常基于微服务架构,采用Spring Boot、Vue.js等成熟技术栈构建,确保系统的稳定性和可扩展性。TMS的技术价值在于显著提升物流企业的运营效率、降低成本并增强过程可控性,尤其适用于中小型物流企业实现从手工管理到系统化管理的跨越。在应用场景上,TMS广泛应用于车队管理、订单跟踪和财务结算等环节。本文聚焦于开源TMS项目cortex-tms,深

weixin_42523907的博客 746

kfree_rcu实现浅析

原因在于,rcu callback链表里面,连着的都是struct rcu_head的对象,但是kfree释放的对象的地址,无法直接等同于这个struct rcu_head的对象的地址;奇怪的是,__kfree_rcu的第二个参数,获取的是offsetof(typeof(*(ptr)), rcu_head),最后将这个值,作为rcu_callback_t类型的变量,传递给了__call_rcu。注释写的非常清楚,kfree_rcu的作用,就是在一个gp后,将相关对象通过kfree释放掉。

kaka__55的博客 889

保姆级教程:用Comsol Multiphysics仿真你的第一个SAW滤波器(含压电材料参数设置)

本文提供了一份详细的COMSOL Multiphysics教程,指导读者完成表面声波滤波器(SAW)的压电仿真全流程。从压电材料参数设置、叉指换能器建模到多物理场耦合分析,特别强调了实际应用中容易出错的细节和解决方案,帮助工程师快速掌握SAW滤波器仿真技术。

weixin_42665255的博客 590

【Linux 内核源码分析】RCU机制

RCU的核心思想是在更新操作时,不立即删除旧版本的数据,而是等待所有正在使用旧版本数据的读者完成后再删除。当一个线程或进程进入临界区时,它会尝试获取互斥锁,如果锁是可用的,则表示资源未被占用,线程或进程可以获取锁并进入临界区;宽限期的长度通常是预先确定的,并与系统的需求和特性相关。此外,为了保证有序的更新,编写者必须使用某种同步机制,如锁定,来确保在进行写操作时其他写操作不会干扰更新的顺序。这是因为在RCU中,读操作是无锁的,但写操作需要确保数据结构的一致性和正确性,因此需要使用同步机制来避免竞争条件。

C/C++Linux、音视频、DPDK 3726

LLC同步整流实战:从驱动时序到调试仿真,效率提升与避坑指南

同步整流技术是提升开关电源效率的关键手段,尤其在LLC谐振变换器中,通过低导通电阻MOSFET替代二极管可显著降低副边整流损耗。然而,驱动时序、电流过零检测及轻载模式切换是工程实践中的核心难点。从Vds检测原理到死区调节,再到仿真与实测验证,工程师需掌握完整的调试方法论。该技术广泛应用于通信电源、服务器电源及车载DC/DC,合理设计LLC同步整流方案能实现满载效率提升约1.8个百分点,同时优化热分布。本文以600W半桥LLC样机为线索,深入分析工作模态、驱动芯片选型、波形判断与仿真模型搭建,为电源设计提供可

weixin_29165465的博客 294

RK3568 低功耗设计全解析:DVFS 策略与 PMIC 电源管理

本文深入解析RK3568处理器的低功耗优化方案。从硬件架构分析入手,阐述四核Cortex-A55的功耗特性及分层电源域设计。重点介绍DVFS动态调压调频技术,包括Linux内核配置方法及场景化策略设计。详细讲解RK809 PMIC的电源管理优化,提供外设电源域控制与休眠唤醒配置的实战案例。通过智能终端应用实例,展示待机功耗从280mA降至65mA的优化效果,并推荐功率测试工具。文章强调需要平衡性能与功耗,结合场景定制策略,并指出AI负载预测等未来优化方向,为RK3568开发者提供系统性的低功耗解决方案。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2073

Linux学习笔记(2)--一些内核接口

RCU是一种经典的读写锁算法,用于保护共享的数据结构,它的特点是在读的过程中不需要获取锁,在写的过程中通过复制一份数据来保证读操作不受写操作的影响。当一个线程或进程执行 wait_for_completion() 函数时,如果它所等待的事件还没有完成,那么就会进入睡眠状态(即挂起当前线程或进程),直到所等待的事件完成,并调用 complete() 函数告知等待队列中的所有等待者事件已经完成为止。具体来说,当内核中的某个结构体需要在多个地方被引用,通过使用 kref 引用计数器可以追踪该结构体被引用的数量。

X_s_yu的博客 1256

Ubuntu 22.04+/WSL2 中解决 `error: externally-managed-environment` 并成功安装 PyTorch + vLLM 的完整指南

Ubuntu 22.04+/WSL2 因遵循 PEP 668 规范,系统 Python 被标记为“外部管理”,导致直接使用 pip install 安装包时报错 externally-managed-environment。解决方案是创建虚拟环境: 通过 python3 -m venv ~/vllm-env 创建隔离环境 激活环境后安装 PyTorch(CUDA 12.1)和 vLLM 避免使用 sudo pip 或 --break-system-packages,防止破坏系统依赖 关键点: 虚拟环

刘一说的IT专栏 296

Linux内核同步机制之RCU实现

深入理解RCU实现——基于内核2.6.21RCU实现RCU(Read-Copy Update),顾名思义就是读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。那么这个“适当的时机”是怎么确定的呢?这是由内核确定的,也是我们后面讨论的重点。RCU实际上是一种改进的rwlock,读者几乎没有什么同步开销,它不需

m0_74282605的博客 1637

C++程序发生内存越界,一定会导致程序崩溃吗?详解内存越界

内存越界是否一定会导致程序崩溃吗?详解内存越界

dvlinker的技术专栏 1万+

PaddleOCR全版本完整指南:从入门到精通,全面解析安装部署与高级应用

摘要 本文详细介绍了PaddleOCR的完整安装与使用指南。首先讲解了环境准备步骤,包括Python 3.11虚拟环境创建和PaddlePaddle框架的CPU/GPU版本安装。接着介绍了PaddleOCR库的安装方式,可选功能模块(文档解析、信息抽取、翻译等)及其依赖组。通过示例代码演示了PPStructureV3文档解析功能的基本用法,并提供了安装验证方法。最后针对常见问题(Windows中文用户名报错、模型下载问题)给出解决方案。文章为从入门到精通的PaddleOCR用户提供了全面的技术指导。

算法工程师 1366

LWN:减少vmap 锁冲突!

关注了就能看到更多这么棒的文章哦~Mitigating vmap lock contentionBy Jonathan CorbetMay 26, 2023LSFMM+BPFDeepL assisted translationhttps://lwn.net/Articles/932396/"vmap area" 是在 kernel 需要映射一段内存到虚拟地址时可以使用的一段 kernel 地址空间...

Linux News搬运工 1134

手把手教你学simulink(8.39)--基于Simulink的步进电机(Stepper Motor)仿真实例

通过这个仿真实例,你可以学习如何使用Simulink构建和仿真步进电机(Stepper Motor)系统。你可以根据实际需求调整模型和参数,进行更复杂的仿真和分析。希望这个例子对你有所帮助,祝你学习愉快!

MHD0815的博客 1051

LWN:SLUB分配器的下一步计划!

关注了就能看到更多这么棒的文章哦~What's next for the SLUB allocatorBy Jonathan CorbetMay 20, 2024LSFMM+BPFGemini-1.5-flash translationhttps://lwn.net/Articles/974138/Linux 内核中存在两个级别的基本内存分配器:页分配器 (page allocator),以页为单...

Linux News搬运工 465

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

阿里内核月报2014年12月

Live kernel patching on track for 3.20 运行时间敏感的用户一直以来都很希望有一种方法可以在不重启系统的情况下对运行的操作系统内核打补丁。目前有几个还没有进入主线内核的实现(比如:kpatch, Kgraft)。很明显,这些实现不可能全部进入upstream内核。从最近Jiri Kosina发出的一组补丁来看, 内核热...

weixin_33725239的博客 601

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

内核月报201702

Upstream 4.10-rc7 文章来源 *LWN 文章摘要 The future of the page cache *https://lwn.net/Articles/712467/ 齐江 十刀 持久化内存用得越来越多, 促使了内核的一系列变更, 内核是否还真的需要页面缓存呢? 在2017 linux.conf.au会上, Matthew Wi...

weixin_34050389的博客 295

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Linux内核同步3-RCU

1 RCU原理RCU(Read-Copy Update),顾名思义就是读-拷贝修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写者在访问它时首先拷贝一个副本,然后对副本进行修改,最后使用一个回调(callback)机制在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的CPU都退出对共享数据的操作。因此RCU实际上是一种改进的rwlock,读者几乎没有什么同步开销,它不需要锁,不使用原子指令,而且在除alpha的所有架构上也不

个人笔记共同分享 1947

RCU 使用及机制源码的一些分析

rcu 使用说明,实现原理的简单分析

看我眼色行事的博客 2729

RCU(1)- 概述

RCU(1)- 概述http://www.wowotech.net/kernel_synchronization/461.html 作者简介:余华兵,在网络通信行业工作十多年,负责IPv4协议栈、IPv6协议栈和Linux内核。在工作中看着2.6版本的专业书籍维护3.x和4.x版本的Linux内核,感觉不方便,于是自己分析4.x版本的Linux内核整理出一本书,书名叫《Linux内核深度解析》,2019年5月出版,希望对同行有帮助。 RCU(Read-Copy Update)的意思是读-复制更新,它是根

maimang1001的专栏 1332

Linux 内核揭秘:内存泄漏检测,kmalloc 与 kfree 的使用规范

内存泄漏(Memory Leak)是内核开发中最隐蔽的问题之一。当驱动或内核模块使用 `kmalloc` 分配内存后未用 `kfree` 释放,会导致系统内存逐渐耗尽,最终引发 OOM(Out Of Memory)崩溃。本文将从内存分配原理出发,详解 `kmalloc` 与 `kfree` 的规范用法,结合工具链与最佳实践,帮助开发者从源头避免内存泄漏。 ## 内存分配核心 API:kmallo...

gitblog_01075的博客 1072

RCU锁基本概念

文章目录RCU锁起源最简单的RCU锁 RCU锁起源 最简单的RCU锁

Take Easy,Work Hard! 4572

linux 可睡眠RCU

linux 可睡眠RCU

一叶知秋的博客 874

linux srcu学习

参考连接 cLinux内核同步 - sleepable RCU的实现 - AlanTu - 博客园

baidu_38316985的博客 743

RCU浅析理解

RCU - Read-Copy-Update (读时加锁,写时拷贝,读后更新)为读写锁的升级版特点:运行读者和写者并发执行;最大程度减少读者侧的开销;没有死锁问题没有优先级反之问题没有内存泄漏问题很好的实时延迟写者的同步开销比较大,写者之间需要互斥处理。

vertor11的博客 922

linux rcu浅析

rcu浅析

kaka__55的博客 2304

RCU机制简单分析

简介 RCU(Read-Copy Update)是数据同步的一种方式,在当前的Linux内核中发挥着重要的作用。RCU主要针对的数据对象是链表,目的是提高遍历读取数据的效率,为了达到目的使用RCU机制读取数据的时候不对链表进行耗时的加锁操作。这样在同一时间可以有多个线程同时读取该链表,并且允许一个线程对链表进行修改(修改的时候,需要加锁)。RCU适用于需要频繁的读取数据,而相应修改...

~~ LINUX ~~ 643
上一篇: LWN:改变文件系统resize方式!
下一篇: LWN:改进内存管理相关的文档!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值