适用于大型(5 + Gb)文件的适当networking文件系统

我有很多用于HPC /集群计算的服务器,我注意到,由于部分计算运行使用NFS上的大文件,这会导致严重的瓶颈。 我想知道如何解决这个问题。

设置:

  • 使用Debian Squeeze的34个服务器(每个42 Gb RAM)
  • 每台机器12个物理内核+ HT
  • 2个“头”机器(头1和头2),每个500Gb驱动器
  • 从头1进行PXE引导的32个“从属”机器
  • head1导出32个PXE服务器的NFS文件系统
  • head2通过NFS包含所有其他机器的数据文件导出一个“data”目录
  • “data”目录包含非常大的文件(5+ Gb)
  • 机器之间的连接:千兆以太网
  • 大多数机器不在同一个物理机架上
  • 使用Open Grid Scheduler(又名Grid Engine)进行批量作业处理

这个集群运行的一个计算包括对于每个“从属”,在开始各种计算之前,读取一大组文件(3Gb + 3Gb + 1.5Gb + 750M)。 我注意到,当发生这种情况时,大多数奴隶在阅读这些消息时实际上花费了大量的时间(几分钟)(而实际的计算速度要快得多)。

目前,我已经提出了head2的NFS守护进程中的线程数量,并且在slave mount选项中将rsizewsize为32k,但这仍然是一个很大的瓶颈。

我能做些什么来提高性能,还是让奴隶将这些文件存放在硬盘上? 或者我应该去一个完全不同的FS存储?

既然你正在做性能分析,第一个问题应该是: “我所依据的数据是什么?有没有networking痕迹或其他性能数据支持这个假设?

在这样的系统中有很多可能的瓶颈,我会质疑networking文件系统的select,特别是因为你没有写出大量的数据和locking/并发,并且伴随的延迟问题将是最可能的瓶颈导致与NFS。

另一方面,由于单个磁盘的IOPS等级相当有限,每个8 GB数据的32个并发请求可能会使单个SATA磁盘超载。 假设每个请求的读取块大小为64 KB,磁盘的IOPS为100,那么对于随机读取请求,这个简单的计算就会产生6.4 Mb / s的速率 – 这是您将使用同时读取的数量得到的结果你正在caching数据。

您应该仔细查看由iostat提供的性能指标,以查看您的磁盘是否过载。 如果是,采取适当的措施(即得到一个体面的存储子系统能够应付负载),以纠正这种情况。

这很可能不是您在这里遇到的NFS的限制。

还要考虑到那些5 GB的时间至less要40秒才能以千兆线速传输 – 为每个客户端。 他们中有32人正在锤头,他们不太可能同时要求同一个街区。 添加以太网,TCP / UDP和NFS的开销,你很快就会遇到你描述的分钟。

因此,在尝试用其他方法交换NFS之前(是的,这些协议的开销较小),请检查path的每个部分(在磁盘子系统启动时)是否存在任何可能的瓶颈。 基准如果有疑问。

用附加的或更好的硬件去除这些瓶颈(如果有的话)将比改变整个软件设置更容易。

我有一个非常相似的环境(大量的刀片服务器作为工作节点,每个数GB或甚至TB的大文件)。 我使用Hadoop分布式文件系统(HDFS)。 查看:

http://en.wikipedia.org/wiki/Hadoop_Distributed_File_System#Hadoop_Distributed_File_System

http://hadoop.apache.org/docs/r0.18.0/hdfs_design.pdf

虽然你可能会发现设置比NFS复杂一点。