Configuração básica do dm-cache

4

Eu principalmente achei bcache para me suite melhor, mas devido a uma discussão hoje vim para testar dm-cache. Eu não encontrei um ótimo documento de entrada como fazê-lo, então eu pensei que poderia documentar e compartilhar aqui - e com isso torná-lo "pesquisável".

Então, como definir o cache dm no Ubuntu?

    
por Christian Ehrhardt 09.11.2016 / 19:25

1 resposta

5

Eu estava começando essa informação em tire o máximo proveito de seu nvme , mas também man lvmcache é um bom recurso.

Eu tenho (desculpe) não mais discos ao redor:

/dev/sda2 (931G slow)
/dev//dev/nvme0n1 (372.6G fast)

Configuração básica:

$ sudo pvcreate /dev/sda2
  Physical volume "/dev/sda2" successfully created.
$ sudo pvcreate /dev/nvme0n1
  Physical volume "/dev/nvme0n1" successfully created.
$ sudo vgcreate cache /dev/sda2 /dev/nvme0n1
  Volume group "cache" successfully created
$ sudo lvcreate -L 200G -n origin_device cache /dev/sda2
  Logical volume "origin_device" created
$ sudo lvcreate -L 60G -n cache_block cache /dev/nvme0n1
  Logical volume "cache_block" created.
$ sudo lvcreate -L 2G -n cache_meta cache /dev/nvme0n1
  Logical volume "cache_meta" created.
$ sudo lvconvert --type cache-pool /dev/cache/cache_block --poolmetadata /dev/cache/cache_meta
  WARNING: Converting logical volume cache/cache_block and cache/cache_meta to pool's data and metadata volumes.
  THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert cache/cache_block and cache/cache_meta? [y/n]: y
  Converted cache/cache_block to cache pool.
$ sudo lvconvert --type cache /dev/cache/origin_device --cachepool /dev/cache/cache_block
  Logical volume cache/origin_device is now cached.

Depois disso, você pode usar esse dispositivo "como de costume". Eu também criei um dispositivo não armazenado em cache como referência para um teste básico:

$ sudo lvcreate -L 200G -n origin_device_reference cache /dev/sda2
  Logical volume "origin_device_reference" created.
$ sudo mkfs -t xfs /dev/cache/origin_device
$ sudo mkfs -t xfs /dev/cache/origin_device_reference

e montá-lo

$ sudo mkdir /mnt/lv-xfs
$ sudo mkdir /mnt/lv-xfs-cached
$ sudo mount /dev/cache/origin_device_reference /mnt/lv-xfs
$ sudo mount /dev/cache/origin_device /mnt/lv-xfs-cached

Depois disso, minha configuração ficou assim:

$ lsblk (filtered of other disks)
NAME                              MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                                 8:0    0 931.5G  0 disk 
|-sda2                              8:2    0   931G  0 part 
| |-cache-origin_device_reference 252:4    0   200G  0 lvm  /mnt/lv-xfs
| '-cache-origin_device_corig     252:3    0   200G  0 lvm  
|   '-cache-origin_device         252:0    0   200G  0 lvm  /mnt/lv-xfs-cached
nvme0n1                           259:0    0 372.6G  0 disk 
|-cache-cache_block_cdata         252:1    0    60G  0 lvm  
| '-cache-origin_device           252:0    0   200G  0 lvm  /mnt/lv-xfs-cached
'-cache-cache_block_cmeta         252:2    0     2G  0 lvm  
  '-cache-origin_device           252:0    0   200G  0 lvm  /mnt/lv-xfs-cached

$ sudo dmsetup table
cache-cache_block_cdata: 0 125829120 linear 259:0 2048
cache-origin_device_reference: 0 419430400 linear 8:2 423626752
cache-cache_block_cmeta: 0 4194304 linear 259:0 125831168
cache-origin_device: 0 419430400 cache 252:2 252:1 252:3 128 1 writethrough smq 0
cache-origin_device_corig: 0 419430400 linear 8:2 2048

Por favor, esteja ciente de que o dm-cache evoluiu muito. Ainda há muitos guias que recomendam ajustar o cache com "mensagem dmsetup ...", mas tudo isso faz parte da antiga política "mq". Consulte Kernel Doc . Atualmente, o multicamato estocástico (smq) é o padrão, considerado superior e vem sem nenhum botão de ajuste. Isso foi tão longe quanto cair "mq" desde o Kernel 4.6 e make é um alias para a política smq.

Então, muito benchmarking básico com dois crawlers de disco sequenciais de sincronização lenta e dois aio hot spots aleatórios (e nem todos os rastreadores que se encaixam no cache, mas os hotspots funcionam com facilidade). Existem mais detalhes nos resultados se você quiser ver. Os resultados são muito melhores do que sem cache, mas o testcase não foi sofisticado o suficiente para verificar isso em detalhes.

Uncached
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.10     0.20  259.95  126.45  1840.00   599.32    12.63    65.96  170.43  126.56  260.62   2.59 100.00
dm-4              0.00     0.00  260.05  126.65  1840.00   599.32    12.62    65.99  170.37  126.53  260.39   2.59 100.00
   READ: io=1109.4MB, aggrb=1891KB/s
  WRITE: io=370212KB, aggrb=616KB/s


Cached
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.85    1.75  395.75   112.00  1679.40     9.01    33.18   83.44   82.97   83.44   2.52 100.00
nvme0n1         755.05     0.00 159339.95    0.25 873790.40    16.00    10.97    25.14    0.16    0.16    0.00   0.01 100.12
dm-0              0.00     0.00 156881.90  395.95 873903.00  1679.40    11.13    58.35    0.37    0.16   84.19   0.01 100.12
dm-1              0.00     0.00 160095.25    0.25 873791.00    16.00    10.92    25.41    0.16    0.16    0.00   0.01 100.10
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
dm-3              0.00     0.00    1.75  396.60   112.00  1679.40     8.99    34.50   86.51   82.97   86.52   2.51 100.00
   READ: io=415116MB, aggrb=708356KB/s
  WRITE: io=1004.8MB, aggrb=1714KB/s

Isso não deve se tornar uma discussão sobre bcache, dm-cache, ... Como eu disse no começo, eu geralmente prefiro bcache também, mas esse não é o ponto. Mas se o OTOH tiver alguma recomendação para adicionar o dm-cache, sinta-se à vontade para usar a seção de comentários.

    
por Christian Ehrhardt 09.11.2016 / 19:25