操作系统 — 了解CPU cache
2018-03-11 11:10
309 查看
CPU cache
Cache一词源自法语,其原意为"藏匿处,隐藏的地方". Cache被应用于计算机科学之后,专指CPU与主内存之间的存储器高速缓冲器,Cache的出现是为了缓解CPU的存储需求与主内存的存取性能之间越来越大的差距.现代CPU的Cache都是集成在片内的,越靠近CPU流水线的Cache由于需要极其快
速的存取速度,只能保持越小的容量,并且单位容量的成本越高.因此,为了进一步缓解需求与性能之间的差距,并应对不断增大的主内存,最新的
CPU都采用了三级Cache结构.
1.靠近CPU流水线的L1 Cache速度最快,容量最小
2.L2 Cache速度与容量都居中
3.靠近主内存的L3 Cache则是容量最大,但速度相对最慢(仍然比主内存快很多).
局部性原理
一般的计算机程序对存储器的访问行为,存在很大的局部性,主要分为两个方面:
时间局部性:既程序会在一个比较短的时间窗口内频繁访问同一个内存地址.
空间局部性:既程序会倾向于访问一组数据或者一个数据相邻的数据.
Cache正是利用了程序访存的这两个局部性特点,将程序最常使用的指令与数据放在离CPU流水线最近的地方,以便在需要时最快获取这部分指令与
数据.
当我们了解到局部性原理后,我们就会有一个新的概念,有的时候,我们需要将进程运行在指定的CPU内核当中. 为什么? 因为当你上一个进程运
行完,如果当前进程需要上一个进程的数据,这个时候该CPU当中Cache中拥有上一个进程的热数据,当前进程可以直接拿起来使用. 所以当你持续
让你的程序尽量可以使用到热数据,不用再在的CPU上重新加载,那么你的程序性能就会高很多.
在"多核CPU调优"章节,提到"我们不能任由操作系统负载均衡,因为我们自己更加了解自己的程序,所以,我们可以手动为其分配CPU核,而不会过
多的占用CPU0,或者是让我们关键进程和一堆别的进程挤在一起" 上一段说到的就是原因.
1.taskset
taskset是Linux提供的一个命令,他可以让某个程序运行在某个某些CPU上.
1)显示进程运行的CPU
命令: taskset -p 21184
2)指定进程运行在某个特定的CPU上
命令:taskset -pc 3 21184
3)进程启动时指定CPU
命令:taskset -c 1 ./a.out
2.sched_setaffinity系统调用
sched_setaffinity可以将某个进程绑定在一个特定的CPU. 你比操作系统跟了解你自己的程序,为了避免调度器愚蠢的调度你的程序,或者是为了
在多线程程序中避免缓存失效造成的开销,你可能会希望这样做.NAME
sched_setaffinity, sched_getaffinity - set and get a process’s CPU affinity mask
SYNOPSIS
#define _GNU_SOURCE
#include <sched.h>
int sched_setaffinity(pid_t pid, size_t cpusetsize,cpu_set_t *mask);
int sched_getaffinity(pid_t pid, size_t cpusetsize,cpu_set_t *mask); 父进程和子进程之间会继承对affinity的设置,因此,大胆猜测,taskset实际上是首先执行了sched_setaffinity系统调用,然后fork+exec用户
指定的进程.
相关文章推荐
- 以矩阵乘法为例,了解cpu cache对程序性能的影响
- 以矩阵乘法为例 了解cpu cache对程序性能的影响
- CPU中的Cache与操作系统中的Cache区别
- 有哪些嵌入式操作系统的类型和CPU的类型 ?
- (二)了解CPU、GPU、进程、线程、CUDA
- 关于CPU Cache:程序猿需要知道的那些
- linux查看硬件信息、cpu、内存、操作系统、发行版本、机器型号、网卡信息等
- Linux cpufreq 机制了解
- 处理器体系结构(了解CPU的基本运行原理)——《深入理解计算机系统》
- linux系统之arm架构的CPU与Cache
- Linux下查看操作系统信息、内存情况及cpu信息:cpu个数、核心数、线程数
- 关于CPU Cache:程序猿需要知道的那些
- 从CPU的运行到函数调用做个了解
- IA-32体系结构CPU保护模式和32位操作系统常见误区
- 关于CPU Cache——程序猿需要知道的那些事
- 实验0 了解和熟悉操作系统
- 了解和熟悉操作系统
- 实验0 了解和熟悉操作系统
- CPU Cache原理 &避免dma cache 出错
- 实验0 了解和熟悉操作系统(操作系统)