深入理解 Linux 内核中的每 CPU 变量
1. 引言
在大型 NUMA 系统中,处理每 CPU(per-CPU)数据能确保数据安全和良好的性能,因为缓存效应不再是需要关注的问题。本文将详细介绍每 CPU 变量的使用,包括分配、初始化、释放以及读写操作,还会通过示例和内核中的实际用例来加深理解。
2. 每 CPU 变量的基本操作
2.1 工作原则
在使用每 CPU 变量时,必须使用内核提供的辅助方法(宏和 API),而不要直接访问它们,这与引用计数和原子操作符的使用类似。
2.2 分配、初始化和释放
每 CPU 变量大致分为静态分配和动态分配两种类型:
- 静态分配 :通常通过 DEFINE_PER_CPU() 或 DECLARE_PER_CPU() 宏在编译时分配内存。使用 DEFINE_PER_CPU() 可以一次性完成变量的分配和初始化。例如:
#include <linux/percpu.h>
DEFINE_PER_CPU(int, pcpa); // signature: DEFINE_PER_CPU(type, name)
在一个有四个 CPU 核心的系统中,初始化后这个每 CPU 变量在概念上会有四个实例。
- 动态分配 :可以通过 alloc_percpu() <
超级会员免费看
订阅专栏 解锁全文

2087

被折叠的 条评论
为什么被折叠?



