为什么CPU结构也会影响Redis的性能

282 阅读1分钟

物理核和逻辑核,以及一级、二级缓存的关系:

image.png

在多 CPU 架构下,一个应用程序访问所在 Socket 的本地内存和访问远端内存的延迟并不一致,所以,我们也把这个架构称为非统一内存访问架构(Non-Uniform Memory Access,NUMA 架构)。

image.png

CPU 的 context switch 是指线程的上下文切换,这里的上下文就是线程的运行时信息。在 CPU 多核的环境中,一个线程先在一个 CPU 核上运行,之后又切换到另一个 CPU 核上运行,这时就会发生 context switch。

可以使用 taskset 命令把一个程序绑定在一个核上运行。

把 Redis 实例绑在了 0 号核上,其中,“-c”选项用于设置要绑定的核编号。

taskset -c 0 ./redis-server

为了避免 Redis 跨 CPU Socket 访问网络数据,我们最好把网络中断程序和 Redis 实例绑在同一个 CPU Socket 上,这样一来,Redis 实例就可以直接从本地内存读取网络数据了。

image.png

绑核的风险和解决方案

在给 Redis 实例绑核时,我们不要把一个实例和一个逻辑核绑定,而要和一个物理核绑定,也就是说,把一个物理核的 2 个逻辑核都用上。

通过修改 Redis 源码,把子进程和后台线程绑到不同的 CPU 核上。

-- 此文章为8月Day12学习笔记,内容来源于极客时间《redis核心技术与实战》