Amazon Elastic Compute Cloud
用户指南(适用于 Linux 实例)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Linux 实例上的 Amazon EBS 卷性能

几个因素 (包括 I/O 特性以及实例和卷的配置) 会对 Amazon EBS 的性能造成影响。客户如按照 Amazon EBS 和 Amazon EC2 产品详细信息页面上的指导操作,通常能获得很好的性能。但是,在某些情况下,您可能需要进行一些调整才能在此平台上获得最好的性能。本主题讨论特定于某些使用案例的一般最佳实践和性能调整。除了基准测试之外,我们建议您根据实际工作负载信息来调整性能,以确定最佳配置。当您学习了使用 EBS 卷的基础知识后,最好了解一下所需的 I/O 性能,以及可用于提升 Amazon EBS 性能以满足这些要求的选项。

注意

AWS updates to the performance of EBS volume types may not immediately take effect on your existing volumes. To see full performance on an older volume, you may first need to perform a ModifyVolume action on it. For more information, see Modifying the Size, IOPS, or Type of an EBS Volume on Linux.

Amazon EBS 性能提示

这些提示代表了在各种用户场景下能够获得最佳 EBS 卷性能的最佳实践。

使用 EBS 优化的实例

对于不支持 EBS 优化吞吐量的实例,网络流量可能会与实例和 EBS 卷之间的流量产生冲突;而在 EBS 优化实例中,这两种流量相互独立。部分 EBS 优化实例配置 (如 C3、R3 和 M3) 会产生额外成本,另一些实例 (如 M4、C4、C5 和 D2) 始终可进行 EBS 优化而不会产生额外成本。有关更多信息,请参阅 Amazon EC2 实例配置

了解如何计算性能

度量 EBS 卷的性能时,应了解所需采用的度量单位以及如何计算性能,这十分重要。有关更多信息,请参阅 I/O 特征和监控

了解您的工作负载

EBS 卷的最高性能、I/O 操作的大小和数量,以及完成每个操作所需时间之间存在着某种关系。这些因素 (性能、I/O 和延迟) 相互影响,不同应用程序对各个因素的敏感程度也不同。有关更多信息,请参阅 对 EBS 卷进行基准测试

请注意,在从快照初始化卷时,可能会有性能损失

当您首次访问从快照还原的新 EBS 卷上的每个数据块时,延迟会大大增加。您可以在将卷用于生产之前访问每个数据块,以避免这种性能影响。此过程称为初始化(以前称为预热)。有关更多信息,请参阅初始化 Amazon EBS 卷

可能降低 HDD 性能的因素

如果创建吞吐优化 HDD (st1) 或Cold HDD (sc1) 卷的快照,则在快照处理过程中,性能可能会降低,最坏情况下会降低到卷的基准值。这种情况是这些卷类型特有的。其他可能会限制性能的因素包括迫使吞吐量超过实例的支持能力,在初始化从快照还原的卷时损失性能,以及卷上的小型随机 I/O 过多。有关计算 HDD 卷的吞吐量的更多信息,请参阅 Amazon EBS 卷类型

如果您的应用程序没有发送足够多的 I/O 请求,性能可能也会受影响。这可通过查看卷的队列长度和 I/O 大小来监控。队列长度是您的应用程序向卷发起的待处理 I/O 请求的数量。为实现最大程度的一致性,在执行 1 MiB 的顺序 I/O 时,HDD 卷必须保持 4 或更大的队列长度(四舍五入为最近的整数)。有关确保稳定的卷性能的更多信息,请参阅 I/O 特征和监控

st1sc1 上高吞吐量、读取操作量大的工作负载增大预读取值

一些工作负载读取操作量大,并会访问操作系统页缓存中的块储存设备 (例如,从文件系统访问)。在这种情况下,为了实现最大的吞吐量,我们建议您将预读取设置配置为 1 MiB。每个块储存设备的设置不同,应该只应用于您的 HDD 卷。

要检查您的块储存设备的当前预读数值,请使用以下命令:

[ec2-user ~]$ 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,请使用以下命令:

[ec2-user ~]$ sudo blockdev --setra 2048 /dev/<device>

再次运行第一个命令,验证预读取设置现在显示 2048。

仅当您的工作负载包括大型顺序 I/O 时,才使用此设置。如果它主要包含的是小型随机 I/O,则此设置会降低性能。一般来说,如果工作负载主要包括小型随机 I/O,则应考虑使用通用型 SSD (gp2) 卷,而不是 st1sc1

使用现代 Linux 内核

借助对间接描述符的支持,使用现代 Linux 内核。所有 Linux 内核 3.8 及更高版本的内核上具有此支持,以及任何当代 EC2 实例。如果您的平均 I/O 大小达到或接近 44 KiB,则说明您可能是在不支持间接描述符的情况下使用实例或内核。有关根据 Amazon CloudWatch 指标得出平均 I/O 大小的信息,请参阅 I/O 特征和监控

要在 st1sc1卷上实现最大吞吐量,建议您将值 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

重启实例,让此设置生效。

有关更多信息,请参阅配置 GRUB。对于其他 Linux 发行版(尤其是不使用 GRUB 引导加载程序的版本)可能需要采用不同方法来调整内核参数。

有关 EBS I/O 特征的更多信息,请参阅本主题上的 Amazon EBS:为性能而设计 re:Invent 演示文稿。

使用 RAID 0 最大程度利用实例资源

某些实例类型可以实现的 I/O 吞吐量大于可以为单个 EBS 卷配置的量。可以将多个 gp2io1st1sc1 卷一起加入到 RAID 0 配置中,以将可用带宽用于这些实例。有关更多信息,请参阅Linux 上的 RAID 配置

使用 Amazon CloudWatch 跟踪性能

Amazon Web Services 提供了您可以使用 Amazon CloudWatch 来分析和查看的 Amazon EBS 性能指标,以及可以用于监控卷运行状况的状态检查。有关更多信息,请参阅监控您的卷状态

本页内容: