针对非常大的文件调整 LVM 缓存

针对非常大的文件调整 LVM 缓存

我的系统有 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 重新初始化映像。但我想这可能不是你的问题。

相关内容