优化性能

本页面详细介绍了如何优化 Google Cloud NetApp Volumes 性能。

准备工作

在更改音量以优化效果之前,请先查看效果注意事项

调整音量设置

您可以通过调整以下音量设置来优化性能:

  • 增加卷容量:您可以增加 Premium、Extreme 或 Standard 服务等级卷的容量,以提高可实现的最大卷吞吐量。对于服务等级为 Flex 的卷,请改为增加存储池容量。

  • 升级服务等级:您可以将 Premium 服务等级的卷升级为 Extreme 服务等级,以提高吞吐量。我们建议您将该卷分配给具有不同服务级别的其他存储池。

  • 使用手动 QoS 池分配更高的吞吐量:您可以降低吞吐量要求较低的较大卷的分配吞吐量,并提高需要更高性能的较小卷的吞吐量,最高可达到可用的池吞吐量。

增加卷容量和升级服务级别都不会中断卷上正在进行的 I/O 工作负载,也不会以任何方式影响对卷的访问。

调整客户端

您可以在客户端上调整以下设置,以提升性能:

  • 将客户端与服务器放置在同一位置:延迟时间结果直接受客户端的功能和位置影响。为获得最佳效果,请将客户端放置在与卷相同的区域或尽可能靠近卷的区域。通过测试每个可用区中客户端的延迟时间来测试可用区的影响,并使用延迟时间最短的可用区。

  • 配置 Compute Engine 网络带宽:Compute Engine 虚拟机的网络功能取决于所用的实例类型。通常,实例越大,可实现的网络吞吐量就越高。建议您选择具有适当网络带宽能力的客户端虚拟机,选择 Google 虚拟 NIC (gVNIC) 网络接口,并启用 Tier_1 性能。如需了解详情,请参阅 Compute Engine 文档中的网络带宽

  • 打开多个 TCP 会话:如果您的应用需要高吞吐量,您最终可能会使正常 NFS 和 SMB 会话所基于的单个传输控制协议 (TCP) 会话达到饱和状态。对于此类情况,请增加 NFS 和 SMB 连接使用的 TCP 会话数。

    根据客户端类型,使用以下某个标签页调整客户端:

    Linux

    传统上,NFS 客户端使用单个 TCP 会话来处理共享存储端点的所有 NFS 装载文件系统。使用 nconnect 装载选项可将支持的 TCP 会话数增加到最多 16 个。

    我们建议您遵循以下最佳实践来调整 Linux 客户端类型,以便充分利用 nconnect

    • 增加使用 nconnect 的 TCP 会话数:每个额外的 TCP 会话都会增加一个队列,用于处理 128 个未完成的请求,从而提高潜在的并发性。

    • 设置 sunrpc.max_tcp_slot_table_entries 参数sunrpc.max_tcp_slot_table_entries 是连接级调整参数,您可以修改该参数来控制性能。我们建议将 sunrpc.max_tpc_slot_table_enteries 设置为每个连接 128 个请求,并且单个项目中连接到 NetApp Volumes 的所有 NFS 客户端的槽总数不超过 10,000 个。如需设置 sunrpc.max_tcp_slot_table_entries 参数,请将该参数添加到 /etc/sysctl.conf 文件中,然后使用 sysctl -p 命令重新加载参数文件。

    • 将每个会话的最大支持值调整为 180:与 NFSv3 不同,NFSv4.1 客户端在会话中定义客户端与服务器之间的关系。虽然 NetApp Volumes 支持每个连接最多 128 个未完成的 NFSv3 请求,但 NFSv4.1 仅限于每个会话 180 个未完成的请求。Linux NFSv4.1 客户端默认每个会话使用 64 max_session_slots,但您可以根据需要调整此值。建议将每个会话支持的最大值更改为 180。

      如需调整 max_session_slots,请在 /etc/modprobe.d 下创建配置文件。确保没有引号 (" ") 出现在内嵌代码中。否则,该选项不会生效。

      $ echo "options nfs max_session_slots=180" > /etc/modprobe/d/nfsclient/conf
      $ reboot
      
      Use the systool -v -m nfs command to see the current maximum in use
      by the client. For the command to work, at least one NFSv4.1 mount
      must be in place.
      
      $ systool -v -v nfs
      {
      Module = "nfs"
      
      Parameters:
      
      Max_session_slots = "63" <-
      
      }
      

    以下 NFS nconnect 对比图展示了使用 nconnect 配置对 NFS 工作负载的影响。此信息是使用 Fio 在以下设置下捕获的:

    • 100% 读取工作负载

    • 针对单个卷的 8 KiB 块大小

    • n2-standard-32 使用 Red Hat 9 操作系统的虚拟机

    • 6 TiB 工作集

    使用 16 的 nconnect 值可使性能提高 5 倍。

    使用单个 Red Hat 9 虚拟机(块大小为 8 KiB)进行的 NFS nconnect 比较。

    Windows

    对于基于 Windows 的客户端,客户端可以使用 SMB 多通道和接收方缩放 (RSS) 来打开多个 TCP 连接。为了实现此配置,您的虚拟机必须具有支持 RSS 的已分配网络适配器。我们建议将 RSS 设置为 4 或 8 个值,不过,任何大于 1 的值都应能提高吞吐量。

    下图显示了使用 RSS 配置对 SMB 工作负载可能产生的影响。此信息是使用 Fio 捕获的,采用的设置如下:

    • 100% 读取工作负载

    • 针对单个卷的 8 KiB 块大小

    • 运行 Windows 2022 操作系统的单个 n2-standard-32 虚拟机

    • 6 TiB 工作集

    运行了 8 个作业,每次测试执行之间仅更改 SMB 客户端 RSS 选项。与使用 1 的 RSS 值相比,使用 4、8 和 16 的 RSS 值可将性能提高一倍。每个 RSS 实例运行了 9 次,numjobs 形参为 8。每次执行时,iodepth 参数都会增加 5,直到达到最大吞吐量。

    单个 Windows 2022 虚拟机的 SMB RSS 比较(块大小为 8 KiB)

手动 QoS

借助 NetApp Volumes 中的手动服务质量 (QoS),您可以调整卷性能以满足工作负载要求并控制存储费用。

手动 QoS 具有以下优势:

  • 优化费用:在存储池容量范围内扩缩卷性能,以优化云费用。

  • 即时调整吞吐量:调整卷吞吐量,而无需停机。

  • 降低灾难恢复费用:降低复制卷的 QoS,以减少目标池的灾难恢复费用。

  • 增强了克隆或缓存的性能:提高了分配大小较小的克隆或缓存卷的性能。

  • 灵活的工作负载管理:使用较大的存储池作为多个工作负载的容器,并根据需要调整每个卷的吞吐量。

注意事项

  • 您可以使用 Google Cloud CLI、NetApp Volumes API 或 Terraform 管理手动 QoS。不支持使用 Google Cloud 控制台。

  • 手动 QoS 适用于 Standard、Premium 和 Extreme 服务等级,但不适用于 Flex 服务等级。

设置手动 QoS 限制

对于手动 QoS 存储池中的卷,您可以单独设置吞吐量和容量。手动 QoS 池中所有卷的总吞吐量受池的总吞吐量限制。存储池吞吐量取决于其分配的容量和服务等级。例如,一个 40 TiB 的 Premium 池可以实现 2,560 MiBps 的最大吞吐量(每 TiB 64 MiBps),而一个 200 TiB 的 Extreme 池可以支持总吞吐量为 25,600 MiBps 的卷。

设置手动 QoS 池后,您可以为其中的每个卷设置所需的吞吐量限制。单个卷的最大吞吐量上限为 4.5 GiBps,大容量卷的最大吞吐量上限为 30 GiBps。

池和卷命令或 API 会显示池的可用吞吐量值和分配吞吐量值,以帮助您管理总吞吐量。如需创建手动 QoS 池并定义卷吞吐量,请参阅创建存储池创建卷

创建存储池

gcloud

使用手动 QoS 创建存储池:

    gcloud netapp storage-pools create POOL_NAME \
       --project=PROJECT_ID \
       --location=LOCATION \
       --capacity=CAPACITY \
       --service-level=SERVICE_LEVEL \
       --qos-type=QOS_TYPE \
       --network=name=NETWORK_NAME

替换以下信息:

  • POOL_NAME:要创建的池的名称。您的池名称在每个位置都必须是唯一的。

  • PROJECT_ID:您要在其中创建存储池的项目的名称。

  • LOCATION:要创建的池的位置。

  • CAPACITY:相应池的容量(以 GiB 为单位)。

  • SERVICE_LEVEL:存储池的服务等级:Standard、Premium 或 Extreme。

  • QOS_TYPE:存储池的 QoS 类型:自动或手动。

  • NETWORK_NAME:VPC 的名称。

修改存储池

gcloud

修改现有自动 QoS 存储池以使用手动 QoS:

    gcloud netapp storage-pools update POOL_NAME \
       --project=PROJECT_ID \
       --location=LOCATION \
       --qos-type=QOS_TYPE

替换以下信息:

  • POOL_NAME:您要更新的池的名称。

  • PROJECT_ID:项目的名称。

  • LOCATION:池的位置。

  • QOS_TYPE:存储池的更新后 QoS 类型。仅支持手动配置。

创建卷

gcloud

使用以下命令创建具有指定手动 QoS 吞吐量限制的卷:

gcloud netapp volumes create VOLUME_NAME \
  --project=PROJECT_ID \
  --location=LOCATION \
  --storage-pool=STORAGE_POOL \
  --capacity=CAPACITY \
  --protocols=PROTOCOLS \
  --share-name=SHARE_NAME \
  --throughput-mibps=THROUGHPUT_MIBPS

替换以下信息:

  • VOLUME_NAME:卷的名称。此名称在每个位置中必须是唯一的。

  • PROJECT_ID:要在其中创建卷的项目的名称。

  • LOCATION:卷的位置。

  • STORAGE_POOL:要在其中创建卷的存储池。

  • CAPACITY:卷的容量。它定义了 NAS 客户端看到的容量。

  • PROTOCOLS:选择导出卷时使用的 NAS 协议。有效选项包括 NFSv3、NFSv4、SMB 以及以下组合:

    • nfsv3,nfsv4
    • nfsv3,smb
    • nfsv4,smb

    根据您选择的协议类型,我们建议您添加特定于协议的参数,例如 export-policysmb-settings

  • SHARE_NAME:卷的 NFS 导出路径或 SMB 共享名称。

  • THROUGHPUT_MIBPS:卷的吞吐量限制(以 MiBps 为单位)。

如需详细了解其他可选标志,请参阅 Google Cloud SDK 关于创建卷的文档

后续步骤

了解存储池