问题目录
- 文件系统的读写速度与什么相关?
- 文件系统的性能指标有哪些?
- 如何提升Linux操作系统上访问NAS的性能?
- 为什么执行ls命令时,会卡顿或无响应?
- 为什么在目录下并发创建文件,每秒创建的文件数量达不到IOPS标称的值?
- 如何解决向多台云主机中挂载的NFS文件系统中写入数据延迟问题?
文件系统的读写速度与什么相关?
读写速度同时受带宽及IOPS的影响,对于大文件的业务,受带宽影响较大。对于小文件业务,受IOPS影响较大。单个文件系统的读写性能上限与文件系统类型及大小相关,请参见产品规格-弹性文件服务。
文件系统的性能指标有哪些?
文件系统有三个性能指标:IOPS,带宽,时延。
- IOPS (Input/Output Per Second)即每秒的IO操作次数(或读写次数)。对于小文件读写频繁的场景,主要关注IOPS指标。
- 带宽是指单位时间内最大的数据传输流量,对于主要访问大文件的场景,更多需要考虑该指标。
- 时延是指一次读/写所花费的时间,由于大IO可能包含多次读/写,一般指标采用的是小IO的平均时延。该指标受网络状态及文件系统繁忙程度影响较大。
如何提升Linux操作系统上访问NAS的性能?
NFS客户端对同时发起的NFS请求数量进行了控制,默认为2,严重影响性能。修改sunrpc.tcp_slot_table_entries可以提升单机访问NAS的吞吐,建议您将该参数值修改为128:
echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
sysctl -w sunrpc.tcp_slot_table_entries=128
以上指令需在首次挂载前执行,之后永久生效。
说明并发NFS请求数量的提升,可能导致单个IO的延迟增加,请根据业务需求自行调节。
为什么执行ls命令时,会卡顿或无响应?
默认情况下,ls会遍历目录下的所有文件,获取文件的元数据信息并展现给用户,如果目录过大如包含10万个文件,可能需要发出10万个读指令,需要耗费很长的时间。
解决方案:
- 避免单个目录包含过多的文件,建议单目录下文件数量不超过1万个。
- 执行ls时采用全路径/usr/bin/ls,不添加--color=auto参数,可避免遍历目录下文件,大幅减少读指令数量。
为什么在目录下并发创建文件,每秒创建的文件数量达不到IOPS标称的值?
创建文件涉及到“为新文件分配磁盘空间”和“将新文件加入目录”至少2个IO指令:
- “为新文件分配磁盘空间”可以并发执行,并发程度受文件系统大小影响,文件系统越大,并发程度越高。
- “将新文件加入目录”如果修改的是同一目录,不能并发执行。修改速度受IO时延影响较大,如文件系统时延为1ms,无并发的情况下1秒内能完成1000次IO,单目录的创建性能就不会超过1000文件/秒。
解决方案:
- 避免单个目录包含过多的文件,建议单目录下文件数量不超过1万个。
- 扩容文件系统,可以提升文件系统的读写性能。
如何解决向多台云主机中挂载的NFS文件系统中写入数据延迟问题?
问题描述: 云主机1更新了文件A,但是云主机2立即去读取时,仍然获取到的是旧的内容。
问题原因: 这涉及两个原因: 第一个原因是,云主机1在写入文件A后,并不会立即进行刷新(flush),而是先进行PageCache操作,依赖于应用层调用fsync或者close来进行刷新。 第二个原因是,云主机2存在文件缓存,可能不会立即从服务器获取最新的内容。例如,在云主机1更新文件A时,云主机2已经缓存了数据,当云主机2再次读取时,仍然使用了缓存中的旧内容。
解决方案:
方案一:在云主机1更新文件后,一定要执行close或者调用fsync。在云主机2读取文件之前,重新打开文件,然后再进行读取。
方案二:关闭云主机1和云主机2的所有缓存。这会导致性能较差,所以请根据实际业务情况选择适合的方案。
关闭云主机1的缓存:在挂载时,添加noac参数,确保所有写入立即落盘。挂载命令示例如下:
mount -t nfs -o vers=3,proto=tcp,async,nolock,noatime,nodiratime,wsize=1048576,rsize=1048576,timeo=600,noac 挂载地址 本地挂载路径1
关闭云主机2的缓存:在挂载时,添加actimeo=0参数,忽略所有缓存。挂载命令示例如下:
mount -t nfs -o vers=3,proto=tcp,async,nolock,noatime,nodiratime,wsize=1048576,rsize=1048576,timeo=600,actimeo=0 挂载地址 本地挂载路径2
根据实际情况合理以上方案可要确保云主机1更新文件后,云主机2能立即获取到最新内容。