开启FSR自动预热从EBS快照恢复过来的卷

一、背景

在AWS官网,有关从快照恢复后的预热描述如下。

空的 EBS 卷一经创建便能实现其最高性能,而不需要初始化(以前称为预热)。

对于从快照创建的卷,必须先从 Amazon S3 下载存储块并将其写入到卷中,然后才能访问这些块。该预备操作需要一些时间才能完成,并且可能会导致首次访问每个块时的 I/O 操作延迟大大提高。在下载所有块并将其写入到卷后,才会实现卷性能。

这也就意味着,如果是从快照恢复一个EC2,或者是从CloudEndure的快照恢复过来,初始的磁盘性能将不足。由此,需要执行预热才能充分发挥性能。

预热分成手工预热和自动预热。

二、手工预热

手工预热方法如下。
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/ebs-initialize.html

在EC2挂载上新的卷之后,以root身份执行如下命令。

fio --filename=/dev/nvme2n1 --rw=read --bs=128k --iodepth=32 --ioengine=libaio --direct=1 --name=volume-initialize

请替换以上命令中的设备分区名称为真实名称。预热过程可能需要数分钟。预热完成后,即可正常使用。

需要注意的是,手工预热过程,其实是模拟了一次全盘扫描访问,如果恢复起来的磁盘是gp2和gp3这种弹性的磁盘,预热过程会消耗访问积分,导致后续磁盘访问性能达不到预期目标。如果是io1类型磁盘已经分配了几千的IOPS,则不存在此问题。

三、自动预热

自动预热可以采用FSR功能,参考这里。
https://aws.amazon.com/cn/ebs/faqs/#Snapshots

进入EC2界面下的EBS菜单,点击快照管理,找到要恢复的快照。选中快照,从操作下拉框中选择管理快速恢复还原。进入这个页面,选择要生效的可用区。

由于EBS是在可用区内有效,因此只选择EC2所在的一个可用区就可以了。选中后点击提交。

此外,页面会提示由此带来的成本,主要成本相关的信息如下:

  • 快照预热是逐个快照打开的,如果有几十个快照,只打开了一个,则只对一个计费,其他的不生效也计费
  • 一般一个几百GB快照的如果恢复到io1磁盘,分配的数千IOPS,那么他的预热在几分钟就可以完成
  • 根据页面提示,预热计费后最低是收取1小时费用,也就是几元钱

预热自动完成,即可投入生产使用。后续如果不再使用本快照,可以关闭这个快照的预热功能。