如何selectnfsd线程的数量

我有一个8核心的基于Linux的服务器,专门为运行批处理作业的80个Linux客户端提供NFS服务。 客户端共有400个核心,一般同时运行400个单核心批处理作业。

偶尔,大量批处理作业会同时尝试执行I / O操作,并耗尽当前有80个服务器上的nfsd线程数。批处理作业会发生I / O错误(例如权限被拒绝)并拯救出来。

我想增加nfsd线程的数量,但想知道:

  • 在这种情况下,为了设置线程的数量,有哪些经验法则?
  • 有什么缺点,把它设置得太高?

参考

  • Sun的这个NFS调优指南提出了Solaris的一些经验规则,但是没有给出这些特定数字的理由,所以我不知道它们是如何适用于我的Linux服务器的。
  • 这另一个给出了这种types的调整的方法,但是是非常主观的。

在一个理想的世界里,你的批处理作业会有一些退避逻辑,你会坚持80个线程。

我绝不是NFSd的专家,但适用于所有Linux应用程序的Linux线程规则应该适用。 这里的规则是,每个线程在内存中占用一定的空间,实际上,在平均生产服务器上(这个内存的两位数),这个内存量是非常小的,这几乎是不重要的,更紧迫的是线程在像NFSd – Semaphores这样的应用程序中实现的方式。 计数信号量是确保在线程情况下不会出现locking条件的一个很好的方法,问题在于信号量跟踪线程并递增和递减计数器以反映“自由”与“locking”线程之间的关系,他们必须对可用的线程进行索引,并检查locking的线程是否适当地设置了执行时间,这是以一种半成效的方式进行的,而且是以指数级增长,如果你的NFSd需要非常高的速度,你会注意到计算的增加时间大约相当于执行时间的两倍,以注册一个新的线程,幸运的是,这是一个小的查找时间值(一个指令)开始(如果你还记得代数:)调用基地,你可以有非常大的指数任何重大问题。

太长; 没有阅读总结 – 如果我是你,我会限制线程的数量,以期望的最大并发主机数量,但我也会做一些testing,以确保执行时间与您的期望值是同理。 我意识到这可能对您没有太多的帮助,但是很难在没有预期的使用场景的情况下分析合适的configuration。

另外,如果你推断出Sun的数字,那么一个2.2GHZ的处理器应该能够在800个线程的某个地方运行,即使这些数字本质上是任意的,它也会让我觉得你会罚款与我以前的build议

不要使用NFS。 NFS对于较小的文件访问是很好的,但是在任何types的负载下都崩溃了。 你有没有研究一些像AFS或Hadoop的其他技术?