cpu缓存是什么?

现在的企业招人只要是高级以上基本上就会有一个要求就是熟悉分布式,缓存,消息的机制。这里的缓存我推测是nosql数据库redis等,但是这也看出缓存这个概念是多么流行。其实缓存远在几十年前就出现了,就是内存,我说这个也是一种缓存应该没什么错,因为它是把常用的程序放在了速度的设备中,用来替代缓慢的硬盘。但是从cpu控制内存到cpu要通过数据总线,跨设备传输,这个时间需要几十时钟周期,有没有更快的方法,那就是使用更快的设备,减小到cpu的距离,这就是一级缓存,cpu的缓存做到现在至少可以有四级缓存,常见的是三级缓存,缓存大小从小到大,离cpu的距离也越来越大。为什么要创建这么多缓存呢,因为cpu很精密,要在cpu内部加缓存很难,而且缓存是用晶管做的,晶管是很珍贵的东西,需要节省使用。如果所有缓存只有一层,那么一层的搜索时间必定也变大了,因为搜索的范围更大了,而且根据我们的经验,常被使用的数据不会被改变,那么第一层的数据也就可以起到比它大小更大的作用,也就是说一层的缓存命中率很高。

另外还有一个问题那就是伪共享,它被传的神乎其神,我第一次看还看不懂,直到现在我才发现这是懂cpu运行原理的人太少。所谓伪共享就是看似命中了缓存,其实并没有,而是访问了内存,为什么会使用不到呢。那是因为缓存的运行原理和我们常见的插入取出不同。在插入时会把和内存挨得近的数据也插入,并且以固定大小插入,插入的数据叫缓存行,cpu缓存由缓存行组成,如果你要改动缓存中的某个值,那么就会影响到它相近的数据一起被更新,也就说取数据要到内存中取了,也就慢了。避免这个问题的方法就是让内存数据值的大小等于缓存行的大小,那么也就互相不影响了,这个原理肯定还有细微之处没有知道,但是原理就是抽象的,不需要知道具体细节,要知道细节可以看源码,看硬件,但是我看不到啊。

**CPU亲缘性(也称为CPU亲和力)是指控制进程或者线程在特定CPU核心上运行的能力**。 CPU亲缘性的核心在于优化程序运行的性能表现。具体来说,它通过确保进程或线程在相同的CPU核心上持续运行,来减少因迁移带来的缓存失效。现代服务器多采用对称多处理(SMP)架构,每个CPU都有其自己的缓存。当一个进程在多个核心间迁移时,原核心的缓存信息将不再适用,这会导致缓存命中率下降,进而影响程序性能。 Linux操作系统提供了设置CPU硬亲缘性和软亲缘性两种机制来管理进程或线程与CPU核心之间的关联。硬亲缘性是指强制指定进程或线程必须在特定的一个或多个CPU核心上运行。而软亲缘性则是让Linux内核的调度器尽量安排进程在同一CPU上运行,但允许在一定条件下迁移到其他核心。 使用CPU亲缘性时,可以通过Linux提供的API如`sched_setaffinity()`(用于设置进程或线程的亲缘性)进行设置。当设定了CPU亲缘性后,进程或线程将只在指定的CPU核心上运行,从而避免了不必要的迁移,维护了较高的CPU缓存命中率,这对那些对性能要求极高的应用尤为重要。 此外,手动绑定CPU核的场景通常包括需要保持高CPU缓存命中率的场合,例如大规模数据处理、高性能计算和某些实时系统。在这些情况下,CPU亲缘性的设置可以显著提升性能。 总的来说,CPU亲缘性是一个重要的技术手段,用于优化多核处理器上的进程和线程调度。它通过减少进程迁移来提高CPU缓存的利用效率,从而加快程序的运行速度。了解并合理运用CPU亲缘性对于系统管理员和软件开发人员来说,是提升系统和应用性能的关键策略之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值