Eu tenho um volume LVM de 200 GB que é apoiado por um SSD de 60 GB usando lvmcache(7)
, no kernel do Linux versão 4.7.2. Eu tenho experimentado com fstrim
, e parece-me que os descartes não estão funcionando como deveriam (ou não):
$ 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
Eu esperava que, como o espaço realmente em uso fosse menor que o tamanho do cache, usar fstrim
permitiria ao lvmcache se livrar de blocos de dados em cache não usados e também TRIM o SSD subjacente. No entanto, isso não parece acontecer.
O que eu estou esperando ainda é suportado na versão do kernel que eu tenho? Ler o código da DM e da camada de bloco não é trivial, então prefiro não descobrir isso da maneira mais difícil, se possível.
Se for suportado, há algo errado com minha configuração do LVM? Eu acredito que o comportamento padrão do LVM w.r.t. descarte é para passá-los para o dispositivo subjacente, mas talvez haja algo que eu estou faltando?
Tags lvm cache linux linux-kernel