![CPU 亲和性设置不固定](https://linux22.com/image/649021/CPU%20%E4%BA%B2%E5%92%8C%E6%80%A7%E8%AE%BE%E7%BD%AE%E4%B8%8D%E5%9B%BA%E5%AE%9A.png)
我正在尝试在使用 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
可能无法在容器中正常工作。您可能可以从主机系统执行此操作,但在容器内执行此操作毫无意义。