我对来自 Amazon 的 EFS 文件系统的性能有疑问,但我怀疑问题出在 Linux 配置上。
我的设置是 AWS 中的 m4.large 机器(2 核,8GB RAM),EFS 驱动器使用标准设置安装为 NFS4.1 安装类型。
我有一个创建独特的 1 kB 小文件的脚本(见下文)。我正在使用 GNU 并行实用程序并行运行脚本,该实用程序可帮助我在不同数量的并行作业下运行。
我所做的测试表明,当我只运行 1 个作业时,速度是 60kB/秒,并行运行 2 个作业,整体速度几乎是 120kB/秒,但之后并行运行 3、4、10 个作业时,整体速度仍保持在 120 kB/秒左右。
我已经将文件描述符和打开文件的默认值增加到了很大的值,但没有任何影响。CPU几乎没有使用,内存也不是很使用。根据规格,网络应该能够维持高达 45MB/秒的速度,所以我也离这个限制很远。此外,最大吞吐量的 EFS 限制约为 105 MB/秒。
除了增加机器上的内核数量之外,我还能设置什么来允许并行写入更多文件?(猜测文件将转换写入 NFS 挂载的 tcp 连接)
使用的脚本:
#!/bin/bash
value="$(<source1k.txt)"
host="$(hostname)"
client=$1
mkdir output4/"$host"
for i in {0..5000}
do
echo "$value" > "output4/$host/File_$(printf "%s_%03d" "$client" "$i").txt"
done
它被称为运行在 4 个并行作业上
parallel -j 4 sh writefiles.sh {} ::: 1 2 3 4
编辑:我使用 4 kB 作为文件大小(它不接受 1)测试了 iozone 实用程序,吞吐量测试给出的结果是孩子看到 240MB,而父母看到 500kB(我找不到这实际上意味着什么,但是那些500kB 接近我测量的值)。