我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Redis如何绑定CPU

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Redis如何绑定CPU

这篇文章主要介绍了Redis如何绑定CPU,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

绑定 CPU

Redis 6.0 开始支持绑定 CPU,可以有效减少线程上下文切换。

CPU 亲和性(CPU Affinity)是一种调度属性,它将一个进程或线程,「绑定」到一个或一组 CPU 上。也称为 CPU 绑定。

设置 CPU 亲和性可以一定程度避免 CPU 上下文切换,提高 CPU L1、L2 Cache 命中率。

早期「SMP」架构下,每个 CPU 通过 BUS 总线共享资源。CPU 绑定意义不大。

Redis如何绑定CPU
而在当前主流的「NUMA」架构下,每个 CPU 有自己的本地内存。访问本地内存有更快的速度。而访问其他 CPU 内存会导致较大的延迟。这时,CPU 绑定对系统运行速度的提升有较大的意义。

Redis如何绑定CPU
现实中的 NUMA 架构比上图更复杂,通常会将 CPU 分组,若干个 CPU 分配一组内存,称为 「node」

你可以通过 「numactl -H 」 命令来查看 NUMA 硬件信息。

$ numactl -Havailable: 2 nodes (0-1)node 0 cpus: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38node 0 size: 32143 MBnode 0 free: 26681 MBnode 1 cpus: 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39node 1 size: 32309 MBnode 1 free: 24958 MBnode distances:node 0 1  0: 10 21  1: 21 10

上图中可以得知该机器有 40 个 CPU,分组为 2 个 node。

node distances 是一个二维矩阵,表示 node 之间 「访问距离」,10 为基准值。上述命令中可以得知,node 自身访问,距离是 10。跨 node 访问,如 node 0 访问 node 1 距离为 21。说明该机器「跨 node 访问速度」比「node 自身访问速度」慢 2.1 倍。

其实,早在 2015 年,有人提出 Redis 需要支持设置 CPU 亲和性,而当时的 Redis 还没有支持 IO 多线程,该提议搁置。

而 Redis 6.0 引入 IO 多线程。同时,也支持了设置 CPU 亲和性

我画了一张 Redis 6.0 线程家族供你参考。

Redis如何绑定CPU

上图可分为 3 个模块

  • 主线程和 IO 线程:负责命令读取、解析、结果返回。命令执行由主线程完成。

  • bio 线程:负责执行耗时的异步任务,如 close fd。

  • 后台进程:fork 子进程来执行耗时的命令。

Redis 支持分别配置上述模块的 CPU 亲和度。你可以在 redis.conf 找到以下配置(该配置需手动开启)。

# IO 线程(包含主线程)绑定到 CPU 0、2、4、6server_cpulist 0-7:2# bio 线程绑定到 CPU 1、3bio_cpulist 1,3# aof rewrite 后台进程绑定到 CPU 8、9、10、11aof_rewrite_cpulist 8-11# bgsave 后台进程绑定到 CPU 1、10、11bgsave_cpulist 1,10-11

我在上述机器,针对 IO 线程和主线程,进行如下测试:

首先,开启 IO 线程配置

io-threads 4 # 主线程 + 3 个 IO 线程io-threads-do-reads yes # IO 线程开启读和解析命令功能

测试如下三种场景:

  1. 不开启 CPU 绑定配置。

  2. 绑定到不同 node。
    「server_cpulist 0,1,2,3」

  3. 绑定到相同 node。
    「server_cpulist 0,2,4,6」

通过 redis-benchmark 对 get 命令进行基准测试,每种场景执行 3 次。

$ redis-benchmark -n 5000000 -c 50 -t get --threads 4

结果如下:

1.不开启 CPU 绑定配置

throughput summary: 248818.11 requests per secondthroughput summary: 248694.36 requests per secondthroughput summary: 249004.00 requests per second

2.绑定不同 node

throughput summary: 248880.03 requests per secondthroughput summary: 248447.20 requests per secondthroughput summary: 248818.11 requests per second

3.绑定相同 node

throughput summary: 284414.09 requests per secondthroughput summary: 284333.25 requests per secondthroughput summary: 265252.00 requests per second

根据测试结果,绑定到同一个 node,qps 大约提升 15%

使用绑定 CPU,你需要注意以下几点:

  1. Linux 下,你可以使用 「numactl --hardware」 查看硬件布局,确保支持并开启 NUMA。

  2. 线程要尽可能分布在 「不同的 CPU,相同的 node」,设置 CPU 亲和度才有效。否则会造成频繁上下文切换和远距离内存访问。

  3. 你要熟悉 CPU 架构,做好充分的测试。否则可能适得其反,导致 Redis 性能下降。

感谢你能够认真阅读完这篇文章,希望小编分享的“Redis如何绑定CPU”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Redis如何绑定CPU

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Redis如何绑定CPU

这篇文章主要介绍了Redis如何绑定CPU,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。绑定 CPURedis 6.0 开始支持绑定 CPU,可以有效减少线程上下文切换。CP
2023-06-27

Centos下如何为进程绑定CPU

本篇内容主要讲解“Centos下如何为进程绑定CPU”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Centos下如何为进程绑定CPU”吧!taskset 是一个CPU 调节工具,能够将系统任务分
2023-06-10

java怎么绑定CPU的线程

这篇文章主要介绍“java怎么绑定CPU的线程”,在日常操作中,相信很多人在java怎么绑定CPU的线程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么绑定CPU的线程”的疑惑有所帮助!接下来,请跟
2023-06-30

Linux中如何解决网卡中断与CPU绑定问题

这篇文章主要为大家展示了“Linux中如何解决网卡中断与CPU绑定问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux中如何解决网卡中断与CPU绑定问题”这篇文章吧。在Linux的网络调
2023-06-16

win10xbox如何绑定steam

本文小编为大家详细介绍“win10xbox如何绑定steam”,内容详细,步骤清晰,细节处理妥当,希望这篇“win10xbox如何绑定steam”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。win10xbox怎么
2023-06-30

SpringBoot如何自定义bean绑定

本篇内容介绍了“SpringBoot如何自定义bean绑定”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!自定义bean绑定在配置文件中写入s
2023-07-04

python3 tkinter如何绑定事

一、目的在上一篇《python3 实现自动生成入账记录表》说到通过编辑bat文件进行参数的输入不是很方便,本篇就是用tkinter模块制作输入信息界面,输入完成点击’ok’键,触发写好的脚本,使得自动生成入款对账记录表格。二、tkinter
2023-01-31

SpringBoot配置如何绑定

这篇文章主要介绍“SpringBoot配置如何绑定”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot配置如何绑定”文章能帮助大家解决问题。配置绑定所谓“配置绑定”就是把配置文件中的值
2023-07-04

C#.NET如何绑定Office

这篇文章主要介绍了C#.NET如何绑定Office,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C#.NET绑定Office晚期绑定与早期绑定不同,C#.NET绑定Offic
2023-06-17

jquery事件如何绑定

本文小编为大家详细介绍“jquery事件如何绑定”,内容详细,步骤清晰,细节处理妥当,希望这篇“jquery事件如何绑定”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、bind()bing()用来绑定事件,例如
2023-06-29

vue如何绑定数据

这篇文章主要介绍了vue如何绑定数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue如何绑定数据文章都会有所收获,下面我们一起来看看吧。vue绑定数据的方法:1、用双大括号“{{}}”把数据给到页面;2、使
2023-07-04

如何绑定虚拟主机

要绑定虚拟主机,您需要进行以下步骤:1. 在您的域名注册商处添加DNS解析,将您的域名解析到您的虚拟主机的IP地址上。这样访问您的域名时,就会指向您的虚拟主机。2. 在您的虚拟主机面板或控制台上创建一个虚拟主机。这包括设置虚拟主机的根目录、
2023-08-23

阿里云服务器被绑定了?如何解除绑定?

在云计算的浪潮下,越来越多的企业和个人开始使用阿里云服务器,以满足自己的计算需求。然而,在使用过程中,可能会遇到阿里云服务器被绑定的问题。那么,阿里云服务器被绑定了怎么办呢?接下来,我们就来详细说明。首先,我们要明白阿里云服务器被绑定是什么意思。简单来说,就是你的阿里云服务器被其他人或组织使用了,你无法再使用这个
阿里云服务器被绑定了?如何解除绑定?
2023-11-01

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录