XenServer

存储读缓存

读取缓存可以改进 VM 的磁盘性能,因为首次从外部磁盘读取后,数据将缓存在主机的可用内存中。在单一基础 VM 上克隆多个 VM 的情况下,读取缓存可以提高性能,因为读取缓存将明显减少从磁盘读取的块数量。例如,在 Citrix Virtual Desktops 环境 Machine Creation Services (MCS) 环境中。

无论何时从磁盘多次读取数据,都可以看到这种性能改进,因为数据缓存在内存中。此变更是在繁重 I/O 情况下发生的最明显的服务降级。例如,在以下情况下:

  • 大量最终用户在非常短的时间内启动时(启动高峰)
  • 安排大量 VM 同时运行恶意软件扫描时(防病毒高峰)。

当您具有恰当的许可证类型时,默认启用读取缓存。

注意:

存储读取缓存对 XenServer Premium Edition 客户可用。

启用和禁用读取缓存

对于基于文件的 SR,例如 NFS、EXT3/EXT4、SMB 和 GFS2 SRR 类型,读取缓存默认处于启用状态。读取缓存对所有其他 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 存在于从“快速克隆”或磁盘快照创建 VM 的位置。从单一“黄金”映像克隆 VM 时,将看到最显著的性能改进。

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

  • 开启内存读取缓存时,缓存未命中会导致 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 内存设置为 20480 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 位,因此可以使用较大的值,例如 32768 MiB。但是,我们建议您不要将 dom0 内存减少到 1 GiB 以下

XenCenter 显示说明

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

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

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

存储读缓存