Per-cpu 变量
1. 简介
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 变量相关推荐
- linux内核中的每cpu变量
一.linux中的每cpu变量 看linux内核代码的时候,会发现大量的per_cpu(name, cpu),get_cpu_var(name)等出现cpu字眼的语句.从语句的意思可以看出是要使用与当 ...
- linux进程网络均衡,linux多CPU进程负载均衡解析
在linux中,支持对称smp的处理器模型,在多处理器的情况下,每个处理器都有自己的一个运行队列,这样就存在着分配不均的情况,有的cpu运行队列很多进程,导致一直很忙,有的cpu运行队列可能很少的进程 ...
- linux内核死锁检测机制 | oenhan,Linux内核CPU负载均衡机制 | OenHan
还是神奇的进程调度问题引发的,参看Linux进程组调度机制分析,组调度机制是看清楚了,发现在重启过程中,很多内核调用栈阻塞在了double_rq_lock函数上,而double_rq_lock则是lo ...
- CPU Cache Line伪共享问题的总结和分析
原文:吴一昊,杨勇 Linux阅码场 地址:CPU Cache Line伪共享问题的总结和分析 Table of Contents 1. 关于本文 2. 背景知识 2.1 存储器层次结构 2.2 多核 ...
- 实现自我隐藏 CPU 利用率的最佳方法,不妨一试!
作者 | dog250 头图 | CSDN 下载自视觉中国 出品 | CSDN 博客 想不想让CPU利用率展示成一首优美的旋律,就像弹琴一样. 我的意思是,你想让系统以及 task 的 CPU 利用率 ...
- x86 PerCPU变量基址(gs寄存器)的原理
0. 引子 我们在调试的时候发现,x86下有一个快捷方法,只需一条简单的汇编指令mov %gs:var就能取出某个percpu变量在当前cpu的值,非常高效. unsigned long get_me ...
- linux内核之Per-CPU变量
前言 通过Per-cpu变量除了可以分配内存,还有一个最大的好处就是不需要考虑同步.最好的同步技术就是把不需要同步的内核放在首位,因为每种显示的同步原语都有不容忽视的开销. 本质:Per-cpu变量主 ...
- 优化多核CPU的TCP新建连接性能--重排spinlock
2018/06/05 凌晨,雨夜! 迟到的雨,还是来了! 人们几乎已经逼近了单CPU的处理时延极限,于是人们希望通过多CPU的方式来提高处理带宽,从而得到更多的处理容量,理论上讲,这无可厚非,但现实中 ...
- 可以自己隐藏自己CPU利用率的Rootkit(附:Rootkit的root权限)
想不想让CPU利用率展示成一首优美的旋律,就像弹琴一样. 我的意思是,你想让系统以及task的CPU利用率是多少它就是多少,一切都是由你的程序自己来 调制演奏. 这需要一种自指机制. 哈哈,完全可以, ...
- linux内核percpu变量声明,Linux内核同步:per_cpu变量
per cpu变量相关函数和宏 DEFINE_PER_CPU_SHARED_ALIGNED(type,name):静态分配per_cpu数组,数组名为name,结构类型为type DEFINE_PER ...
最新文章
- 基础知识 一个工具给win7 win10的同学 或者MAC 可以跳过
- PAT甲级1145 Hashing - Average Search Time:[C++题解]哈希表、哈希表开放寻址法、二次探测法、求平均查找次数
- lighttpd+fastcgi 返回500错误码_阿根廷著名电视减肥冠军去世 临终前体重达到500公斤...
- CF1096D Easy Problem(DP)
- 杭电oj 1000 c++ 版本
- 朝鲜红星操作系统落后当今水准约10年
- python3简明教程-实验楼_#python实验楼教程#学Python哪里有一问一答的Python学习?求具体的~...
- unicode编码java_JAVA转化Unicode编码
- i8一点通如何加载虚拟光驱玩游戏
- Origin 使用笔记
- 网络安全--安全攻防概述
- 网络对时服务器(NTP校时服务器)应用港口信息化系统
- 用python画一个正方形
- ArchiSteamFarmV3.0使用服务器steam云挂卡
- 49种软件验收测试方法大分享,快来看
- 前端模板引擎 -- Freemarker
- 第一行代码-第二版(郭霖著)笔记十一(Material Design)
- NVIDIA NCCL 源码学习(八)- 数据通信链路transport的建立
- 大一上学期Python学习心得体会
- 图片补全《Globally and locally consistent image completion》