lvmcache/dm-cache 并在 Linux 内核 4.7.x 上丢弃

lvmcache/dm-cache 并在 Linux 内核 4.7.x 上丢弃

我有一个 200GB LVM 卷,由 60GB SSD 支持,使用lvmcache(7),在 Linux 内核版本 4.7.2 上。我一直在尝试fstrim,在我看来,丢弃没有按应有的方式(或根本没有)工作:

$ df /dev/mapper/vg0-test
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg0-test  199G   46G  143G  25% /media/test
# lsblk -D /dev/mapper/vg0-test
NAME     DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
vg0-test        0       16M      16G         0
# fstrim -v  /media/test
/media/test: 132.4 GiB (142170128384 bytes) trimmed
# lvs -o+devices,cache_total_blocks,cache_used_blocks,cache_dirty_blocks,cache_read_hits,cache_read_misses,cache_write_hits,cache_write_misses,segtype,discards
  LV      VG  Attr       LSize   Pool            Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices          CacheTotalBlocks CacheUsedBlocks  CacheDirtyBlocks CacheReadHits    CacheReadMisses  CacheWriteHits   CacheWriteMisses Type  Discards
  test    vg0 Cwc-aoC--- 200.00g [test-cache]           100.00 23.83           0.00             test_corig(0)              983040           983040               39         44554204          5209836         79687783          2798870 cache         

我希望,由于实际使用的空间小于缓存的大小,因此使用fstrimlvmcache可以摆脱未使用的缓存数据块并修剪底层SSD。但这似乎并没有发生。

  1. 我所拥有的内核版本是否支持我所期望的功能?读取 DM 和块层代码并不简单,所以如果可能的话,我宁愿不要以困难的方式解决这个问题。

  2. 如果支持,我的 LVM 设置是否有问题?我相信默认的 LVM 行为 wrt 丢弃是将它们传递到底层设备,但也许我遗漏了一些东西?

相关内容