我们发现,在 EC2 实例中使用 AWS 文件存储(使用 GP2 或 GP3 的 EFS 或 EBS)进行同时读取时速度非常慢。以下是示例:
我正在将 30 个二进制文件读入内存,总计 46 MB。
执行一次此操作大约需要 16 毫秒。但是,如果我在同一个 EC2 实例上生成 8 个并行进程,每个进程读取不同的 30 个二进制文件集,则每个进程平均需要 105 毫秒(比单个进程慢 556%)。这几乎就像 8 次读取是连续发生的,而不是并行发生的(尽管并不完全是)。注意:当时没有对这些文件进行写入。
如果我在笔记本电脑上使用本地文件存储重复相同的测试,对相同文件进行 8 次同时读取仅比单次读取慢约 70%。
为什么使用 AWS 存储同时读取同一文件的性能损失会如此之大?
我可以对音量进行任何配置来减少性能损失吗?
更新:这似乎并不依赖于读取相同的文件。无论每个进程读取相同的 30 个文件还是 30 个不同的文件,我都会获得相同的性能。标题和详细信息已更新以说明这一点。
答案1
事实证明,这种性能下降是由于客户端的 CPU 瓶颈造成的。我试图用 8 个同时的进程读取文件,但我在其中运行它的 Docker 容器仅限于 2 个核心。当我将其提升到至少 8 个核心时,性能显著提高。