本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon EBS 卷性能
有几个因素,包括您的实例和卷 I/O 的特性以及配置,可能会影响 Amazon EBS 的性能。如果您遵循我们的 Amazon EBS 和亚马逊 EC2 商品详情页面上的指南,通常会取得良好的业绩。但是,在某些情况下,您可能需要进行一些调整才能获得峰值性能。除了基准测试之外,我们建议您根据实际工作负载信息来调整性能,以确定最佳配置。在您学习了使用 EBS 卷的基础知识之后,最好查看所需的 I/O 性能,以及为满足这些要求而提高 Amazon EBS 性能的选项。
Amazon 对 EBS 卷类型性能的更新可能不会立即对现有卷生效。要查看较早卷上的全部性能,您需要先在其上执行 ModifyVolume
操作。有关更多信息,请参阅 使用弹性卷操作修改 Amazon EBS 卷。
内容
Amazon EBS 性能提示
这些提示代表了在各种用户场景下能够获得最佳 EBS 卷性能的最佳实践。
使用 EBS 优化的实例
对于不支持 EBS 优化吞吐量的实例,网络流量可能会与实例和 EBS 卷之间的流量产生冲突;而在 EBS 优化实例中,这两种流量相互独立。部分 EBS 优化实例配置(例如 C3、R3 和 M3)会产生额外成本,另一些实例(例如 M4、C4、C5 和 D2)始终可进行 EBS 优化而不会产生额外成本。有关更多信息,请参阅 Amazon EBS 优化。
配置实例带宽
对于支持的实例类型,您可以将实例带宽权重配置为使用带宽权重将 Amazon EBS 带宽提高 25%。ebs-1
此功能允许您优化实例在 EBS 和 VPC 网络之间的网络资源分配,从而有可能提高 I/O 密集型工作负载的 EBS 性能。有关更多信息,请参阅 可配置的实例带宽权重。
了解如何计算性能
度量 EBS 卷的性能时,应了解所需采用的度量单位以及如何计算性能,这十分重要。有关更多信息,请参阅Amazon EBS I/O 特征和监控。
了解工作负载
EBS 卷的最大性能、操作的大小和数量以及完成每个 I/O 操作所需的时间之间存在关系。这些因素(性能、I/O 和延迟)相互影响,不同应用程序对各个因素的敏感程度也不同。有关更多信息,请参阅对 Amazon EBS 卷进行基准测试。
请注意,从快照中初始化卷时,性能将会下降
当您首次访问从快照创建的新 EBS 卷上的每个数据块时,延迟会大大增加。您可以使用以下其中一个选项来避免这一性能下降:
-
在将卷部署到生产环境之前访问每个块。此过程称为初始化(以前称为预热)。有关更多信息,请参阅创建后手动初始化卷。
-
在快照上启用快速快照还原,以确保从中创建的 EBS 卷在创建时已完全初始化,并立即提供所有预置的性能。有关更多信息,请参阅Amazon EBS 快速快照还原。
可能导致 HDD 性能下降的因素
如果创建吞吐量优化型 HDD(st1
)或 Cold HDD(sc1
)卷的快照,则在快照处理过程中,性能可能会降低,最坏情况下会降低到卷的基准值。这种情况是这些卷类型特有的。其他可能限制性能的因素包括驱动的吞吐量超出实例所能支持的范围、初始化根据快照创建的卷时遇到的性能损失,以及卷 I/O 上随机出现过多的小容量。有关计算 HDD 卷吞吐量的更多信息,请参阅 Amazon EBS 卷类型。
如果您的应用程序发送量不足,您的性能也会受到影响I/O requests. This can be monitored by looking at your volume’s queue length and I/O size. The queue length is the number of pending I/O requests from your application to your volume. For maximum consistency, HDD-backed volumes must maintain a queue length (rounded to the nearest whole number) of 4 or more when performing 1 MiB sequential I/O。有关确保稳定的卷性能的更多信息,请参阅 Amazon EBS I/O 特征和监控。
为 st1
和 sc1
上的高吞吐量读取密集型工作负载增加预读值(仅限 Linux 实例)
一些工作负载读取操作量大,并会访问操作系统页缓存中的块设备(例如从文件系统访问)。在这种情况下,为了实现最大的吞吐量,我们建议您将预读取设置配置为 1 MiB。此 per-block-device设置只能应用于您的 HDD 卷。
要检查您的块储存设备的当前预读数值,请使用以下命令:
$
sudo blockdev --report /dev/
<device>
块储存设备信息采用以下格式返回:
RO RA SSZ BSZ StartSec Size Device
rw 256 512 4096 4096 8587820544 /dev/<device>
以上显示的设备报告预读取值为 256(默认值)。将此数字乘以扇区大小(512 字节)就可获得预读取缓冲区的大小,在此例中为 128 KiB。要将缓冲区值设置为 1 MiB,请使用以下命令:
$
sudo blockdev --setra 2048 /dev/
<device>
再次运行第一个命令,验证预读取设置现在显示 2048。
只有当您的工作负载包含大型连续工作负载时I/Os. If it
consists mostly of small, random I/Os, this setting will actually degrade your performance.
In general, if your workload consists mostly of small or random I/Os,才使用此设置,您应该考虑使用通用型 SSD(gp2
和gp3
)卷,而不是st1
或sc1
卷。
使用现代 Linux 内核(仅限 Linux 实例)
借助对间接描述符的支持,使用现代 Linux 内核。任何 Linux 内核 3.8 及以上版本以及任何当前一代的实例都支持此功能 EC2 。如果您的平均 I/O 大小等于或接近 44 KiB,则可能使用不支持间接描述符的实例或内核。有关从 Amazon CloudWatch 指标得出平均 I/O 尺寸的信息,请参阅Amazon EBS I/O 特征和监控。
要在 st1
或 sc1
卷上实现最大吞吐量,建议您将值 256 应用于 xen_blkfront.max
参数(对于低于 4.6 的 Linux 内核版本)或 xen_blkfront.max_indirect_segments
参数(对于 Linux 内核版本 4.6 及更高版本)。可在操作系统 boot 命令行中设置相应的参数。
例如,在具有较早内核的 Amazon Linux AMI 中,您可以将它添加到在 /boot/grub/menu.lst
中找到的 GRUB 配置的 kernel 行末尾:
kernel /boot/vmlinuz-4.4.5-15.26.amzn1.x86_64 root=LABEL=/ console=ttyS0 xen_blkfront.max=256
对于更高版本的内核,该命令将类似于以下内容:
kernel /boot/vmlinuz-4.9.20-11.31.amzn1.x86_64 root=LABEL=/ console=tty1 console=ttyS0 xen_blkfront.max_indirect_segments=256
重启实例,让此设置生效。
有关更多信息,请参阅为半 AMIs虚拟化配置 GRUB。对于其他 Linux 发行版(尤其是不使用 GRUB 引导加载程序的版本)可能需要采用不同方法来调整内核参数。
使用 RAID 0 以最大限度利用实例资源
某些实例类型可能比您为单个 EBS 卷预配置的 I/O 吞吐量更大。可以将多个卷一起加入到 RAID 0 配置中,以将可用带宽用于这些实例。有关更多信息,请参阅 Amazon EBS 和 RAID 配置。
监控 Amazon EBS 卷性能
您可以使用亚马逊、状态检查和 EBS 详细性能统计数据来监控和分析 Amazon CloudWatch EBS 卷的性能。有关更多信息,请参阅亚马逊 EBS 的亚马逊 CloudWatch 指标和Amazon EBS 的详细绩效统计数据。