如何管理进程与 CPU 核心的亲和性?

如何管理进程与 CPU 核心的亲和性?

我使用分布式用户空间文件系统(GlusterFS),并且我想确保 GlusterFS 进程始终具有所需的计算能力。

我的网格的每个执行节点都有 2 个 CPU,每个 CPU 有 4 个核心,每个核心有 2 个线程(Linux 认为有 16 个“处理器”)。

我的目标是保证 GlusterFS 进程具有足够的处理能力,从而实现可靠性、响应性和快速性。(这里没有营销,只是系统管理员的梦想 ;-)

我认为主要有两点:

  • GlusterFS 进程
  • 用于数据访问的 I/O(在本地磁盘或远程磁盘上)

我考虑将 GlusterFS 实例绑定到特定的“处理器”上。

我想确认的是:

  • 网格作业不会影响内核和 GlusterFS 实例
  • 研究人员的工作不会受到系统进程的影响(我想保留一个核心池来执行作业,并确保没有系统进程会使用这些 CPU)

但是 I/O 怎么办?当我们处理大量数据(几 TB)时,我们会遇到很多中断。

我如何在处理器上分配这些操作?什么是“最佳实践”?

感谢您的意见!

答案1

将用户空间固定到特定处理器有时可以使其性能更稳定;但内核则不然。(检查任务集

如果可能的话,你会把用户空间/内核切换(已经是操作系统性能的一个可衡量因素)变成处理器间通信/同步问题。情况要糟糕很多个数量级。

编辑: 现在您已经放弃了“固定内核”的想法,这要合理得多。是的,您可以使用任务集启动所有网格进程,并为 GlusterFS 留出一两个空闲的 CPU。举一个类似的例子,在 Xen 系统中,为处理所有 I/O 的 Dom0 保留一个 CPU 被视为“最佳实践”。

答案2

这就是为什么我不想在生产中使用 FUSE 文件系统...我改用 PVFS2。

相关内容