Redis性能篇(二)CPU核和NUMA架构的影响

Redis被广泛使用的一个很重要的原因是它的高性能。因此我们必要要重视所有可能影响Redis性能的因素、机制以及应对方案。影响Redis性能的五大方面的潜在因素,分别是:

Redis内部的阻塞式操作

CPU核和NUMA架构的影响

Redis关键系统配置

Redis内存碎片

Redis缓冲区

这一讲,我们来学习一下CPU对Redis的性能影响及应对方法。

主流CPU架构

学习之前,我们先来了解主流CPU架构有哪些,有什么特点,以便我们更好地了解CPU是如何影响Redis的。

CPU多核架构

CPU多核架构

一个CPU处理器中一般有多个运行核心,称为物理核。

物理核包括私有的一级指令/数据缓存(L1缓存)和二级缓存(L2缓存)。

每个物理核会运行两个超线程,也叫作逻辑核。同一个物理核的逻辑核会共享使用L1、L2缓存。

不同的物理核共享三级缓存(L3缓存)

多CPU Socket架构

多CPU Socket架构

在多CPU架构上,应用程序可以在不同的处理器上运行。

应用程序在不同的Socket间调度运行时,访问之前的Socket的内存,这种访问属于远端内存访问。

和访问Socket直接连接的内存相比,远端内存访问会增加应用程序的延迟。

把这个架构称为非统一内存访问架构(Non-Uniform Memory Access,NUMA架构)。

CPU多核对Redis性能的影响

如果在CPU多核场景下,Redis实例被频繁调度到不同CPU核上运行的话,那么,对Redis实例的请求处理时间影响就更大了。每调度一次,一些请求就会受到运行时信息、指令和数据重新加载过程的影响,这就会导致某些请求的延迟明显高于其他请求

要避免Redis总是在不同CPU核上来回调度执行。最直接的方法是把Redis实例和CPU核绑定了,让一个Redis实例固定运行在一个CPU核上。

通过taskset命令进行绑核:

taskset -c 0 ./redis-server

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfjzg.html