redis - Redis 实例映射到单独 CPU 内核背后的机制
问题描述
据记载,单独的 redis 实例映射到单独的 CPU 内核。如果我在具有 8 个内核的 Debian/Ubuntu 机器上运行 8 个 redis 实例,那么它们都将映射到每个内核。
1)如果我将这台机器缩小到 4 核会发生什么?
2)更改是自动发生的(默认情况下),还是涉及一些显式配置?
3)有没有办法控制行为?如果有,到什么程度?
很想了解这背后的技术,并且非常欢迎一个说明性的例子。我运行一个托管在云中的应用程序,它使用 redis 作为后端。放大(和缩小)机器的 CPU 内核是我必须做的事情之一,但我想知道我首先要做什么。
提前致谢!
解决方案
Redis 是一个(大部分)单线程进程,这意味着服务器的一个实例将使用单个 CPU 内核。
服务器进程由操作系统映射到核心——这是操作系统负责的主要任务之一。重申一下,分配资源,包括 CPU,是一个操作系统决定,并且是一个非常复杂的决定(即尝试阅读内核调度程序的代码;))。
如果我在具有 8 个内核的 Debian/Ubuntu 机器上运行 8 个 redis 实例,那么它们都将映射到每个内核。
也许,这取决于操作系统的自由裁量权。不能保证每个实例都会获得一个唯一的核心,并且一个核心可能会被多个实例使用。
1) 如果我将这台机器缩小到 4 核会发生什么?
像这样缩小意味着重新启动。Redis 服务器重新启动后,操作系统将为它们分配可用的内核。
2) 更改是自动发生的(默认情况下),还是涉及一些显式配置?
不涉及任何更改 - 每个进程,无论是否 Redis,都有一个核心。内核在进程之间共享,操作系统协调整个事情。
3)有没有办法控制行为?如果有,到什么程度?
是的,大多数操作系统都提供了用于控制资源分配的接口。具体来说,taskset
Linux 命令可用于设置或获取进程的 CPU 亲和性。
注意:您应该将 CPU 亲和性设置留给操作系统 - 它应该非常擅长。相反,请确保为负载正确配置服务器。
推荐阅读
- python - Discord 机器人不会踢自己或机器人
- sql - Eloquent:检查关系是否有一定的条件
- sql - 多对多关系中的连接表索引
- c++ - 为什么 C++ 中的这种计数排序不起作用?
- python - 给定从 0 开始的新时间值列表,有没有办法以秒为单位扩展时间值列表?
- .htaccess - 重写 htaccess 对子文件夹的所有请求
- python-requests - ESP32 主机接收 Post 请求
- javascript - Gulp js 停留在“开始‘观看’”
- d3.js - d3 为什么在 mousehover 字段上未定义并且 d3.event 也未定义?
- html - 为推荐创建了一个滑块,但宽度滑动水平