Amazon EC2 VPC:NAT 实例下载速度性能下降

j0n*_*nes 7 nat amazon-ec2 amazon-vpc

我在 VPC 中的 Amazon EC2 中有一组服务器。在这个 VPC 中,我有一个私有子网和一个公共子网。在公共子网中,我在 t2.micro 实例上设置了一台 NAT 机器,它基本上在启动时运行这个 NAT 脚本,将规则注入 iptables。从私有子网内的机器从互联网下载文件工作正常。

但是,我将外部高带宽 FTP 服务器上直接从我的 NAT 机器上的文件下载速度与从我的私有子网内的机器(通过同一台 NAT 机器)的下载速度进行了比较。有一个非常显着的差异:从 NAT 机器下载大约 10MB/s,而从私有子网内的机器下载时大约为 1MB/s。

NAT 机器上没有 CPU 使用率,因此这不是瓶颈。在使用更大的机器(具有“中等网络性能”的 m3.medium 和具有“高网络性能”的 m3.xlarge)尝试相同的测试时,我也无法获得大于 2.5MB/s 的下载速度。

这是可以(并且应该)调整的一般 NAT 问题吗?性能下降从何而来?

更新

通过一些测试,我可以缩小这个问题的范围。当我从 2013 年开始使用 Ubuntu 12.04 或 Amazon Linux NAT 机器时,一切运行顺利,我获得了完整的下载速度,即使在最小的 t2.micro 实例上也是如此。无论我使用 PV 还是 HVM 机器都没有关系。问题似乎与内核有关。这些旧机器的内核版本为 3.4.x,而较新的 Amazon Linux NAT 机器或 Ubunut 14.XX 的内核版本为 3.14.XX。有没有办法调整较新的机器?

j0n*_*nes 6

我们终于找到了解决办法。您可以通过在 NAT 机器上运行(以 root 用户身份)来修复下载速度:

ethtool -K eth0 sg off
Run Code Online (Sandbox Code Playgroud)

这将禁用分散-聚集模式,该模式(据我所知)停止卸载网卡本身上的一些网络工作。禁用此选项会导致客户端上更高的 CPU 使用率,因为 CPU 现在必须自己完成工作。然而,在 t2.micro 机器上,下载 DVD 映像时我们只看到大约 5% 的 CPU 使用率。

请注意,这不会在重新启动后继续存在,因此请确保rc.local在设置 NAT中或至少在设置 NAT 之前进行设置。