CPU 亲和性设置不固定

CPU 亲和性设置不固定

我正在尝试在使用 OpenVZ 虚拟化并运行 CentOS 6.x 的 4vCpu VPS 上设置 mysql(最新的 Percona Server)的亲和性。

我运行的命令是taskset -pc 0-1 1026。我也尝试过0,1。输出是:

pid 1026's current affinity list: 0-3
pid 1026's new affinity list: 0-3

因此,它似乎没有“卡住”。可以通过再次运行taskset来确认,以找到进程可用的CPU。这可能是我的虚拟化类型的问题吗?

我这样做是因为时不时我需要 mysql 非常努力地运行,并且超过 2.0-4.0 超过 2 个小时就会让我重新启动当前提供商。

这不起作用的明确原因是什么?或者是否需要进行更多故障排除?

答案1

OpenVZ 容器内会忽略 CPU 亲和性掩码。你将无法让它“工作”。

在基于 RHEL5 的内核中,我们有虚拟 CPU 的概念:任务在虚拟 CPU 上调度,而虚拟 CPU 则以某种方式分布在物理 CPU 上。然后可以使用 sched_setaffinity 系统调用将任务绑定到虚拟 CPU。

这个概念很麻烦,而且通常不是最理想的,所以我们决定在 RHEL6 中放弃它:目前为容器设置 nr_cpus 限制实际上相当于设置 cpulimit。这个决定是合理的,因为最新的 Linux 调度程序足够智能,可以将积极交互的任务聚集在一起,因此不需要人为地限制并行性。

因此,CPU 亲和性支持被放弃。任务仍然可以使用 sched_setaffinity 系统调用,但它将被忽略。

答案2

类似这样的工具taskset可能无法在容器中正常工作。您可能可以从主机系统执行此操作,但在容器内执行此操作毫无意义。

看:OpenVZ 容器中的任务集无法正常工作

相关内容