我有很多用于HPC /集群计算的服务器,我注意到,由于部分计算运行使用NFS上的大文件,这会导致严重的瓶颈。 我想知道如何解决这个问题。
设置:
这个集群运行的一个计算包括对于每个“从属”,在开始各种计算之前,读取一大组文件(3Gb + 3Gb + 1.5Gb + 750M)。 我注意到,当发生这种情况时,大多数奴隶在阅读这些消息时实际上花费了大量的时间(几分钟)(而实际的计算速度要快得多)。
目前,我已经提出了head2的NFS守护进程中的线程数量,并且在slave mount选项中将rsize和wsize为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复杂一点。