CPU也会影响到Redis的性能

CPU介绍:

(1)一个CPU处理中一般有多个物理核(一个物理核处理一个程序)
(2)每个物理核包含 一级数据缓存 + 一级指令缓存 +  二级数据缓存 + 二级指令缓存
(一二级缓存存放的是CPU访问最频繁的指令和数据,这些缓存只能本物理核使用)
(3)CPU处理器 包含 三级缓存
(4)物理核超频:一个物理核分为两个或多个逻辑核(一个逻辑核处理一个程序)
(同一物理核下的逻辑核共享物理核下的一二级缓存)

一级缓存 : 访问时间 <10纳秒,只能存储KB级别的数据
二级缓存 : 访问时间 <10纳秒,只能存储KB级别的数据
三级缓存 : 访问时间 < 几十纳秒,只能存储几十MB级别的数据
内存 : 访问时间百纳秒,存储大小和内存大小相关

Redis实例 和 网络中断程序的数据交互:

(1)网络中断程序从 网卡硬件中读取数据
(2)将 "读取到的数据 "  写入到操作系统内核维护的一块内存缓冲区
(3)内核通过epoll 机制触发事件 : 通知redis实例,redis被通知后从内核缓冲区拷贝数据到自己的内存空间。

一、多核CPU对Redis性能的影响

解决问题: 
taskset 将一个程序绑定在一个核上运行 :taskset -c 0 ./redis-server 将redis实例绑定在0号核上
(cpu的核号需要注意,下文会阐述)

应用程序在CPU核上运行,运行时信息被记录到CPU + 应用程序的常用指令和缓存存放于L1 L2
运行时信息:(栈指针、cpu核的寄存器信息)

1.1、Redis运行在多核CPU的服务器上会造成Context Switch 问题:

Context Switch : 指的是线程的上下文切换。上下文就是线程的运行时信息。
多核CPU服务器上,一个线程在一个CPU核切换到另外一个CPU核就会造成Context Switch。
Context Switch问题发生后:
(1)redis主线程的运行时信息需要重新加载到新的CPU核上 (time增加)
(2)新的CPU核没有L1 L2的缓存,需要从L3去缓存。L3没有就需要从内存去缓存 (time增加)
redis实例完成上述的两部分操作后,才能开始处理操作请求。

二、多处理器CPU对Redis性能的影响

解决办法: 网络中断程序和Redis实例都绑定一个CPU核

多处理器CPU :
(1)  服务器上有多个CPU处理器 ,不同的处理器用总线连接
(2) 每个处理器都有自己的物理核 + L3缓存 + 内存

2.1、Redis运行在多处理器的服务器会造成非统一内存的问题:

(1)应用程序从cpu 处理器1上运行,并将数据存放在socket1的内存中
(2)现在应用程序被调度到 cpu处理器2上运行,socket2 内存中什么数据都没有。
(3)应用程序需要访问socket1的内存数据,需要跨远端内存访问。造成非统一内存访问的问题

2.2、如果Redis实例已经和CPU核绑定,网络中断程序没有绑定此CPU核:

Redis实例读取完成网络数据的时候,还是需要跨CPU socket 访问内存,还是会存在非统一内存的问题。

三、CPU号的判断

真正的判断cpu核的编号才能解决掉跨cpu访问网络数据的问题

CPU的非统一内存架构下,对CPU核的编号是:
先给每个CPU Socket中的每一个物理核的第一个逻辑核编号
再给每个CPU Socket中的每一个物理核的第二个逻辑核编号
例如:2个CPU Socket 每个Socket上6个物理核,每个物理核有两个逻辑核
CPU Socket1 : 0-5 、12-17
CPU Socket2 :6-10 、18-23

注意: Redis 运行中有 主线程 + RDB子进程 + AOF子进程 + 其他的后台进程
如果将redis绑定到一个逻辑核心上,会导致上述的线程和进程竞争CPU资源。(出现主进程阻塞的问题)
尽量将redis实例绑定到物理核心上  /   修改redis的源码,将不同子进程分别绑定到不同的cpu核上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嗨 ! 海洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值