选项 1:IO 争用

选项 1:IO 争用

我正在将一个 webapp 从其开发所在地的本地服务器移到其他地方,以便最终部署。我目前正在评估 AWS 和 Rackspace,并正在 AWS 上试用该网站。我试图让这两个环境尽可能相似;两者都在 Fedora 17 上运行一个非常简单的 LAMP 堆栈,使用相同版本的 apache、php 等。我的开发机器是一个基于 i7 860 芯片和 32 GB 内存的自制机;在 AWS,我通常使用 m1.small 实例,该实例是从他们的“标准”fedora 17 实例构建的,我使用的某些基准测试软件将其描述为“Intel Xeon E5-2650 0 @ 1.80GHz(1 核),内存:2048MB”。我的 AWS 实例的根设备设置为 EBS 卷。

该网站在两个机器上都正常运行,我很高兴看到网站性能大致相当,AWS 稍慢一些。但是,作为网站工作的一部分,我还通过我在两个网站上从源代码构建的 ffmpeg 版本进行了一些视频编码。在这里,我获得了巨大的性能差异,我的开发服务器比 AWS 快 10 倍左右。我运行了一些基准测试,它们显示了类似的差异:Phoronix“apache”基准测试显示我的服务器运行速度约为 AWS 实例的 12 倍。

所以,我很困惑。我知道 AWS 实例的“E5-2650”描述只是为了描述目的,而且我实际上并没有一台完全配备 E5-2650 的机器。但是,正确的思考方式是什么?E5-2650 似乎是一款速度超快的 8 核芯片,从某些方面来看,它的速度大约是我的 i7 的两倍;也许我应该认为我实际上拥有这种机器的 1/8(8 个核心中的 1 个)?这仍然无法让我达到 10 倍,但也许这归因于我的开发机器的内存量(大得多)?或者我在 AWS 安装中搞砸了什么——我比完全的 AWS 新手高出一筹,但仅此而已,所以搞砸事情是完全有可能的。有什么建议吗?

答案1

我有几个选择供您考虑:

选项 1:IO 争用

视频编码性能的差异可能与 CPU 关系不大。相反,应该研究 IO 争用。在编码时,运行top,并观察标头中的 值%wa。这是服务器等待 IO 请求的时间百分比。您希望这个数字尽可能低。在我的系统上,如果我看到这个数字高于 5% 左右(5 分钟内的平均值),我就会开始进行更改。

如果确实看到高 IO 争用,您可以采取一些措施。首先,也许最简单的方法是转移到预配置 IOP(PIOP)EBS 卷。通过这些,您可以指定需要多少 IOP。您需要为此支付额外费用,但这是迄今为止提高 IO 性能最简单的方法。

如果您出于某种原因不想这样做,您可以将一堆 EBS 卷关联到您的服务器并将它们条带化为更大的 RAID0 卷。在这种情况下,聚合 IO 将大大增加,但风险也更大,因为任何单个 EBS 卷的故障都会破坏该卷上的数据。

我建议尝试一下 PIOP 卷。

选项 2:CPU 节流

还有一件事需要考虑:您正在运行 m1.small。在这些较小的实例上,AWS 对 CPU 限制非常严格,因此您可以考虑转移到更大的实例,可能是高 CPU 型号,例如 c1.medium。如果 AWS 正在限制您的 CPU,您会在%st的输出中的 (steal) 列中看到高值top

选项 3:外包

这可能有点牵强,但为什么不试试 AWS 的弹性转码器服务?这样就可以完全消除服务器上的编码负担。

相关内容