多核CPU和多CPU对redis的影响

您所在的位置:网站首页 cpu的多核心有什么用 多核CPU和多CPU对redis的影响

多核CPU和多CPU对redis的影响

2024-07-13 12:23| 来源: 网络整理| 查看: 265

多核CPU和多CPU对redis的影响:

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

当 context switch 发生后,Redis 主线程的运行时信息需要被重新加载到另一个 CPU 核上,而且,此时,另一个 CPU 核上的 L1、L2 缓存中,并没有 Redis 实例之前运行时频繁访问的指令和数据,所以,这些指令和数据都需要重新从 L3 缓存,甚至是内存中加载。这个重新加载的过程是需要花费一定时间的。

多核CPU:

多核cpu架构

在多核 CPU 的场景下,一旦应用程序需要在一个新的 CPU 核上运行,那么,运行时信息就需要重新加载到新的 CPU 核上。而且,新的 CPU 核的 L1、L2 缓存也需要重新加载数据和指令,这会导致程序的运行时间增加!

解决的办法

讲过Redis示例和CPU指定的一个核绑定起来 可以使用taskset -c 0 ./redis-server命令 意思是将Redis示例绑定到了 0 号CPU核上;

但这样也会存在一个问题,主线程,子进程,后台线程会竞争激烈,可能导致阻塞问题;

加入一个物理核有6个逻辑核,现在又2个物理核,我们需要绑定到一个物理核上!

taskset -c 0,6 ./redis-server 这样主线程,子进程 和 后台线程等竞争想对来说不会那么激烈;

尽量将Redis示例绑定在一个物理核上,而不是一个逻辑核 绑核不仅对降低尾延迟有好处,同样也能降低平均延迟、提升吞吐率,进而提升 Redis 性能;

多CPU

网络中断程序:网络中断程序是要和 Redis 实例进行网络数据交互的;

多CPU请况下,每个CPU又存在多个核,这种情况下,需要夸CPU Socket进行访问,这期间需要建立连接,然后又需要去物理核,逻辑核上进行访问数据,会导致 Redis 处理请求的延迟增加;

在这里插入图片描述

如果网络中断处理程序和 Redis 实例各自所绑的 CPU 核不在同一个 CPU Socket 上,那么,Redis 实例读取网络数据时,就需要跨 CPU Socket 访问内存,这个过程会花费较多时间。

所以为了避免 Redis 跨 CPU Socket 访问网络数据,需要将网络中断程序和 Redis 实例绑在同一个 CPU Socket 上;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3