XenServer

存储读取缓存

读取缓存可提高虚拟机的磁盘性能,因为在从外部磁盘进行初始读取后,数据会缓存在主机的空闲内存中。当许多虚拟机从单个基础虚拟机克隆时,它能提高性能,因为它大大减少了从磁盘读取的块数。例如,在 Citrix Virtual Desktops 环境的 Machine Creation Services™ (MCS) 环境中。

只要数据从磁盘读取不止一次,就可以看到性能提升,因为它会被缓存到内存中。这种变化在重度 I/O 情况下发生的服务降级中最为明显。例如,在以下情况中:

  • 当大量最终用户在非常短的时间内启动时(启动风暴)
  • 当大量虚拟机被安排同时运行恶意软件扫描时(防病毒风暴)。

如果您拥有适当的许可证类型,读取缓存默认启用。

注意:

存储读取缓存适用于 XenServer® Premium Edition 客户。

启用和禁用读取缓存

对于基于文件的 SR,例如 NFS、EXT3/EXT4、SMB 和 GFS2 SR 类型,读取缓存默认启用。对于所有其他 SR,读取缓存已禁用。

您可以选择在 NFS、EXT3/EXT4 或 SMB SR 上禁用读取缓存。对于 GFS2 SR,读取缓存无法禁用。

要使用 xe CLI 禁用特定 SR 的读取缓存,请运行以下命令:

xe sr-param-set uuid=sr-uuid other-config:o_direct=true
<!--NeedCopy-->

要使用 XenCenter® 禁用特定 SR 的读取缓存,请转到该 SR 的属性对话框。在读取缓存选项卡中,您可以选择启用或禁用读取缓存。

有关详细信息,请参阅更改 SR 属性

限制

  • 读取缓存仅适用于 NFS、EXT3/EXT4、SMB 和 GFS2 SR。它不适用于其他 SR 类型。

  • 读取缓存仅适用于只读 VDI 和 VDI 父级。当虚拟机从“快速克隆”或磁盘快照创建时,会存在这些 VDI。当许多虚拟机从单个“黄金”映像克隆时,可以获得最大的性能改进。

  • 性能改进取决于主机控制域 (dom0) 中可用空闲内存量。增加 dom0 内存量可为读取缓存分配更多内存。有关如何配置 dom0 内存的信息,请参阅更改分配给控制域的内存量

  • 启用内存读取缓存时,缓存未命中会导致 I/O 序列化。这有时可能比禁用读取缓存的开销更大,因为禁用读取缓存时 I/O 可以并行化。为了减少缓存未命中的影响,请增加可用的 dom0 内存量或禁用 SR 的读取缓存。

与 IntelliCache™ 的比较

IntelliCache 和基于内存的读取缓存从某些方面来说是互补的。IntelliCache 不仅在不同的层级进行缓存,而且除了读取之外,它还缓存写入。IntelliCache 将来自网络的读取缓存到本地磁盘。内存中读取缓存将来自网络或磁盘的读取缓存到主机内存中。内存中读取缓存的优势在于,内存仍然比固态硬盘 (SSD) 快一个数量级。在启动风暴和其他高 I/O 情况下的性能会得到改善。

读取缓存和 IntelliCache 可以同时启用。在这种情况下,IntelliCache 将来自网络的读取缓存到本地磁盘。来自该本地磁盘的读取会通过读取缓存缓存在内存中。

设置读取缓存大小

通过为 XenServer 的控制域 (dom0) 提供更多内存,可以优化读取缓存性能。

重要提示:

为实现优化,请在池中的所有主机上单独设置读取缓存大小。对读取缓存大小的任何后续更改也必须在池中的所有主机上设置。

在 XenServer 主机上,打开本地 shell 并以 root 身份登录。

要设置读取缓存的大小,请运行以下命令:

/opt/xensource/libexec/xen-cmdline --set-xen dom0_mem=nnM,max:nnM
<!--NeedCopy-->

将初始值和最大值设置为相同的值。例如,要将 dom0 内存设置为 20,480 MiB:

/opt/xensource/libexec/xen-cmdline --set-xen dom0_mem=20480M,max:20480M
<!--NeedCopy-->

重要提示:

更改读取缓存大小后,请重新启动所有主机。

如何查看当前的 dom0 内存分配?

要查看当前的 dom0 内存设置,请输入:

free -m
<!--NeedCopy-->

free -m 的输出显示了当前的 dom0 内存设置。由于各种开销,该值可能低于预期。下面的示例表显示了 dom0 设置为 2.6 GiB 的主机的输出。

|                     | Total  | Used | Free  | Shared | Buffer/cache | Available |
|---------------------|--------|------|-------|--------|--------------|-----------|
| Mem:                | 2450   | 339  | 1556  | 9      | 554          | 2019      |
| Swap:               | 1023   | 0    | 1023  |        |              |           |
<!--NeedCopy-->

可以使用哪些值范围?

由于 XenServer 控制域 (dom0) 是 64 位,因此可以使用较大的值,例如 32,768 MiB。但是,我们建议您不要将 dom0 内存减少到 1 GiB 以下

XenCenter 显示注意事项

整个主机的内存可以被视为由 Xen® 管理程序、dom0、VM 和可用内存组成。尽管 dom0 和 VM 内存通常是固定大小的,但 Xen 管理程序使用的内存量是可变的。所使用的内存量取决于多种因素。这些因素包括在任何给定时间在主机上运行的 VM 数量以及这些 VM 的配置方式。无法限制 Xen 使用的内存量。限制内存量可能导致 Xen 内存不足,并阻止新 VM 启动,即使主机有可用内存。

要查看分配给主机的内存,请在 XenCenter 中选择主机,然后单击“内存”选项卡。

XenServer 字段显示分配给 dom0 Xen 内存的总和。因此,显示的内存量可能高于管理员指定的值。即使管理员为 dom0 设置了固定大小,内存大小在启动和停止 VM 时也可能有所不同。

存储读取缓存