キャッシュデバイスとしてramdiskを使用するとbcacheが期待通りに動作しない

キャッシュデバイスとしてramdiskを使用するとbcacheが期待通りに動作しない

bcache を試していましたが、SSD がないので、代わりに空きメモリを使用したいと思いました。ramdisk は/proc/devicesブロック デバイスとしてリストされているので、これで問題なく動作するだろうと思いましたが、以下の簡単なテストでは動作しませんでした。

/dev/ramこれは、最新の 4.5 カーネルがインストールされた Ubuntu 15.10 上で実行されており、 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 

からエラーや出力は表示されませんでしたmake-bcache。この時点で、新しい bcache デバイスが UUID または名前のいずれかで以下のパスにリストされることを期待していましたが、何もありませんでした。

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

以下は出力ですcache-super-show

キャッシュ用

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

と起源

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

両方にループ デバイスを使用することも試みましたが、さらにひどい結果になりました。以下のコマンドを実行すると、kernel BUGdmesg に厄介なダンプが生成されます。

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/

bcache を使用して RAM ディスクをキャッシュ デバイスとして正常に動作させることに成功した人はいますか? どこで失敗したかを示す stdout/err がないため、これが設定ミスなのかバグなのかわかりません。

ありがとうfLo

答え1

一部のデバイスは使用するために登録が必要です

キャッシュデバイスを作成した後

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

両方を登録する必要があります(少なくともRAMディスクは登録する必要がありますが、ループデバイスとハードディスクはほとんどの場合自動登録されるようです)。

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

/sys/fs/bcacheのuuidエントリが表示され、デバイスは自動的に接続されて表示されるはずです。

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

キャッシュとバッキングデバイスを別々にmake-bcacheすると、

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

これは当てはまらず、RAMディスクを登録した後でも、

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

ただし、/sys/fs/bcache のエントリは表示されます:

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

次にそれを添付する必要があります

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

落とし穴:bcacheに一度接続すると、ループデバイスを削除することはできません。

# losetup -d /dev/loop2

終了コードが 0 (成功!) であっても、これは何も表示されずに失敗します。

まずすべてを元に戻す必要があります

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

関連情報