【问题标题】:S3 to EC2 transfer is too slowS3 到 EC2 的传输太慢
【发布时间】:2019-07-05 05:46:07
【问题描述】:

我正在尝试将一个大文件 (~1.75GB) 从 S3 移动到同一区域的 EC2 实例。

通过 AWS 命令​​行,我可以在大约 13 秒内完成。

aws s3 cp s3://mybucket/myfile.txt ~

wget 来自同一个 EC2 实例(如果我公开文件)在 34 秒内完成。

wget https://mybucket.s3.amazonaws.com/myfile.txt

我的应用程序通过 REST API 可以以与wget 相同的速度下载它。

实例是 m5a.2xlarge,它应该具有“高达 10 Gbps”的网络。如果我的数学是正确的,10Gbps 应该是每秒 1 GB 左右,所以不到 2 秒就可以获取文件?

UPD: speedtest-cli 显示 850Mbit/s。

Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by BroadAspect (Ashburn, VA) [0.98 km]: 1.387 ms
Testing download speed................................................................................
Download: 850.94 Mbit/s
Testing upload speed......................................................................................................
Upload: 929.41 Mbit/s

UPD2: Enhanced Networking 已启用

[ec2-user@ip-172-30-0-196 ~]$ ethtool -i eth0
driver: ena
version: 2.0.2g

UPD3:尝试了更多实例类型。最小/最便宜的 ARM a1.medium 和 i3en.6xlarge(I/O 优化,“保证”25Gbps)

将 1.75GB 文件从 S3 复制到同一区域的 EC2 实例的时间:

|instance type|Network Gbps|aws s3 cp|wget|
|-------------|------------|---------|----|
|m5a.2xlarge  |  Up to 10  |   13    | 34 |
|a1.medium    |  Up to 10  |   26    | 34 |
|i3en.6xlarge |     25     |   7.5   | 18 |

有趣的是 - 切换到 IO - 优化实例提高了传输速度,但它仍然没有接近 [文件大小]/[实例 Gbps]。

UPD4:AWS S3 配置

AWS S3 CLI 工具很少提供configurations options,例如:

aws configure set default.s3.max_concurrent_requests 10
aws configure set default.s3.multipart_chunksize 8MB

以上数字为默认值。在玩了一会儿之后,我发现m5a.2xlarge 的最佳组合是 3 个并发请求,180MB 块大小。这将下载时间缩短至 9 秒或 ~204MiB/秒。更好,但距离(理论上?)最大值还很远。

【问题讨论】:

  • "Up to 10 Gbps" 是一个值范围,包括(但不限于)0 Gbps。他们不保证一致 10 Gbps。
  • 我看到的速度非常一致,并且低于 10Gbps。喜欢 10 倍以下?
  • 10Gbps 是一个限制。这就像您的路由器限制10Gbps,但由于您的互联网提供商,吞吐量仅为1 Gbps
  • 如果 aws-cli 始终比 wget 快,这表明 aws-cli 正在使用字节范围请求在多个并行流中下载文件。您不会用单个 TCP 流使实例的连接饱和。 docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html
  • aws 没有提到任何关于吞吐量限制的内容,看起来我错了(糟糕的文档阅读抱歉)但是,它不能保证您将获得什么吞吐量,因此每个 GET 请求都有一个限制,具体取决于在网络条件下(这是尽力而为)。 AWS 声称单个实例可以达到 100 GB/s。也许这就是答案? medium.com/@venks.sa/…

标签: amazon-web-services amazon-s3 amazon-ec2


【解决方案1】:

拥有 10Gbps 并不能保证另一端以该速度向您发送数据。

current-generation EC2 instance types configured with ENA 之前,最高支持 25 Gbps 到 S3,最大为 5 Gbps。

您可以进行一些额外的测试,例如 EC2 到 EC2 或 EC2 到 speedtest.net(或等效)。

顺便说一句,如果您真的要下载 1.75GB 的文本文件,那么压缩会有所帮助。

【讨论】:

  • speedtest-cli 给了我 850.94 Mbit/s。 (见帖子更新)
  • 压缩正在考虑中,但它最多会给我 3 倍的系数。
  • 文件内容多久更改一次?您需要多久下载一次?您是否查看过具有更新的 AMI 和 ENA 的更新实例类型?
  • 您的意思是这些拥有大量内核,例如 m5a.24xlarge?目前可能有点超出我的支出预算:)
  • 文件很少更改。添加新文件 - 一天几次。 EC2 实例可能需要“随机”访问文件,但并不经常。根据modinfo ena 安装ENA。操作系统 - 最新的 Amazon Linux 2。
猜你喜欢
  • 2012-06-09
  • 2011-04-07
  • 1970-01-01
  • 2018-01-20
  • 2015-01-20
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
相关资源
最近更新 更多