2

我对来自 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 接近我测量的值)。

4

1 回答 1

1

经过多次测试和与亚马逊支持人员的讨论,我的瓶颈似乎是我将所有文件写入同一个文件夹(并且可能有一个用于命名目的的锁)。如果我将测试更改为将文件写入不同的文件夹,速度会提高很多。

于 2018-03-07T13:43:57.130 回答