如何pipe理进程与CPU核心的亲和力?

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

我的网格的每个执行节点都有2个CPU,每个CPU有4个内核,每个内核有2个线程(Linux可以看到16个“处理器”)。

我的目标是确保GlusterFS进程具有足够的处理能力,可靠,响应迅速。 (这里没有市场营销,只是系统pipe理员的梦想;-)

我考虑两点:

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

我想过在特定的“处理器”上绑定GlusterFS实例。

我想确保:

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

但是I / O呢? 当我们处理大量的数据(几兆字节)时,我们会有很多的干扰。

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

感谢您的意见!

将用户空间固定到特定处理器有时可以使其更一致地执行; 但不是内核。 (检查任务集 )

如果可能的话,你将把用户空间/内核开关(已经成为操作系统性能的一个可测量的因素)变成处理器间通信/同步问题。 许多数量级更糟。

编辑:现在你已经删除了“钉住内核”的想法,这是更合理的。 是的,您可以使用taskset启动所有网格进程,并为GlusterFS留出一个或两个CPU空闲。 对于一个类似的例子,在Xen系统中被认为是为处理所有I / O的Dom0保留一个CPU的“最佳实践”。

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