本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊的EBS音量表现
有几个因素,包括 I/O 特性以及您的实例和卷的配置,可能会影响 Amazon 的性能EBS。如果您遵循我们亚马逊EBS和亚马逊EC2商品详情页面上的指南,通常会取得良好的业绩。但是,在某些情况下,您可能需要进行一些调整才能获得峰值性能。除了基准测试之外,我们建议您根据实际工作负载信息来调整性能,以确定最佳配置。在您学习了使用EBS卷的基础知识之后,最好查看所需的 I/O 性能,以及为满足这些要求而提高 Amazon EBS 性能的选项。
Amazon 对EBS卷类型性能的更新可能不会立即对现有卷生效。要查看较早卷上的全部性能,您需要先在其上执行 ModifyVolume
操作。有关更多信息,请参阅 使用弹性EBS卷操作修改 Amazon 卷。
亚马逊EBS绩效提示
这些技巧代表了在各种用户场景中让您的EBS卷获得最佳性能的最佳实践。
使用EBS经过优化的实例
在不支持EBS优化吞吐量的实例上,网络流量可能会与您的实例和EBS卷之间的流量发生冲突;在EBS经过优化的实例上,这两种类型的流量是分开的。一些EBS经过优化的实例配置会产生额外费用(例如 C3、R3 和 M3),而另一些则始终进行EBS优化,无需支付额外费用(例如 M4、C4、C5 和 D2)。有关更多信息,请参阅 亚马逊EBS优化。
了解如何计算性能
在衡量EBS卷的性能时,重要的是要了解所涉及的计量单位以及性能是如何计算的。有关更多信息,请参阅 亚马逊 EBS I/O 特征和监控。
了解工作负载
EBS卷的最大性能、I/O 操作的大小和数量以及完成每个操作所需的时间之间存在关系。这些因素(性能、I/O 和延迟)相互影响,不同应用程序对各个因素的敏感程度也不同。有关更多信息,请参阅基准亚马逊EBS交易量。
请注意,从快照中初始化卷时,性能将会下降
首次访问根据快照创建的新EBS卷上的每个数据块时,延迟会显著增加。您可以使用以下其中一个选项来避免这一性能下降:
-
在将卷部署到生产环境之前访问每个块。此过程称为初始化(以前称为预热)。有关更多信息,请参阅 初始化 Amazon EBS 卷。
-
在快照上启用快速快照恢复,以确保使用快照创建的EBS卷在创建时已完全初始化,并立即提供其所有预配置性能。有关更多信息,请参阅 Amazon EBS 快速恢复快照。
可能降低性能的HDD因素
创建吞吐量优化 HDD (st1
) 或 Cold HDD (sc1
) 卷的快照时,在快照进行期间,性能可能会降至该卷的基准值。这种情况是这些卷类型特有的。其他可能会限制性能的因素包括迫使吞吐量超过实例的支持能力,在初始化从快照创建的卷时损失性能,以及卷上的小型随机 I/O 过多。有关计算HDD卷吞吐量的更多信息,请参阅Amazon EBS 卷类型。
如果您的应用程序没有发送足够多的 I/O 请求,性能可能也会受影响。这可通过查看卷的队列长度和 I/O 大小来监控。队列长度是您的应用程序向卷发起的待处理 I/O 请求的数量。为了最大限HDD度地保持一致性,在执行 1 MiB 的顺序 I/O 时,由支持的卷必须保持 4 或更大的队列长度(四舍五入到最接近的整数)。有关确保卷性能一致的更多信息,请参阅 亚马逊 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/O 时,才使用此设置。如果它主要包含的是小型随机 I/O,则此设置会降低性能。通常,如果您的工作负载主要由小型或随机 I/O 组成,则应考虑使用通用型SSD(gp2
和gp3
)卷,而不是st1
或sc1
卷。
使用现代 Linux 内核(仅限 Linux 实例)
借助对间接描述符的支持,使用现代 Linux 内核。任何 Linux 内核 3.8 及以上版本以及任何当前一代的实例都支持此功能EC2。如果您的平均 I/O 大小达到或接近 44 KiB,则说明您可能是在不支持间接描述符的情况下使用实例或内核。有关从 Amazon CloudWatch 指标得出平均 I/O 大小的信息,请参阅亚马逊 EBS I/O 特征和监控。
要在 st1
或 sc1
卷上实现最大吞吐量,建议您将值 256 应用于 xen_blkfront.max
参数(对于低于 4.6 的 Linux 内核版本)或 xen_blkfront.max_indirect_segments
参数(对于 Linux 内核版本 4.6 及更高版本)。可在操作系统 boot 命令行中设置相应的参数。
例如,在AMI带有早期内核的 Amazon Linux 中,您可以按照以下GRUB配置将其添加到内核行的末尾/boot/grub/menu.lst
:
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
重启实例,让此设置生效。
有关更多信息,请参阅GRUB为半虚拟AMIs化进行配置。其他 Linux 发行版,尤其是那些不使用GRUB启动加载程序的发行版,可能需要不同的方法来调整内核参数。
使用 RAID 0 可最大限度地提高实例资源的利用率
某些实例类型所能驱动的 I/O 吞吐量可能超过您为单个EBS卷预配置的吞吐量。您可以以 RAID 0 配置将多个卷连接在一起,以使用这些实例的可用带宽。有关更多信息,请参阅 Amazon EBS 和RAID配置。
使用 Amazon 追踪绩效 CloudWatch
Amazon Web Services 为亚马逊EBS提供性能指标,您可以通过亚马逊进行分析 CloudWatch 和查看,还可以使用状态检查来监控卷的运行状况。有关更多信息,请参阅 亚马逊针对亚马逊的 CloudWatch 指标 EBS。