Linux Per-cpu变量

1,Linux per-cpu变量的作用

当创建一个per-CPU变量时,系统中的每个处理器都会获得它自己对这个变量的拷贝(副本).存取per-CPU变量时几乎不需要加锁,因为每个处理器使用的都是它自己的拷贝



2,Linux per-cpu变量的使用

在编译的时候声明一个per-cpu变量

编译期间创建一个per-CPU变量:
    DEFINE_PER_CPU(int,my_percpu); //声明一个变量
    DEFINE_PER_CPU(int[3],my_percpu_array); //声明一个数组

使用编译时生成的per-CPU变量:
    ptr = get_cpu_var(my_percpu); //
    使用ptr
    put_cpu_var(my_percpu); //

当然,也可以使用下列宏来访问特定CPU上的per-CPU变量
    per_cpu(my_percpu, cpu_id); //
 
per-CPU变量导出,供模块使用:
    EXPORT_PER_CPU_SYMBOL(per_cpu_var);
    EXPORT_PER_CPU_SYMBOL_GPL(per_cpu_var);

动态分配一个per-cpu变量

动态分配per-CPU变量:
    void *alloc_percpu(type);
    void *__alloc_percpu(size_t size, size_t align);

使用动态生成的per-CPU变量:
    int cpu;
    cpu = get_cpu();
    ptr = per_cpu_ptr(my_percpu);
    //使用ptr
    put_cpu();



3,per-cpu变量的原理

在调用get_cpu_var函数生成一个per-cpu变量的时候,该函数调用了preempt_disable()函数来禁止内核抢占,在多核SMP系统中,在编译的时候每个cpu的变量放在data.percpu段,在系统初始化期 间,start_kernel()函数中调用setup_per_cpu_areas()函数,用于为每个cpu的per-cpu变量副本分配空间.

11 #define DEFINE_PER_CPU(type, name) \
  12 __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值