RCU概念
- RCU补丁的审查清单
- RCU和lockdep检查
- Lockdep-RCU Splat
- RCU和可卸载模块
- 卸载使用call_rcu()的模块
- rcu_barrier()
- 实现rcu_barrier()
- rcu_barrier()摘要
- 快速测验答案
- 对rcu_dereference()返回值的正确处理和使用
- 增强型RCU使用错误示例
- 编译器了解过多的示例
- rcu_dereference()家族中应该使用哪个成员?
- RCU保护指针的稀疏检查
- 什么是RCU?-- "读取、复制、更新"
- RCU概述
- RCU的核心API是什么?
- rcu_read_lock()
- rcu_read_unlock()
- synchronize_rcu()
- rcu_assign_pointer()
- rcu_dereference()
- 核心RCU API的一些示例用法
- 如果我的更新线程无法阻塞怎么办?
- RCU的一些简单实现
- 5A. "玩具"实现 #1:加锁
- 5B. "玩具"示例 #2:经典RCU
- 与读者-写者锁定的类比
- 与引用计数的类比
- RCU API的完整列表
- 快速测验答案
- RCU概念
- 常见问题
- 使用RCU hlist_nulls保护列表和对象
- 使用'nulls'
- 查找算法
- 插入算法
- 移除算法
- 避免额外的smp_rmb()
- 查找算法
- 插入算法
- 由RCU保护的列表/数组元素的引用计数设计
- RCU折磨测试操作
- CONFIG_RCU_TORTURE_TEST
- 输出
- 特定内核版本的使用
- 主线内核的使用
- 重复运行
- 分布式运行
- 使用RCU的CPU停滞检测器
- 什么会导致RCU CPU停滞警告?
- 调整RCU CPU停滞检测器
- CONFIG_RCU_CPU_STALL_TIMEOUT
- CONFIG_RCU_EXP_CPU_STALL_TIMEOUT
- RCU_STALL_DELAY_DELTA
- RCU_STALL_RAT_DELAY
- rcupdate.rcu_task_stall_timeout
- 解释RCU的CPU停滞检测器"Splats"
- 一个停滞产生多个警告
- 加速宽限期的停滞警告
- RCU_CPU_STALL_CPUTIME
- 使用RCU保护读多链表
- 示例1:读多列表:延迟销毁
- 示例2:在锁之外执行读端操作:不进行原地更新
- 示例3:处理原地更新
- 示例4:消除陈旧数据
- 示例5:跳过陈旧对象
- 摘要
- 使用RCU保护动态NMI处理程序
- 单处理器系统上的RCU
- 示例1:softirq自杀
- 示例2:函数调用致命
- 示例3:死锁
- 摘要
- 游览TREE_RCU的宽限期内存排序
- 介绍
- 什么是Tree RCU的宽限期内存排序保证?
- Tree RCU宽限期内存排序构建模块
- Tree RCU宽限期内存排序组件
- 将其全部放在一起
- 法律声明
- 游览TREE_RCU的加速宽限期
- 介绍
- 加速宽限期设计
- RCU-preempt加速宽限期
- RCU-sched加速宽限期
- 加速宽限期和CPU热插拔
- 加速宽限期的改进
- 游览RCU的要求
- 介绍
- 基本要求
- 宽限期保证
- 发布/订阅保证
- 内存屏障保证
- RCU原语保证无条件执行
- 读-写升级保证
- 基本非要求
- 读者施加最小排序
- 读者不排除更新者
- 更新者只等待旧读者
- 宽限期不分割读端临界区
- 读端临界区不分割宽限期
- 并行性生活事实
- 实现质量要求
- 专业化
- 性能和可扩展性
- 前进进展
- 可组合性
- 特殊情况
- 软件工程要求
- Linux内核复杂性
- 配置
- 固件接口
- 早期引导
- 中断和NMI
- 可加载模块
- 热插拔CPU
- 调度器和RCU
- 跟踪和RCU
- 对用户内存和RCU的访问
- 能效
- 调度时钟中断和RCU
- 内存效率
- 性能、可扩展性、响应时间和可靠性
- 其他RCU变种
- 底半部分风味(历史)
- 调度风味(历史)
- 可睡眠RCU
- 任务RCU
- 任务粗鲁RCU
- 任务跟踪RCU
- 可能的未来变化
- 摘要
- 致谢
- 游览TREE_RCU的数据结构 [LWN.net]
- 介绍
- 数据结构关系
- rcu_state结构
- rcu_node结构
- rcu_segcblist结构
- rcu_data结构
- rcu_head结构
- task_struct结构中的RCU特定字段
- 存取函数
- 摘要
- 致谢
- 法律声明