ramdisk를 캐시 장치로 사용하면 bcache가 예상대로 작동하지 않습니다.

ramdisk를 캐시 장치로 사용하면 bcache가 예상대로 작동하지 않습니다.

bcache를 사용해 보려고 했는데 SSD가 없어서 여유 메모리를 대신 사용하고 싶었습니다. 램디스크가 블록 장치로 나열되어 있으므로 /proc/devices이것이 제대로 작동할 것이라고 생각했지만 아래의 간단한 테스트에서는 작동할 수 없습니다.

이것은 최신 4.5 커널이 설치된 Ubuntu 15.10에 있으며 기본 /dev/ram장치를 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를 사용하여 캐싱 장치로 작동하는 램디스크를 성공적으로 얻은 사람이 있습니까? 실패한 위치를 나타내는 어떤 종류의 stdout/err도 없이 이것이 구성 오류인지 버그인지 확실하지 않습니다.

고마워요 fLo

답변1

일부 장치를 사용하려면 등록이 필요합니다

캐시 장치를 만든 후

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

둘 다 등록해야 합니다(적어도 램디스크는 루프 장치와 하드디스크가 대부분 자동 등록되는 것 같습니다).

# 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

그렇지 않고 램디스크를 등록한 뒤에도 이렇게 나옵니다.

# 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

관련 정보