我的系统有 2 个部分 md 镜像的物理 4 TB 硬盘,以及一个非常快的 512GB ssd M.2 设备,用于存储根文件系统并在磁盘上缓存关键的较大文件系统。一种特定的文件系统存储VMWare Workstation虚拟机磁盘文件。这些文件可能非常大(10-70GB)。我启动的最常见的 VM 是 Windows 10 映像,其中包含 78GB 基础映像和另一个 6GB 快照文件。
我正在寻找 LVM 缓存可调参数,以允许该文件系统和这些文件(尤其是这些文件)更好地执行。
相比之下,同一个 M.2 SSD 上也有一个真正的 Win 10 映像,直接启动该映像从 Grub 选择到 Windows 登录屏幕大约需要 8 秒。相比之下,从VMWare启动选择到登录大约需要28秒;比关闭缓存好不了多少(尽管我最近没有做过该测试,所以我没有可引用的数字)。
Win 10 VM总目录为82GB,这是我的lvm的一些细节(重点关注最后的vmCache)
lvs -a -o+devices
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
games cache Cwi-aoC--- 200.00g [gamesDataCache] 11.37 16.05 0.00 games_corig(0)
[gamesDataCache] cache Cwi---C--- 10.00g 11.37 16.05 0.00 gamesDataCache_cdata(0)
[gamesDataCache_cdata] cache Cwi-ao---- 10.00g /dev/nvme0n1p6(23015)
[gamesDataCache_cmeta] cache ewi-ao---- 12.00m /dev/nvme0n1p6(23012)
[games_corig] cache owi-aoC--- 200.00g /dev/md126(0)
home cache Cwi-aoC--- 300.00g [homeDataCache] 100.00 16.05 0.01 home_corig(0)
[homeDataCache] cache Cwi---C--- 10.00g 100.00 16.05 0.01 homeDataCache_cdata(0)
[homeDataCache_cdata] cache Cwi-ao---- 10.00g /dev/nvme0n1p6(3)
[homeDataCache_cmeta] cache ewi-ao---- 12.00m /dev/nvme0n1p6(0)
[home_corig] cache owi-aoC--- 300.00g /dev/md127(128000)
[lvol0_pmspare] cache ewi------- 79.90g /dev/md127(204800)
vm cache Cwi-aoC--- 500.00g [vmCache] 100.00 19.01 0.00 vm_corig(0)
[vmCache] cache Cwi---C--- 79.80g 100.00 19.01 0.00 vmCache_cdata(0)
[vmCache_cdata] cache Cwi-ao---- 79.80g /dev/nvme0n1p6(2563)
[vmCache_cmeta] cache ewi-ao---- 80.00m /dev/nvme0n1p6(22992)
[vm_corig] cache owi-aoC--- 500.00g /dev/md127(0)
root0 fedora -wi-ao---- 39.00g /dev/nvme0n1p5(1)
缓存大小几乎为 80GB,而这个 Win 10 是我启动的唯一 VM,因此我希望它能够缓存几乎整个映像。数据使用率为100%,但性能却远低于我的预期。
我可以根据要求提供任何更详细的 LVM 配置,但假设现在大多数值都是默认值。
有什么建议么?
谢谢,
布莱恩
答案1
您使用什么样的系统(操作系统+版本+什么虚拟化套件/包)?
我发现 CentOS 6.8 上的 LVM 缓存存在大缓存问题。如果我使用 100GB SSD 并将其与 2 TB HDD 结合使用(软件 raid SSD 和 HDD),我发现速度没有提高! SATA 控制器
iostat -m -x 2
显示 SSD SATA 端口 100% 繁忙,但仅写入约。 120MB/秒(与HDD速度相同)。当我将缓存大小缩小到 10GB 时,我认为情况会好很多!顺便说一句,两者都具有相同的块大小:
lvconvert --type cache-pool --chunksize 960 --cachemode writeback --poolmetadata ${VGBASE}/cachemeta ${VGBASE}/cachedata
dmesg
还报告(当有 100G 缓存时)
device-mapper:缓存:您已经创建了一个具有许多单独缓存块的缓存设备(1670400)
调整块大小可能会对您有所帮助,但设置此值似乎存在问题。
块大小必须介于 64 (32KB) 和 2097152 (1GB) 之间,并且是 64 (32KB) 的倍数。 https://www.kernel.org/doc/Documentation/device-mapper/cache.txt
遵循这些规则,您实际上可以更改块大小,但是对于很多块大小,刷新回磁盘不起作用!我建议您尝试取消缓存缓存卷,看看是否不会陷入这样的无限循环:
X 块仍然必须被刷新(这种情况永远都会发生!)
并用于iostat
调查 SSD 是否可以快速写入,而 HDD 之后是否实际获取写入(请参阅发布时的 Cpy%Sync 列lvs -a
)。
因此,请确保您可以删除它(刷新)并确保它的行为方式应通过iostat
.
当然,如果缓存已满……速度将下降到 HDD 的速度,因为它需要刷新才能在那里写入新内容。
但到目前为止我的结论是它很难调优,可能 CentOS 7 中已修复的一些错误导致 CentOS 6.8 上的调优变得困难。
PS 为了让你的 Windows VM 快速启动,它应该位于 SSD 上。所以在这个例子中它可能不起作用;您同时运行了数十个不适合缓存的操作系统映像。重新启动硬件节点时,完整的操作系统映像将不再(仅部分)位于缓存中,因为启动所需的部分很长时间没有被触及。重新启动后,必须通过 HDD 重新初始化映像。但我想这可能不是你的问题。