networking文件系统在高I / O速度下失败

我是一个集群上的用户,使用NFS来满足我们的数据存储需求。 最近,我在一些操作中一直在运行一个具有非常高的I / O的pipe道。

我们认为导致这个问题的程序被命名为Bowtie,这是Bioinformaticpipe道中的一个校准器。 简而言之,我们在每个文件中有100万行碎片文件的字母序列与包含整个字典的另一个文件进行比较。 (这是algorithm的简单化)

该字典在过程中是内存映射的。 我拥有群集上三个节点的队列提交权限。

节点:节点1节点2节点3节点4节点5节点6节点7

我的权利:Node1 Node2 Node3

可用的处理器数量:128个处理器或128个正在运行的队列插槽。

为了在群集上运行,主文件被分成每个100万行的块,然后所有的作业都使用SGE来启动。

此时的字典在内存中加载到每个节点即Node1 2和3上

对于在队列插槽上活动的每个作业,我打开下列文件处理程序

1包含运行代码的作业文件1包含进程退出代码的代码文件1 SGE生成的STDOUT文件1 SGE生成的STDERR文件1文件块1输出文件

这意味着在这个过程中,我在远程数据存储上打开了768 + 3个文件处理程序,虽然前四个文件对于pipe道中的每个脚本都是不变的。

只要发生这种情况,数据存储上的NFS服务器就会崩溃,而且我们的整个群集都会closures,因为存储变得无法响应。

我们的IT人员已经提出,这可能是由于在这个过程中I / O很高,可能NFS只是针对小群集而不是大规模群集。

因此,我们已经解决了这个问题,我们计划在其中一个节点上运行这个过程。 但是,由于我们要写入节点的磁盘而不是在所有集群之间共享数据存储,否则在我们的处理中拥有一个集群的观点就被否定了。

我不相信NFS是为小规模集群构build的,并且从未在大型企业级解决scheme上成功实施。 可能是NFS突然断开networking连接的另一个原因?

我确定这个过程是问题是集群冻结的原因,但我不相信它所要求的读/写速度是失败的原因。 你们有没有遇到过这样的问题? 一个完整的协议迁移是我们唯一的解决scheme吗?

多年来学到的一些build议。

  1. 最大限度地减lessNFS服务器上的负载:

设置NFS导出选项: async,insecure,no_subtree_check

设置NFS挂载选项soft,noatime,nodiratime,nolock,vers=3

还设置: noatime,nodiratime数据/ tmp / scratch挂载。 确保NFSencryption已closures以减轻负载。 停止NFS锁进程。

  1. 尝试在所有主机上启用networking的JUMBO帧(如果networking设备支持) – 将MTU设置为9k左右。

  2. 确保使用raid10存储(避免raid5 / 6不惜一切代价)随机写入IO。 任何SSD的?

  3. 最大限度地打开FS手柄的数量(某些系统的默认值为2K),将其设置为1M左右。

  4. 任何将映射数据库与input数据复制到本地临时节点存储的机会,并且将结果的sam文件作为单独的步骤进行组合/sorting?

  5. 增加处理块的大小(所以它正在处理至less30分钟或更多。

  6. 如果可能的话,尽可能在最高水平上分割作业 (尝试在10个不同的节点上并行地映射/sorting10个独立的基因组/样本,而不是试图使用10个主体来映射每个基因组)。 尝试检查点,一旦所有进程完成。

  7. 修改一个程序源,所以它读取更大的数据块 – 如1M而不是4K。

  8. 请注意CPU / RAM互连争用(特别是AMD 4-8插槽系统),有时在48核心盒上运行12-24个线程的速度要快于48个线程。 尝试不同的使用级别。 确保NUMA已打开并configuration为多CPU系统。 使用NUMA重新编译。

PS:pipe理一个高效的集群类似于规划/pipe理1k +工人的build筑工地。