性能说明FAQ
本文介绍文件存储NAS性能相关常见问题。
如果您有任何反馈或疑问,请单击下方按钮联系NAS技术支持进行咨询。
文件系统的读写吞吐阈值与什么相关?
什么是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上限。 |
读写吞吐超过阈值会有什么影响?
如果您或应用程序发出的请求吞吐超过阈值时,NAS会自动对该请求限速,进而导致延迟增高。
通用型NAS可以通过Truncate命令提升吞吐阈值。具体操作,请参见如何提升通用型NAS文件系统的读写吞吐阈值? 。
极速型NAS可以通过扩容文件系统提升吞吐阈值。具体操作,请参见极速型NAS扩容。
关于通用型NAS文件系统和极速型NAS文件系统的吞吐阈值,请参见通用型NAS性能指标和极速型NAS性能指标。
如何提升通用型NAS文件系统的读写吞吐阈值?
通用型NAS文件系统的读写吞吐随文件系统的使用容量线性增长。文件系统读写吞吐与使用容量的关系,请参见通用型NAS产品规格。
通过在文件系统写入空洞文件或使用Truncate命令生成一个文件来增加文件系统使用容量,从而提升文件系统的读写吞吐。同时,空洞文件和Truncate命令生成的文件在阿里云NAS上占用实际容量,按实际大小计费。更多信息,请参见通用型NAS计费。
例如在容量型文件系统写入1 TiB文件,其读写吞吐可提升150 MB/s;在性能型文件系统写入1 TiB文件,其读写吞吐可提升600 MB/s。
Linux
支持使用Truncate命令生成文件提升读写吞吐。
sudo truncate --size=1TB /mnt/sparse_file.txt
其中,/mnt为文件系统在计算节点上的挂载路径。
Windows
支持通过在文件系统写入空洞文件提升读写吞吐。
fsutil file createnew Z:\sparse_file.txt 1099511627776
其中,Z:\为文件系统在计算节点上的挂载路径。
如何解决Linux操作系统上访问NAS性能不好?
为什么使用Nginx写日志到文件系统耗时很长?
背景信息:
与Nginx日志相关的指令有两条。log_format用来设置日志的格式,access_log用来指定日志文件的存放路径、格式的名称和缓存大小。
问题描述:
Nginx写日志到文件系统耗时很长,写入性能差。
问题原因:
access_log指令中的日志文件路径包含变量,每次写日志时都会重新打开文件,再写入日志,然后关闭文件。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文件系统执行IO操作会延迟?
问题描述:
通过挂载点直接访问SMB文件系统,在执行IO操作会有几分钟的等待时间。
问题原因:
安装了NFS客户端,实际业务不使用,产生等待时间。
启用了WebClient服务,导致Internet文件服务器登录SMB文件系统失败。
注册表配置项中包含了NFS权限
Nfsnp
,导致打开文件失败。
解决方案:
首次访问SMB文件系统时,请ping挂载点,查看计算节点和文件系统连通性,以及时延是否在正常范围。
如果执行ping命令失败,请检查您的网络设置,确保网络连接正常。
如果延时较长,请ping挂载IP。当ping IP比ping DNS延时小很多,判断可能是DNS问题,请检查您的DNS服务器配置。
如果已安装NFS客户端,且用不到NFS服务,请删除NFS客户端。
禁用WebClient服务。
查看注册表配置项HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrder,如果注册值包含
Nfsnp
,请删除Nfsnp
,然后重启实例。
您可以使用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
建议您使用大数据块进行IO读写操作,如果数据块较小,会消耗更多的网络资源。如果不能修改数据块大小,可以通过构造BufferedOutputStream,将具有指定缓冲区大小的数据写入。
为什么Windows server SMB协议IO操作会延迟?
问题原因:
Windows SMB客户端默认不开启
large mtu
选项,因此影响IO性能的提升。解决方案:
您可以通过修改注册表配置项来开启
large mtu
选项,注册表路径:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parameters在该路径下,增加
DWORD
类型的键,命名为DisableLargeMtu,设置其值为0
,重启后才能生效。
如何提升IIS访问NAS的性能?
问题原因:
IIS采用NAS Share的方式访问NAS,在访问一个文件时,IIS后台会多次访问NAS。不同于访问本地文件系统,每次访问NAS至少要有一次网络交互,虽然每次访问的时长很短,但是多次访问时长叠加可能会造成客户端响应总时间较长。
解决方案:
请您使用SMB重定向器组件,进行优化。具体操作,请参见SMB2 Client Redirector Caches Explained。
其中,注册表路径为HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters。请将如下三个配置项调至600及以上。
FileInfoCacheLifetime
FileNotFoundCacheLifetime
DirectoryCacheLifetime
说明如果三个注册表配置项都不存在:
请确认使用的是SMB文件系统。
确认Windows版本是否支持这三个注册表项配置项。如果Windows版本支持而注册表配置项不存在,请手动创建。具体操作,请参见Performance tuning for file servers。
建议把IIS访问频繁的JS/CSS等网页程序相关的内容存放在本地。
如果当前IIS读写性能无法满足您的业务需求,请联系NAS技术支持进行咨询。
为什么执行ls命令时,有卡顿或者无响应?
问题现象
在执行目录遍历的操作中出现卡顿或无响应。例如,执行ls命令、包含通配符
*
?
的操作、执行rm -rf
命令及getdents系统调用等。原因分析
执行目录遍历操作时,如果此目录同时正在被修改(如创建、删除、重命名文件),目录遍历会由于缓存频繁失效而响应非常慢。
对大目录执行目录遍历操作时,目录遍历会由于缓存淘汰而响应非常慢。
解决方案
避免目录体量过大,控制单目录下文件数量小于1万个。
执行目录遍历操作时,不要频繁对目录进行修改。
执行目录遍历操作时,如果目标目录体量较大(包含大于1万个文件),且不需要频繁修改目录,您可以通过NFSv3挂载,并添加nordirplus参数,该措施能在一定程度上提速,请您验证后使用。更多信息,请参见挂载参数。