HPC 和 AI 创新实验室的 Mario Gallegos 于 2019 年 10 月撰写的文章
客户端节点数 |
16 |
客户端节点 |
C6320 |
每个客户端节点的处理器数 |
2 个英特尔至强 Gold E5-2697v4 18 核 @ 2.30GHz |
每个客户端节点的内存 |
12 x 16GiB 2400 MT/s RDIMM |
BIOS |
2.8.0 |
操作系统内核 |
3.10.0-957.10.1 |
GPFS 版本 |
5.0.3 |
./iozone -i0 -c -e -w -r 8M -s 128G -t $Threads -+n -+m ./threadlist
./iozone -i1 -c -e -w -r 8M -s 128G -t $Threads -+n -+m ./threadlist
mpirun --allow-run-as-root -np $Threads --hostfile my_hosts.$Threads --mca btl_openib_allow_ib 1 --mca pml ^ucx --oversubscribe --prefix /mmfs1/perftest/ompi /mmfs1/perftest/lanl_ior/bin/ior -a POSIX -v -i 1 -d 3 -e -k -o /mmfs1/perftest/tst.file -w -s 1 -t 8m -b 128G
mpirun --allow-run-as-root -np $Threads --hostfile my_hosts.$Threads --mca btl_openib_allow_ib 1 --mca pml ^ucx --oversubscribe --prefix /mmfs1/perftest/ompi /mmfs1/perftest/lanl_ior/bin/ior -a POSIX -v -i 1 -d 3 -e -k -o /mmfs1/perftest/tst.file -r -s 1 -t 8m -b 128G
./iozone -i2 -c -O -w -r 4K -s 32G -t $Threads -+n -+m ./threadlist
mpirun --allow-run-as-root -np $Threads --hostfile my_hosts.$Threads --prefix /mmfs1/perftest/ompi --mca btl_openib_allow_ib 1 /mmfs1/perftest/lanl_ior/bin/mdtest -v -d /mmfs1/perftest/ -i 1 -b $Directories -z 1 -L -I 1024 -y -u -t -F
线程数 |
每个线程的目录数 |
文件总数 |
1 |
2048 |
2,097,152 |
2 |
1024 |
2,097,152 |
4 |
512 |
2,097,152 |
8 |
256 |
2,097,152 |
16 |
128 |
2,097,152 |
32 |
64 |
2,097,152 |
64 |
32 |
2,097,152 |
128 |
16 |
2,097,152 |
256 |
8 |
2,097,152 |
512 |
4 |
2,097,152 |
1024 |
2 |
2,097,152 |
mpirun --allow-run-as-root -np $Threads --hostfile my_hosts.$Threads --prefix /mmfs1/perftest/ompi --mca btl_openib_allow_ib 1 /mmfs1/perftest/lanl_ior/bin/mdtest -v -d /mmfs1/perftest/ -i 1 -b $Directories -z 1 -L -I 1024 -y -u -t -F -w 4K -e 4K
图 6: 元数据性能 — 小型文件 (4K)
系统在 Stat 和 Removal 操作方面获得了非常好的结果,分别在 128 个线程、7.7M op/s 和 1M op/s 时达到峰值。删除操作达到最大值 37.3K op/s,创建操作达到峰值(55.5K op/s),两者均为 512 个线程。统计信息和删除操作具有更大的可变性,但是一旦达到峰值,统计信息的性能不会低于 400 万次操作/秒,删除操作的性能也不会低于 200K 操作/秒。创建和读取的可变性较低,并随着线程数量的增加而不断提供。
由于这些数字适用于具有单个 ME4024 的元数据模块,因此每增加一个 ME4024 阵列,性能就会提高,但我们不能只假设每次操作都会呈线性增长。除非整个文件可以放到此类文件的索引节点内,否则 ME4084 上的数据目标将用于存储 4K 文件,从而在一定程度上限制性能。由于索引节点大小为 4KiB,并且仍然需要存储元数据,因此只有大约 3 KiB 的文件能够保存在其中,任何大于该大小的文件都将使用数据目标。
此测试与之前的测试几乎完全相同,只是使用了 3KiB 的小文件。主要区别在于这些文件完全适合信息节点。因此,不使用存储节点及其 ME4084,通过仅使用 SSD 介质进行存储并减少网络访问来提高整体速度。
使用了以下命令来执行基准测试,其中 Threads 是使用的线程数的变量(从 1 到 512,以 2 的幂次方递增),my_hosts.$Threadst 是将每个线程分配到不同节点上的对应文件,使用轮询在 16 个计算节点上以同构方式分布线程。
mpirun --allow-run-as-root -np $Threads --hostfile my_hosts.$Threads --prefix /mmfs1/perftest/ompi --mca btl_openib_allow_ib 1 /mmfs1/perftest/lanl_ior/bin/mdtest -v -d /mmfs1/perftest/ -i 1 -b $Directories -z 1 -L -I 1024 -y -u -t -F -w 3K -e 3K
图 7:元数据性能 — 小型文件 (3K)
系统在 256 个线程处分别以 8.29M op/s 和 5.06M op/s 达到峰值,获得了非常好的 Stat 和 Read 操作结果。删除操作在 128 个线程下达到最大值 609K op/s,在 512 个线程下创建操作达到峰值,达到 78K op/s。与“创建”和“删除”相比,“统计”和“读取”操作具有更大的可变性。对于两个较高的线程点,删除操作会使性能略有下降,这表明 128 个线程后的持续性能将略高于 400K op/s。创建线程不断增加到 512 个,但看起来达到了一个平台期,因此最大性能可能仍低于 100K op/s。
由于此类小文件完全存储在基于 SSD 的元数据模块上,因此需要卓越小文件性能的应用程序可以使用一个或多个可选的高要求元数据模块来提高小文件性能。但是,按照当前标准,适合信息节点的文件非常小。此外,由于元数据目标使用 SSD 相对较小(最大大小为 19.2 TB)的 RAID 1,因此与存储节点相比,容量将受到限制。因此,必须小心避免填满元数据目标,这可能会导致不必要的故障和其他问题。
在 PixStor 功能中,通过高级分析监视文件系统对于大幅简化管理至关重要,有助于主动或被动地发现问题或潜在问题。接下来,我们将简要介绍其中的一些功能。
图 8 显示了基于文件系统容量的有用信息。左侧是文件系统已用空间总量,以及基于已用文件系统容量的前十个用户。右侧是历史视图,其中包含多年来的已用容量,然后是使用容量最多的 10 种文件类型和使用的 10 大文件集,均基于已用容量,采用类似于帕累托图的格式(不包括行表示累计总计)。利用这些信息,可以轻松找到用户获得的文件系统超出其公平份额的容量、容量使用趋势以帮助确定未来的容量增长、哪些文件占用了大部分空间或者哪些项目占用了大部分容量。
图 8: PixStor Analytics - 容量视图
图 9 提供了一个文件计数视图,其中包含两种非常有用的查找问题的方法。屏幕的前半部分以饼图的形式显示前十名用户,以及采用类似于帕累托图的格式的前十名文件类型和前十名文件集(想想项目),所有这些都基于文件数量。此信息可用于回答一些重要问题。例如,哪些用户通过创建过多文件来独占文件系统,哪种类型的文件正在制造元数据噩梦,或者哪些项目占用了大部分资源。
下半部分有一个直方图,其中包含针对不同文件大小使用 5 个类别的文件大小的文件数量(频率)。这可用于了解整个文件系统中使用的文件大小,与文件类型协调可用于确定压缩是否有用。
图 9: PixStor Analytics - 文件计数视图
如 表 4 所示,当前的解决方案能够提供相当好的性能,无论使用的空间如何(因为系统是在分散模式下格式化),预计性能将是稳定的。此外,随着添加更多存储节点模块,该解决方案的容量和性能会线性提升,可选的高需求元数据模块也可以实现类似的性能提升。此解决方案为 HPC 客户提供了一个非常可靠的并行文件系统,它被许多排名前 500 的 HPC 群集使用。此外,它还提供卓越的搜索功能、高级监控和管理,并且添加可选网关允许通过无处不在的标准协议(如 NFS、SMB 等)将文件共享给尽可能多的客户端。
表4 巅峰和持续的性能
|
峰值性能 |
持续性能 |
||
写入 |
读取 |
写入 |
读取 |
|
大型顺序多客户端对多文件 |
16.7 千兆字节/s |
23 千兆字节/s |
16.5 千兆字节/s |
20.5 千兆字节/s |
大型顺序多客户端对单个共享文件 |
16.5 千兆字节/s |
23.8 GB/s |
16.2 千兆字节/s |
20.5 千兆字节/s |
随机小数块多客户端对多文件 |
15.8KIOps |
20.4KIOps |
15.7KIOps |
20.4KIOps |
元数据创建空文件 |
169.4K IOps |
127.2K IOps |
||
元数据统计空文件 |
1120 万 IOps |
3.3M IOps |
||
元数据读取空文件 |
480 万 IOps |
2.4M IOps |
||
元数据删除空文件 |
194.2K IOps |
144.8K IOps |
||
元数据创建 4KiB 文件 |
55.4K IOps |
55.4K IOps |
||
元数据统计 4KiB 文件 |
6.4M IOps |
4M IOps |
||
元数据读取 4KiB 文件 |
37.3K IOps |
37.3K IOps |
||
元数据删除 4KiB 文件 |
1M IOps |
219.5K IOps |
由于该解决方案计划使用 Cascade Lake CPU 和更快的 RAM 发布,因此当系统具有最终配置后,我们将执行一些性能抽查。需要使用至少 2 个 ME4024 和 4KiB 文件测试可选的高需求元数据模块,以便更好地记录涉及数据目标时元数据性能如何增长。此外,我们还将衡量网关节点的性能,并将其结果与抽查的相关结果一起在新的博客或白皮书中报告。最后,我们计划测试和发布更多解决方案组件,以提供更多功能。