Linux 内核 内存管理RCU 机制 ⑤ ( RCU 层次架构概念 | RCU 层次架构源码解析 | RCU 层次架构每层最多叶子数 | RCU 层次架构每个叶子 CPU 数量 )
Posted 韩曙亮_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核 内存管理RCU 机制 ⑤ ( RCU 层次架构概念 | RCU 层次架构源码解析 | RCU 层次架构每层最多叶子数 | RCU 层次架构每个叶子 CPU 数量 )相关的知识,希望对你有一定的参考价值。
文章目录
一、RCU 层次架构概念及源码
RCU 机制 中 , 会 根据 CPU 数量 , 按照 " 树形结构 “ 组成 RCU 层次架构 , 称为 ” RCU Hierarchy " ;
在 Linux 源码 linux-5.6.18\\include\\linux\\rcu_node_tree.h
头文件中定义了 RCU 层次架构 ,
RCU 层次架构 源码 :
/*
* Define shape of hierarchy based on NR_CPUS, CONFIG_RCU_FANOUT, and
* CONFIG_RCU_FANOUT_LEAF.
* In theory, it should be possible to add more levels straightforwardly.
* In practice, this did work well going from three levels to four.
* Of course, your mileage may vary.
*/
/* #ifdef CONFIG_RCU_FANOUT */
/* #else #ifdef CONFIG_RCU_FANOUT */
/* #ifdef CONFIG_RCU_FANOUT_LEAF */
/* #else #ifdef CONFIG_RCU_FANOUT_LEAF */
源码路径 : linux-5.6.18\\include\\linux\\rcu_node_tree.h#31
二、RCU 层次架构源码解析
" RCU 层次架构 “ 是 根据 ” CPU 数量 " 确定的 ,
在 Linux 内核源码中 , 通过各种 " 宏定义 “ 构建 ” RCU 层次架构 " ,
1、RCU 层次架构每层最多叶子数
CONFIG_RCU_FANOUT
宏 , 表示 每个层次 支持的最多的叶子个数 ;
/* #ifdef CONFIG_RCU_FANOUT */
/* #else #ifdef CONFIG_RCU_FANOUT */
2、RCU 层次架构每个叶子 CPU 数量
CONFIG_RCU_FANOUT_LEAF
宏 , 表示 每个 子叶 对应的 CPU 数量 ;
/* #ifdef CONFIG_RCU_FANOUT_LEAF */
/* #else #ifdef CONFIG_RCU_FANOUT_LEAF */
以上是关于Linux 内核 内存管理RCU 机制 ⑤ ( RCU 层次架构概念 | RCU 层次架构源码解析 | RCU 层次架构每层最多叶子数 | RCU 层次架构每个叶子 CPU 数量 )的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核 内存管理RCU 机制 ② ( RCU 机制适用场景 | RCU 机制特点 | 使用 RCU 机制保护链表 )
Linux 内核 内存管理RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )
Linux 内核 内存管理RCU 机制 ① ( RCU 机制简介 | RCU 机制的优势与弊端 | RCU 机制的链表应用场景 )
Linux 内核 内存管理RCU 机制 ③ ( RCU 模式下添加链表项 list_add_rcu 函数 | RCU 模式下删除链表项 list_del_rcu 函数 )
Linux 内核 内存管理RCU 机制 ④ ( RCU 模式下更新链表项 list_replace_rcu 函数 | 链表操作时使用 smp_wmb() 函数保证代码执行顺序 )