首页 > 解决方案 > Redis 实例映射到单独 CPU 内核背后的机制

问题描述

据记载,单独的 redis 实例映射到单独的 CPU 内核。如果我在具有 8 个内核的 D​​ebian/Ubuntu 机器上运行 8 个 redis 实例,那么它们都将映射到每个内核。

1)如果我将这台机器缩小到 4 核会发生什么?

2)更改是自动发生的(默认情况下),还是涉及一些显式配置?

3)有没有办法控制行为?如果有,到什么程度?

很想了解这背后的技术,并且非常欢迎一个说明性的例子。我运行一个托管在云中的应用程序,它使用 redis 作为后端。放大(和缩小)机器的 CPU 内核是我必须做的事情之一,但我想知道我首先要做什么。

提前致谢!

标签: redis

解决方案


Redis 是一个(大部分)单线程进程,这意味着服务器的一个实例将使用单个 CPU 内核。

服务器进程由操作系统映射到核心——这是操作系统负责的主要任务之一。重申一下,分配资源,包括 CPU,是一个操作系统决定,并且是一个非常复杂的决定(即尝试阅读内核调度程序的代码;))。

如果我在具有 8 个内核的 D​​ebian/Ubuntu 机器上运行 8 个 redis 实例,那么它们都将映射到每个内核。

也许,这取决于操作系统的自由裁量权。不能保证每个实例都会获得一个唯一的核心,并且一个核心可能会被多个实例使用。

1) 如果我将这台机器缩小到 4 核会发生什么?

像这样缩小意味着重新启动。Redis 服务器重新启动后,操作系统将为它们分配可用的内核。

2) 更改是自动发生的(默认情况下),还是涉及一些显式配置?

不涉及任何更改 - 每个进程,无论是否 Redis,都有一个核心。内核在进程之间共享,操作系统协调整个事情。

3)有没有办法控制行为?如果有,到什么程度?

是的,大多数操作系统都提供了用于控制资源分配的接口。具体来说,tasksetLinux 命令可用于设置或获取进程的 CPU 亲和性。

注意:您应该将 CPU 亲和性设置留给操作系统 - 它应该非常擅长。相反,请确保为负载正确配置服务器。


推荐阅读