共计 3150 个字符,预计需要花费 8 分钟才能阅读完成。
前言
焱融文件存储 YRCloudFile 作为一款通用型的高性能分布式文件存储系统,宽泛实用于 AI/ 主动驾驶、HPC、量化剖析、视效渲染以及大数据等场景,这些场景有的须要具备大文件的极限带宽,有的须要大文件的高 IOPS,有的则须要撑持海量小文件,而这些需要会波及到很多的设计决策和优化。
明天,咱们将探讨在 AI 训练场景中如何进行海量小文件的性能优化,因为训练场景中的文件拜访都是以只读形式关上的,所以本文将着重介绍只读小文件的优化局部。
文件读写的流程
首先,咱们先简略理解下读文件所需的操作流程。以 cat 一个小文件为例:首先,读文件之前须要通过 lookup 查看文件是否存在,确定存在则须要通过 open 关上文件,通过 read 来读取文件内容,读取完文件内容后再通过 close 敞开文件。对于网络文件系统如:YRCloudFile, NFS 等,还有 revalidate 和 stat 来刷新 inode。留神,lookup 仅在文件系统第一次关上文件时调用。咱们能够通过 strace 来验证以上流程:
上图中的操作 fadvise 和 mmap 是 cat 独有的操作,这里无需深刻理解。此外,对于 lookup 和 revalidate,这两个操作之所以没有呈现在上图中是因为它们暗藏在文件系统外部,并没有通过零碎调用裸露进去。
小文件的元数据瓶颈
在小文件操作中,元数据操作占据了很大的比重,甚至能够达到 70%-80% 的比重,而真正的业务读写,仅仅占了其中很小一部分,这时元数据性能成为性能瓶颈。
通过以上探讨咱们理解到读取文件所需的操作有:lookup、open、read、close、stat、revalidate,每次操作都随同着一次网络开销。其中 lookup 仅在文件系统第一次读取文件时调用,对于屡次读取文件的开销根本能够疏忽,为易于叙述,以下暂不探讨 lookup。而 open、close、stat、revalidate 都是元数据操作,并且只有一次调用,而只有 read 是业务真正所需的数据操作,文件越大调用次数越多。咱们能够通过推算得悉,文件越大,read 次数越多,数据操作占比就越高,元数据操作占比就越低,反之亦然。接下来,咱们通过别离读取大小文件场景,再进一步理解:
首先,先探讨读取大文件的场景。如读取一个 100M 的文件,每次读取 1M 数据,那么就须要 100 次 read 调用。而对应的元数据操作有 open、close、stat、revalidate 共 4 个。总操作次数有 104 次,那么能够算出,数据操作占比 100/104 100%= 96%,而元数据操作占比 4/104 100%=4%。
在读取小文件的场景中,如读取一个 1M 的文件,每次读取 1M 数据,只须要一次 read 调用。对应的元数据操作同样有 open、close、stat、revalidate 共 4 个。总操作次数有 5 次,同样能够算出,数据操作占比为 1/5 100%=20%。而元数据操作占比为 4/5 100%=80%。
通过上述剖析清晰看到,对于越小的文件,元数据操作占比越高,元数据性能成为重大限度 ops 性能的瓶颈。对于其优化,咱们须要升高元数据操作占比,进而进步 ops。
技术解决方案
基于以上探讨,咱们理解到在解决小文件时,元数据性能方面存在着重大的瓶颈。这是因为对于每个小文件,零碎都须要频繁读取并解决其对应的元数据信息,包含 open、close、stat 以及 revalidate 等等,这些操作会占用大量的网络和磁盘资源。因为咱们须要针对这些问题进行优化。
首先,为了撑持对元数据拜访门路的低提早和高 ops 能力,焱融分布式文件存储 YRCloudFile 采纳的 io 框架可提供百万级的 iops 能力。因为元数据须要保障 posix 语义,所以性能上无奈和一般读写 io 一样,但同样能够提供数十万的交互能力。
其次,依赖客户端缓存机制,焱融分布式文件存储 YRCloudFile 提供了基于内存缓存的元数据管理技术,在保障语义的前提下,能平安的命中缓存,缩小跨网络和磁盘拜访开销。
再次,咱们实现的 lazy size,lazy close,batch commit,metadata readhead 机制,能同时保障在文件系统语义的前提下,将局部逻辑 offload 到客户端,这样的益处是可能很好的升高元数据服务的压力,并且集群的元数据性能失去很大的晋升,包含在提早和 ops 等方面。
综上,焱融分布式文件存储 YRCloudFile 通过一系列技术操作优化小文件的元数据性能,包含基于内存缓存的元数据管理、轻量级 open、提早 close 以及批量 close 等。这些技术的利用,能够显著进步焱融分布式文件存储 YRCloudFile 在解决小文件时的性能体现,从而更好地满足用户的需要。
优化前后性能比照
接下来,咱们将在具体的 vdbench 测试中来看下焱融分布式文件存储 YRCloudFile 的优化成果。集群配置多正本模式,其中 3 组 mds,3 组 oss,mds 和 oss 均由 nvme ssd 构建。vdbench 脚本为:
hd=default,vdbench=/root/vdbench50406,shell=ssh,user=root
hd=hd01,system=10.16.11.141
fsd=fsd1_01,anchor=/mnt/yrfs/vdbench/4k-01/,depth=1,width=5,files=1000,size=4k,openflags=o_direct
fwd=fwd1_01,fsd=fsd2_01,host=hd01,operation=read,fileio=random,fileselect=random
rd=randr_4k,fwd=fwd5_*,xfersize=4k,threads=64,fwdrate=max,format=restart,elapsed=30,interval=1,pause=1m
优化前
Miscellaneous statistics:
(These statistics do not include activity between the last reported interval and shutdown.)
READ_OPENS Files opened for read activity: 540,793 95,986/sec
FILE_BUSY File busy: 5,129 570/sec
FILE_CLOSES Close requests: 540,793 95,986/sec
优化后
Miscellaneous statistics:
(These statistics do not include activity between the last reported interval and shutdown.)
READ_OPENS Files opened for read activity: 4,589,603 653,742/sec
FILE_BUSY File busy: 56,129 1,870/sec
FILE_CLOSES Close requests: 4,589,603 653,742/sec
通过上述数据,能够看到焱融分布式文件存储 YRCloudFile 显著进步了在解决小文件时的性能体现,性能进步 6 倍以上,以上是基于大量的测试和评估所得出的论断。
总结
在这篇文章,咱们探讨了焱融分布式文件存储 YRCloudFile 在只读小文件场景下的优化。咱们首先回顾了文件的根本读写流程,剖析了其中小文件存在的问题,进而设计了一系列的优化计划来解决 AI 训练场景下只读小文件的性能瓶颈。焱融分布式文件存储 YRCloudFile 的优化技术能够为业务利用尤其是 AI 训练场景下提供更疾速、更高效、更牢靠的服务,进而进步用户的体验和满意度,同时,也为将来的技术倒退提供了借鉴和启发。