针对 NFS 性能的磁盘子系统配置

在读/写密集型工作负载中最常见的瓶颈来源之一是磁盘子系统配置很差。

在您也许会考虑仅对 NFS 服务器上的磁盘子系统进行调整的同时,请注意 NFS 客户机上配置差的磁盘设置可能是某些情况下的现实问题。 这种情况的示例之一就是有一个工作负载中的某个文件由 NFS 客户机上的应用程序从 NFS 加载的文件系统复制到该客户机的本地文件系统中。 在这种情况下,正确调整客户机上的磁盘子系统很重要,这样本地系统的写性能就不会成为瓶颈。 请参阅 逻辑卷和磁盘 I/O 性能中描述的调整方法。 特别是要考虑以下事项:

  • 对于 NFS 上简单的读或写工作负载,须评估包含要使用的文件系统的磁盘的性能。 实现此任务的方法是在文件系统本地写入文件或读出文件。 应该使用 iostat 命令来测试磁盘的吞吐能力,因为许多测试应用程序在完成时实际上并没有将所有数据都写到磁盘上。 例如,一些数据可能仍旧在内存中。 接下来您通常会将这个在本地读/写操作上测定的吞吐量当作可在 NFS 上达到的性能的上界,因为您不会产生与 NFS 相关的额外处理和等待时间开销。
  • 通常情况下,数据访问需要实现很高的并行性。 多个客户机或多个客户机进程对服务器上单个文件系统的并发访问可能会导致特定设备的磁盘 I/O 出现吞吐量瓶劲。 您可以使用 iostat 命令来评估磁盘负载。 特别是 %tm_act 参数表示特定磁盘处于活动状态的时间百分比,但是较高的值也可能表示相关的磁盘适配器过载。
  • 虽然与磁盘子系统的调整不直接相关,但值得一提的是,对单个文件的并发访问可能会导致对文件的 inode 锁的争用。 多数文件系统使用一个 inode 锁来串行化对文件的访问,因而可确保写入该文件的数据的一致性。 不幸的是,由于在任何单一的时间点只允许持有 inode 锁的线程写入该文件,这可能会在多个线程试图并发写入同一个文件的情况下严重妨碍写性能。
  • 对于大型的 NFS 服务器,一般策略是将磁盘 I/O 需求均匀分布在尽可能多的磁盘和磁盘适配器设备上。 在一个磁盘 I/O 分布良好的系统上,可能会达到一个状态,该状态下服务器上的 CPU 负载成为工作负载性能的限制因素。