Per-cpu 变量
来源:互联网 发布:乐器吉他淘宝 编辑:程序博客网 时间:2024/05/21 09:59
1. 简介
4. 注意
2.6内核的特性,每个处理器都拥有自己的变量副本。
2. 优势每个处理器访问自己的副本,无需加锁,可以放入自己的cache中,极大地提高了访问与更新效率。常用于计数器。
3. 使用相关头文件:<linux/percpu.h>
(1) 编译期间分配
声明:
DEFINE_PER_CPU(type, name);
避免进程在访问一个per-CPU变量时被切换到另外一个处理器上运行或被其它进程抢占:
get_cpu_var(变量)++;put_cpu_var(变量);
访问其他处理器的变量副本用这个宏:
per_cpu(变量,int cpu_id);
(2) 动态分配与释放
动态分配per-CPU变量:
void * alloc_percpu(type);void * __alloc_percpu(size_t size, size_t align); //可以做特定的内存对齐
释放动态分配的per-CPU变量:
free_percpu();
访问动态分配的per-CPU变量的访问通过per_cpu_ptr完成:
per_cpu_ptr(void * per_cpu_var, int cpu_id);
要想阻塞抢占,使用get_cpu()与put_cpu()即可:
int cpu = get_cpu();ptr = per_cpu_ptr(per_cpu_var, cpu);put_cpu();
(3) 导出Per-CPU变量给模块
EXPORT_PER_CPU_SYMBOL(per_cpu_var);EXPORT_PER_CPU_SYMBOL_GPL(per_cpu_var);
要在模块中访问这样一个变量,应该这样做声明:
DECLARE_PER_CPU(type, name);
遍历cpu:
for_each_online_cpu
4. 注意
在某些体系结构上,per-CPU变量可使用的地址空间是受限的,要尽量保持这些变量比较小。
5. Per-CPU变量的实现每个CPU都有对应的专有的数据区,在start_kernel()中调用setup_per_cpu_areas()进行分配和初始化。通过数据区的首地址与偏移量信息访问Per-CPU变量。
- per cpu 变量
- per-cpu变量
- Per-cpu 变量
- Linux Per-cpu变量
- per-CPU变量
- Per-cpu 变量
- Per-CPU变量
- CPU私有变量(per-CPU变量)
- CPU私有变量(per-CPU变量)
- linux:CPU私有变量(per-CPU变量)
- CPU私有变量(per-CPU变量)
- linux:CPU私有变量(per-CPU变量)
- CPU私有变量(per-CPU变量)
- Linux内核中的per-CPU变量
- linux内核:CPU私有变量(per-CPU变量)
- per cpu
- per-CPU变量的静态和动态分配原理
- Linux内核同步原语之per-cpu变量
- fstream文件读写
- sql group by 子句
- linq日期转换
- java并发库之Executors常用的创建ExecutorService的几个方法说明
- smali语法
- Per-cpu 变量
- 二分查找及lower_bound与upper_bound
- HDU1271---整数对 HDU(100)
- 物料主税码及客户税码在哪个表里 ?
- Android_JellyBean 4.2.1 Camera Service 请求过程分析
- 运行程序提示access violation at address的解决方法
- flash模糊遮罩的实现
- tongji 30029 插头dp
- cloudfoundry vmc常用命令