Linux下NFS上的并行文件写入性能

Linux下NFS上的并行文件写入性能,linux,amazon-web-services,nfs,amazon-efs,Linux,Amazon Web Services,Nfs,Amazon Efs,我对来自Amazon的EFS文件系统的性能有一个问题,但我怀疑问题在于Linux配置 我的设置是AWS中的m4.1大型机器(2核,8GB RAM),EFS驱动器安装为NFS4.1安装类型,带有标准设置 我有一个脚本,正在创建独特的小1 kB文件(见下文)。我正在使用GNU并行实用程序并行运行脚本,它可以帮助我在不同数量的并行作业下运行 我所做的测试表明,当我只运行1个作业时,速度为60kB/秒,并行运行2个作业时,总体速度几乎为120kB/秒,但在这之后,并行运行3、4、10个作业时,总体速度仍

我对来自Amazon的EFS文件系统的性能有一个问题,但我怀疑问题在于Linux配置

我的设置是AWS中的m4.1大型机器(2核,8GB RAM),EFS驱动器安装为NFS4.1安装类型,带有标准设置

我有一个脚本,正在创建独特的小1 kB文件(见下文)。我正在使用GNU并行实用程序并行运行脚本,它可以帮助我在不同数量的并行作业下运行

我所做的测试表明,当我只运行1个作业时,速度为60kB/秒,并行运行2个作业时,总体速度几乎为120kB/秒,但在这之后,并行运行3、4、10个作业时,总体速度仍然保持在120kB/秒左右

我已经将文件描述符和打开文件的默认值增加到了很大的值,但没有任何影响。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

编辑:我使用4KB作为文件大小测试了iozone实用程序(它不接受1),吞吐量测试给出的结果是孩子看到240MB,而家长看到500kB(我找不到这实际上意味着什么,但这些500kB接近我测量的大小)。

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

我猜您正在对脚本进行大量CPU处理,以写入很少的数据(1K)。尝试使用真正的基准测试程序。根据top命令,每个并行作业的cpu约为1%。shell不会占用大量cpu时间,它将使用日历时间,这将扭曲基准测试的数字。我再次建议您使用真正的基准测试程序。@JohnHanley您能推荐一些基准测试工具吗?我尝试了iozone,但得到了一些奇怪的结果,对此我找不到明确的解释(我将把它们添加到问题中)
parallel -j 4 sh writefiles.sh {} ::: 1 2 3 4