【Linux 内核 内存管理】RCU 机制 ⑤ ( RCU 层次架构概念 | RCU 层次架构源码解析 | RCU 层次架构每层最多叶子数 | RCU 层次架构每个叶子 CPU 数量 )

本文详细介绍了Linux内核中的RCU层次架构,该架构根据CPU数量采用树形结构组织,以优化资源协调。在源码层面,RCU_FANOUT宏定义了每层的最大叶子数,RCU_FANOUT_LEAF宏则指定了每个叶子所对应的CPU数量。通过宏定义动态调整,适应不同系统配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >





一、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
#define RCU_FANOUT CONFIG_RCU_FANOUT
#else /* #ifdef CONFIG_RCU_FANOUT */
# ifdef CONFIG_64BIT
# define RCU_FANOUT 64
# else
# define RCU_FANOUT 32
# endif
#endif /* #else #ifdef CONFIG_RCU_FANOUT */

#ifdef CONFIG_RCU_FANOUT_LEAF
#define RCU_FANOUT_LEAF CONFIG_RCU_FANOUT_LEAF
#else /* #ifdef CONFIG_RCU_FANOUT_LEAF */
#define RCU_FANOUT_LEAF 16
#endif /* #else #ifdef CONFIG_RCU_FANOUT_LEAF */

#define RCU_FANOUT_1	      (RCU_FANOUT_LEAF)
#define RCU_FANOUT_2	      (RCU_FANOUT_1 * RCU_FANOUT)
#define RCU_FANOUT_3	      (RCU_FANOUT_2 * RCU_FANOUT)
#define RCU_FANOUT_4	      (RCU_FANOUT_3 * RCU_FANOUT)

在这里插入图片描述

源码路径 : 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
#define RCU_FANOUT CONFIG_RCU_FANOUT
#else /* #ifdef CONFIG_RCU_FANOUT */
# ifdef CONFIG_64BIT
# define RCU_FANOUT 64
# else
# define RCU_FANOUT 32
# endif
#endif /* #else #ifdef CONFIG_RCU_FANOUT */

2、RCU 层次架构每个叶子 CPU 数量


CONFIG_RCU_FANOUT_LEAF 宏 , 表示 每个 子叶 对应的 CPU 数量 ;

#ifdef CONFIG_RCU_FANOUT_LEAF
#define RCU_FANOUT_LEAF CONFIG_RCU_FANOUT_LEAF
#else /* #ifdef CONFIG_RCU_FANOUT_LEAF */
#define RCU_FANOUT_LEAF 16
#endif /* #else #ifdef CONFIG_RCU_FANOUT_LEAF */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值