存储读取缓存

Last published : Oct 07, 2026
读取缓存可提高虚拟机的磁盘性能,因为在从外部磁盘进行初始读取后,数据会缓存在主机的空闲内存中。当许多虚拟机从单个基础虚拟机克隆时,它能提高性能,因为它显著减少了从磁盘读取的块数量。例如,在 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
要通过使用 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
将初始值和最大值都设置为相同的值。例如,要将 dom0 内存设置为 20,480 MiB:
/opt/xensource/libexec/xen-cmdline --set-xen dom0_mem=20480M,max:20480M
重要提示:
更改读取缓存大小后,请重新启动所有主机。

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

要查看当前的 dom0 内存设置,请输入:
free -m
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  |        |              |           |

可以使用哪些值范围?

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

XenCenter 显示注意事项

整个主机的内存可以视为由 Xen® 管理程序、dom0、虚拟机和空闲内存组成。尽管 dom0 和虚拟机内存通常是固定大小的,但 Xen 管理程序使用的内存量是可变的。使用的内存量取决于多种因素。这些因素包括在任何给定时间在主机上运行的虚拟机数量以及这些虚拟机的配置方式。无法限制 Xen 使用的内存量。限制内存量可能导致 Xen 内存不足,并阻止新虚拟机启动,即使主机有空闲内存也是如此。
要查看分配给主机的内存,请在 XenCenter 中选择主机,然后单击“内存”选项卡。
XenServer 字段显示分配给 dom0 和 Xen 内存的总和。因此,显示的内存量可能高于管理员指定的值。即使管理员为 dom0 设置了固定大小,内存大小在启动和停止虚拟机时也可能有所不同。