优化本地 SSD 性能

各种磁盘类型的性能图表中描述了本地 SSD 分区可实现的性能上限。如需优化应用和虚拟机实例以达到这些速度,请使用以下最佳做法:

对本地 SSD 使用客机环境优化功能

默认情况下,大多数由 Compute Engine 提供的 Linux 映像将自动运行一个优化脚本,该脚本会对实例进行配置以实现本地 SSD 的最高性能。该脚本会启用某些队列 sysfs 设置,这些设置可增强机器的整体性能,并屏蔽对特定虚拟 CPU (vCPU) 的中断请求 (IRQ)。此脚本仅优化 Compute Engine 本地 SSD 分区的性能。

Ubuntu、SLES 和其他较旧的映像可能未配置为包含此性能优化功能。如果您使用的是这些映像中的任何一个或 v20141218 之前的映像,则可以安装客机环境来启用这些优化功能。

为 NVMe 或 SCSI 接口选择最佳映像

本地 SSD 可公开 NVMe 或 SCSI 接口,请根据您使用的操作系统选择最适合的接口。为您的本地 SSD 分区选择一个最适合您的启动磁盘映像的接口。如果您的实例使用 SCSI 接口连接到本地 SSD,则可以在客机操作系统上启用多队列 SCSI,以通过 SCSI 接口实现最佳性能。

在具有自定义映像和本地 SSD 的实例上启用多队列 SCSI

某些公共映像支持多队列 SCSI。如果您要求导入到项目中的自定义映像具备多队列 SCSI 功能,则必须自行启用该功能。只有包含内核版本 3.19 或更高版本的导入的 Linux 映像才能使用多队列 SCSI。

如需在某个自定义映像上启用多队列 SCSI,请在启用了 VIRTIO_SCSI_MULTIQUEUE 客机操作系统功能的情况下导入该映像,并向 GRUB 配置文件中添加一个条目:

CentOS

仅适用于 CentOS7。

  1. 使用 API 导入您的自定义映像,并添加一个 type 值为 VIRTIO_SCSI_MULTIQUEUEguestOsFeatures 项。

  2. 使用您的自定义映像创建一个实例,并附加一个或多个本地 SSD

  3. 通过 SSH 连接到您的实例

  4. 查看 /sys/module/scsi_mod/parameters/use_blk_mq 文件的值

    $ cat /sys/module/scsi_mod/parameters/use_blk_mq
    

    如果此文件的值为 Y,则说明在导入的映像上已启用多队列 SCSI。如果此文件的值为 N,请在 GRUB 配置文件内的 GRUB_CMDLINE_LINUX 条目中添加 scsi_mod.use_blk_mq=Y,并重启系统。

    1. 在文本编辑器中打开 /etc/default/grub GRUB 配置文件。

      $ sudo vi /etc/default/grub
      
    2. scsi_mod.use_blk_mq=Y 添加到 GRUB_CMDLINE_LINUX 条目。

      GRUB_CMDLINE_LINUX=" vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16 scsi_mod.use_blk_mq=Y"
      
    3. 保存配置文件。

    4. 运行 grub2-mkconfig 命令即可重新生成 GRUB 文件并完成配置。

      $ sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      
    5. 重新启动实例。

      $ sudo reboot
      

Ubuntu

  1. 使用 Compute Engine API 导入您的自定义映像,并添加一个 type 值为 VIRTIO_SCSI_MULTIQUEUEguestOsFeatures 项。

  2. 使用您的自定义映像创建一个实例,并使用 SCSI 接口附加一个或多个本地 SSD

  3. 通过 SSH 连接到您的实例

  4. 查看 /sys/module/scsi_mod/parameters/use_blk_mq 文件的值。

    $ cat /sys/module/scsi_mod/parameters/use_blk_mq
    

    如果此文件的值为 Y,则说明在导入的映像上已启用多队列 SCSI。如果此文件的值为 N,请在 GRUB 配置文件内的 GRUB_CMDLINE_LINUX 条目中添加 scsi_mod.use_blk_mq=Y,并重启系统。

    1. 在文本编辑器中打开 sudo nano /etc/default/grub GRUB 配置文件。

      $ sudo nano /etc/default/grub
      
    2. scsi_mod.use_blk_mq=Y 添加到 GRUB_CMDLINE_LINUX 条目。

      GRUB_CMDLINE_LINUX="scsi_mod.use_blk_mq=Y"
      
    3. 保存配置文件。

    4. 运行 update-grub 命令即可重新生成 GRUB 文件并完成配置。

      $ sudo update-grub
      
    5. 重新启动实例。

      $ sudo reboot
      

停用写入缓存刷新 (cache flushing)

文件系统、数据库和其他应用会使用缓存刷新功能来确保在各个检查点将数据提交到持久性存储系统中。对于大多数存储设备来说,这种默认操作是有意义的。但是,本地 SSD 上的写入缓存刷新速度相当缓慢。您可以通过在某些应用中停用自动刷新命令或在文件系统级别停用刷新选项来提高这些应用的写入性能。

无论您为文件系统和应用设置了什么刷新命令,本地 SSD 一律会在两秒钟内刷新已缓存的写入内容,因此临时硬件故障最多只会导致您丢失两秒钟的缓存写入内容。无论是否已刷新数据,永久性的硬件故障仍可能导致设备上的所有数据丢失,因此您仍应将关键数据备份到永久性磁盘Cloud Storage 存储分区中。

如需在 ext4 文件系统上停用写入缓存刷新功能,请在您的装载选项或 /etc/fstab 条目中添加 nobarrier。例如:

$ sudo mount -o discard,defaults,nobarrier /dev/[LOCAL_SSD_ID] /mnt/disks/[MNT_DIR]

其中:[LOCAL_SSD_ID] 是您要装载的本地 SSD 的设备 ID,[MNT_DIR] 是要装载到的目录。

后续步骤