【发布时间】:2019-10-20 10:53:53
【问题描述】:
我正在使用启用了 ENA 适配器的 c5.18xlarge 实例(因此预计每个 AWS 支持都具有到 S3 的 25 Gbps 连接)。我在 RHEL 7 上使用 AWS C++ SDK(版本 1.3.59)使用 256 MB 的部分大小将 70 GB 的文件上传到单个 S3 对象。根据 AWS 支持,我已将 ClientConfiguration 的 maxConnections 字段设置为 999,并将其 executor 字段设置为使用池大小为 999 的 PooledThreadExecutor(这些提高了我的性能)。我正在执行一系列 S3Client::UploadPart() 调用,自己处理这些;使用 UploadPartCallable() 并让 SDK 管理线程时,我得到了非常相似的性能。
这是我看到的表现: - 36 个线程:7.5 Gbps - 200 个线程:15.7 Gbps
AWS 支持报告了类似的行为(实际上他们使用了 900 个线程)。
我查看了 S3Client 的底层实现以及所有低级线程管理和 curl 句柄管理。我没有看到任何明显低效的事情发生。我需要 200 个线程才能在具有 36 个物理内核的机器上实现这种性能,这对我来说没有任何意义。这是预期的吗?有人可以解释正在发生的事情或将 SDK 配置为不需要这么多线程的不同方法吗?如果我小心的话,我想我可以提供自己的 HTTPClientFactory 并定制一些东西来切断如何管理 curl 句柄的互斥锁,但这似乎不太可能解释我所看到的。
感谢您的帮助。
-亚当
【问题讨论】:
标签: aws-sdk-cpp