cpu
作为开发对cpu相关的疑问
1,在多核cpu上,为什么会有并发安全问题?
2,线上cpu使用率过高,该怎么办呢?
3,你知道如何提高使用率,达到让程序加速的目的吗?
概念模型
mmu是将虚拟地址转换为物理地址的一个硬件设备。
tlb 是对页表的一个快速缓存。
概念
cpu工作的本质
cpu工作的本质是为了计算,计算的本质是加减乘除,其中位运算逻辑是通过算术逻辑单元去完成。
控制逻辑单元是负责程序指令的存取,分析,以及执行。
寄存器和cpu一级二级三级缓存本质都是为了存储,存储的东西有可能是数据,有可能是指令。
cache line
cpu读取内存每次会预读一块数据,而这一块数据就是cache line,是cpu cache的最小的单位,在64位操作系统里,一个cache line 就能存64个字节。
从cpu结构看待并发加锁问题
由于cpu一,二级缓存的存在,在多cpu下,如何保证一条数据能安全的被多个cpu更新呢。加lock。
golang lock的本质
1,cpu会给总线加上总线锁,此时能让其他cpu不能对内存进行读写。加锁cpu的读写操作会直接写入到主存里。
2,会让其他cpu对该内存地址的缓存行失效。
所以解锁之后,其他cpu会重新从主存拿最新的数据,这样就保证了数据的并发安全。
程序变慢的本质,如何加速程序运行
cpu没有做事情或者cpu忙于做事情。
cpu 没有做事情
突增的流量不一定会导致cpu忙碌,但是可能会导致cpu利用率增加。如果突增的流量在做io密集型的任务,则可能导致系统过多的处于阻塞状态,等到线程变为就绪状态直到运行时,可能会造成接口响应时间过长。
解决办法
让cpu处于忙碌状态,提高cpu利用率,如果是在频繁的做接口调用,可做接口的内存缓存,消除掉网络调用带来的阻塞。
cpu 忙于做事情
cpu过于忙于做事情,判断是否是代码bug导致,不是代码bug而是由于流量导致,则需要分配更多的cpu。
线上cpu使用率过高,我该怎么办
从整体上把握系统cpu情况
cpu使用率
top
%Cpu(s): 27.4 us, 3.7 sy, 0.0 ni, 68.7 id, 0.1 wa, 0.0 hi, 0.2 si, 0.0 st
us 用户态程序占用cpu
sy 内核占用cpu
id 空闲cpu
wa 等待cpu执行耗时
hi 硬中断耗时
si 软中断耗时
cpu 饱和度
top load average: 2.14, 2.54, 2.59
从进程角度看cpu
top 后输入大写P 可按cpu使用率大小排序,找到最消耗cpu的进程。
找到进程里最消耗cpu的代码段
golang pprof 工具可以看cpu消耗情况。
标签:缓存,top,cache,本质,监控,使用率,来发,cpu From: https://www.cnblogs.com/hobbybear/p/17190242.html