文件系统的读写性能与什么相关?

单个文件系统的读写性能上限(峰值)与文件系统的当前使用容量成正比,即使用容量越大,读写性能上限(峰值)越高。

什么是IOPS?IOPS与吞吐、读写块大小、时延有什么关系?

IOPS(Input/Output Per Second)即每秒IO操作的次数(读写次数)。

读写块大小、IOPS、吞吐量、写入次数及时延的关系公式为:

吞吐量=IOPS*读写块大小;IOPS=读写次数/任务整体时延

例如,容量型NAS文件系统1 MiB写时延约为100 ms,8 KiB写时延约为15 ms,4 KiB写时延约为10 ms,最大支持128个并发任务。当您需要1s内写1 MiB数据时,可以有多种写入方案,如下列举其中几种:
序号 读写块大小 并发数 写入次数 任务整体时延 IOPS 吞吐量 说明
方案一 4 KiB 1 250 10 ms*250=2.5s 250/2.5s=100 4 KiB*100=400 KiB/s 小块读写加上低并发数,导致吞吐和时延性能都很差,无法达到1 MiB/s的吞吐目标。
方案二 1 MiB 1 1 100 ms 1/0.1s=10 1 MiB*10=10 MiB/s 相较方案一仅提高读写块大小,吞吐和时延性能有提升,达到了1 MiB/s的吞吐目标,但任务整体时延较长。
方案三 4 KiB 125 250 10 ms*(250/125)=20 ms 250/0.02s=12500 4 KiB*12500≈49 MiB/s 相较方案一仅提高任务并发数,吞吐和时延性能有提升,达到了1 MiB/s的吞吐目标,任务整体时延也很短,但IOPS较高,容易触及文件系统的IOPS上限。
方案四 8 KiB 125 125 15 ms*(125/125)=15 ms 125/0.015s≈8333 8 KiB*8333≈65 MiB/s 相较方案一同时提高读写块大小和任务并发数,吞吐和时延性能有提升,达到了1 MiB/s的吞吐目标,任务整体延时最短,IOPS较低,不容易触及文件系统的IOPS上限。

为什么使用Nginx写日志到文件系统耗时很长?

  • 问题原因
    与Nginx日志相关的指令有两条:
    • log_format用来设置日志的格式;
    • access_log用来指定日志文件的存放路径、格式的名称和缓存大小。

    access_log指令中的日志文件路径包含变量时,每次写日志时都会先打开目标文件,写入日志之后关闭目标文件。可能存在数据写入缓存但目标文件已关闭的现象。NAS为了保证数据的可见性,会在关闭目标文件时将缓存数据强制写回NAS服务端,性能消耗较大。

  • 解决方案
    • 方案一:删除access_log指令中的变量,使用固定路径存储日志文件。
    • 方案二:使用open_log_file_cache指令设置经常被使用的日志文件描述符缓存,提高包含变量的日志文件存放路径的性能。具体配置,请参见open_log_file_cache
      建议配置:
      open_log_file_cache max=1000 inactive=1m valid=3m min_uses=2;

为什么SMB文件系统执行I/O操作会延迟?

您可以先通过fio工具,查看性能指标是否异常。
fio.exe --name=./iotest1 --direct=1 --rwmixread=0 --rw=write --bs=4K --numjobs=1 --thread --iodepth=128 --runtime=300 --group_reporting --size=5G --verify=md5 --randrepeat=0 --norandommap --refill_buffers --filename=\\<mount point dns>\myshare\testfio1
如果性能指标异常,请参考以下问题原因进行排查并解决问题。
问题原因 解决方案
文件系统与计算节点之间网络不通。 首次访问SMB文件系统时,请执行ping命令ping挂载点,查看计算节点与文件系统是否连通及时延是否在正常范围。
  • 若执行ping命令失败,请检查您的网络设置,确保网络连接正常。
  • 若延时较长,请ping挂载IP。当ping IP比ping挂载点延时小很多,判断可能是DNS问题,请检查您的DNS服务器配置。
安装了NFS客户端,实际业务不使用,产生等待时间。 删除NFS客户端。
启用了WebClient服务,导致Internet文件服务器登录SMB文件系统失败。 禁用WebClient服务。
注册表配置项中包含了NFS权限Nfsnp,导致打开文件失败。 查看注册表配置项HKEY_LOCAL_MACHINE->System->CurrentControlSet->Control->NetworkProvider->Order->ProviderOrder,若注册值包含Nfsnp,请删除Nfsnp,然后重启实例。
执行I/O读写操作的数据块较小,消耗过多网络资源。 建议您使用大数据块进行I/O读写操作,若不能修改数据块大小,推荐使用BufferedOutputStream

为什么Windows server SMB协议I/O性能无法提升?

  • 问题原因

    Windows SMB客户端默认不开启large mtu选项,因此影响I/O性能的提升。

  • 解决方案
    1. 打开注册表编辑器。
    2. 在左侧导航栏,选择计算机 > HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Services > LanmanWorkstation > Parameters
    3. 右键单击空白处,选择新建(N) > DWORD(32 位)值(D),命名为DisableLargeMtu
    4. 双击DisableLargeMtu,设置数值数据(V):0
    5. 重启计算机。

如何提升IIS访问NAS的性能?

  • 问题原因

    IIS采用NAS Share的方式访问NAS,在访问一个文件时,IIS后台会多次访问NAS。不同于访问本地文件系统,每次访问NAS至少要有一次网络交互,虽然每次访问的时长很短,但是多次访问时长叠加可能会造成客户端响应总时间较长。

  • 解决方案
    1. 请您使用SMB重定向器组件进行优化。具体操作,请参见SMB2 Client Redirector Caches Explained
      其中,注册表路径为HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters。请将如下三个配置项调至600及以上。
      • FileInfoCacheLifetime
      • FileNotFoundCacheLifetime
      • DirectoryCacheLifetime
      说明 若三个注册表配置项都不存在:
      1. 请确认使用的是SMB文件系统。
      2. 确认Windows版本是否支持这三个注册表项配置项。如果Windows版本支持而注册表配置项不存在,请手动创建。具体操作,请参见Performance tuning for file servers
    2. 将IIS访问频繁的JS/CSS等网页程序相关的内容存放在本地。

若当前IIS读写性能无法满足您的业务需求,请您提交工单咨询。

为什么Linux操作系统上NFS客户端运行性能差?

  • 问题原因

    在Linux操作系统中,NFS客户端对于同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能。

  • 解决方案

    安装NFS客户端后,修改同时发起的NFS请求数量,提高NFS性能。具体步骤,请参见如何修改同时发起的NFS请求数量