bcache não funciona como esperado com ramdisk como dispositivo de cache

bcache não funciona como esperado com ramdisk como dispositivo de cache

Eu estava testando o bcache, mas não tenho um SSD, então queria usar a memória livre como substituto. Como o ramdisk está listado /proc/devicescomo dispositivo de bloco, presumi que funcionaria bem, mas com o teste simples abaixo não consigo fazê-lo funcionar.

Isso está no Ubuntu 15.10 com o kernel 4.5 mais recente instalado e estou usando os /dev/ramdispositivos padrão como substituto do SSD.

losetup -f
dd if=/dev/zero of=/tmp/bcache_origin bs=1M count=200
losetup /dev/loop2 /tmp/bcache_origin 

make-bcache -B /dev/loop2 -C /dev/ram9 

Nenhum erro ou saída foi fornecida do make-bcache. Neste ponto, espero que o novo dispositivo bcache esteja listado nos caminhos abaixo por UUID ou nome, mas não há nada.

ls -al /sys/fs/bcache/
ls -al /sys/block/bcache*

Aqui estão os resultados decache-super-show

para esconderijo

bcache-super-show /dev/ram9

sb.magic                ok
sb.first_sector         8 [match]
sb.csum                 53EDD9C169F73E1B [match]
sb.version              0 [cache device]

dev.label               (empty)
dev.uuid                2189aa3b-67e7-4296-bb25-6b5ba886befa
dev.sectors_per_block   1
dev.sectors_per_bucket  1024
dev.cache.first_sector  1024
dev.cache.cache_sectors 130048
dev.cache.total_sectors 131072
dev.cache.ordered       no
dev.cache.discard       no
dev.cache.pos           0
dev.cache.replacement   0 [lru]

cset.uuid               0a6b3824-72c1-489e-9d96-d976cb49e8a9

e origem

bcache-super-show /dev/loop2

sb.magic                ok
sb.first_sector         8 [match]
sb.csum                 ECBC84E42E6F52B9 [match]
sb.version              1 [backing device]

dev.label               (empty)
dev.uuid                aff690a4-7ee1-4b62-85cc-ad41c775d7d8
dev.sectors_per_block   1
dev.sectors_per_bucket  1024
dev.data.first_sector   16
dev.data.cache_mode     0 [writethrough]
dev.data.cache_state    0 [detached]

cset.uuid               0a6b3824-72c1-489e-9d96-d976cb49e8a9

Também tentei usar dispositivos de loop para ambos, mas falhou ainda mais. A execução do comando abaixo resulta em kernel BUGum despejo desagradável no dmesg.

losetup -f
dd if=/dev/zero of=/tmp/bcache_data bs=1M count=200
dd if=/dev/zero of=/tmp/bcache_cache bs=1M count=200

losetup /dev/loop5 /tmp/bcache_data
losetup /dev/loop6 /tmp/bcache_cache
make-bcache -B /dev/loop5 -C /dev/loop6
ll /sys/fs/bcache/

Alguém conseguiu que um ramdisk funcionasse como dispositivo de cache com bcache? Sem qualquer tipo de stdout/err para indicar onde está falhando, não tenho certeza se esta é minha configuração incorreta ou um bug.

Obrigado FLo

Responder1

alguns dispositivos precisam ser registrados para serem usados

depois de fazer os dispositivos de cache com

# make-bcache -B /dev/loop2 -C /dev/ram9 

você precisa registrar ambos (pelo menos o ramdisk, dispositivos de loop e discos rígidos parecem registrar-se automaticamente na maioria das vezes) com

# echo /dev/ram9 >/sys/fs/bcache/register

a entrada uuid em /sys/fs/bcache deve então aparecer e o dispositivo deve ser anexado automaticamente como visível em

# cat /sys/block/bcache0/bcache/state 
clean

se você fizer cache do cache e do dispositivo de backup separadamente com

# make-bcache -B /dev/loop2
# make-bcache -C /dev/ram9

este não é o caso e mesmo depois de registrar o disco RAM, ele dirá

# cat /sys/block/bcache0/bcache/state 
no-cache

embora a entrada em /sys/fs/bcache apareça:

# ls /sys/fs/bcache
f876ea9b-af2c-4b01-84ba-43a87d60501c  register  register_quiet

você então precisa anexá-lo com

# echo f876ea9b-af2c-4b01-84ba-43a87d60501c >/sys/block/bcache0/bcache/attach
# cat /sys/block/bcache0/bcache/state 
clean

Armadilha complicada: uma vez conectado a um bcache, você não pode remover o dispositivo de loop com

# losetup -d /dev/loop2

isso falhará silenciosamente, mesmo que o código de saída seja 0 (sucesso!)

você precisa primeiro desfazer tudo com

# echo 1 >/sys/block/bcache0/bcache/stop
# echo 1 >/sys/fs/bcache/f876ea9b-af2c-4b01-84ba-43a87d60501c/unregister

informação relacionada