首页 > 其他分享 >BCache浅析

BCache浅析

时间:2022-12-08 15:46:11浏览次数:81  
标签:dev 浅析 BCache disk root bcache block 设备

Bcache的wiki和git仓地址如下:
http://bcache.evilpiepirate.org
http://evilpiepirate.org/git/linux-bcache.git
http://evilpiepirate.org/git/bcache-tools.git

1.作用与架构

1.1 简介

bcache是按照SSD的性能特性来设计的,只按擦除桶大小进行分配,使用b+tree和日志混合方法来跟踪缓存数据,缓存数据可以是桶上的任意一个扇区。bcache最大程度上减少了随机写的代价,它按顺序填充一个桶,重新使用时只需将桶设置为无效。bcache支持写直达和回写策略。回写默认情况下是关闭的,可以在运行时改变。bcache还在最大程度上保护你的数据,在系统异常关机时数据仍然是可靠的。因为它被设计为只有在数据完全写回存储设备才确认写成功。回写策略能够缓存绝大多数的写请求,然后再按照索引将脏数据按次序写回到后端存储设备。SSD的特点就是随机IO速度很快,而对于大块顺序IO的提升却并不大。bcache会检测顺序IO并忽略;还会对每一个任务记录动态的平均IO大小,当平均IO大小超过截止值时该任务后面的IO将会被忽略,这样就可以透传备份或者大文件拷贝。

在flash上发现数据IO错误时,首先会尝试读以恢复数据或者将该缓存项置为无效。对于不可恢复的错误,例如元数据或脏数据,bcache将会自动关闭缓存。如果有脏数据在缓存中,这时会首先关闭回写策略然后再等待脏数据刷回。

1.2 基本使用:

1.编译安装

git clone http://evilpiepirate.org/git/bcache-tools.git

安装前需要两个依赖包pkg-config和libblkid-dev

apt-get install pkg-config libblkid-dev

然后编译

make

make install

2.使用方式
2.1 创建bcache设备
命令:make-bcache -C [cache-device] -B [backing-device]
以vde作为缓存盘,vdb和vdc作为后端设备创建bcache设备,有几个后端设备就会生成几个bcache设备。

# make-bcache -C /dev/vde -B /dev/vdb /dev/vdc
UUID: 8941a5d1-074e-4cc6-a6dd-56cb1f65aed3
Set UUID: 7681dbb3-6558-4e60-b062-5fbb648f6665
version: 0
nbuckets: 20480
block_size: 1
bucket_size: 1024
nr_in_set: 1
nr_this_dev: 0
first_bucket: 1
UUID: 9e28d09b-942d-487e-be22-9132063da572
Set UUID: 7681dbb3-6558-4e60-b062-5fbb648f6665
version: 1
block_size: 1
data_offset: 16
UUID: 1bacf83e-2754-4d6a-a964-09e53e6e679f
Set UUID: 7681dbb3-6558-4e60-b062-5fbb648f6665
version: 1
block_size: 1
data_offset: 16
# ls /dev/bcache* -la
brw-rw—T 1 root disk 250, 0 5月22 17:23 /dev/bcache0
brw-rw—T 1 root disk 250, 1 5月22 17:23 /dev/bcache1

然后可以使用lsblk查看这些设备的对应关系

# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 254:0 0 20G 0 disk
└─vda1 254:1 0 20G 0 part /
vdb 254:16 0 50G 0 disk
└─bcache1 250:1 0 50G 0 disk
vdc 254:32 0 50G 0 disk
└─bcache0 250:0 0 50G 0 disk
vdd 254:48 0 50G 0 disk
└─bcache2 250:2 0 50G 0 disk
vde 254:64 0 10G 0 disk
├─bcache0 250:0 0 50G 0 disk
└─bcache1 250:1 0 50G 0 disk

2.2 添加一块后端设备(backing device)

命令:make-bcache -B [backing-device]

# make-bcache -B /dev/vdh
UUID: bd1bc116-6f39-401e-a328-3bc0af4ac8d1
Set UUID: cd86812e-d24c-46da-b949-683969b59575
version: 1
block_size: 1
data_offset: 16

接着看到对应的设备是/dev/bcache3

查看cache set uuid

# ls -la /sys/fs/bcache/
total 0
drwxr-xr-x 3 root root 0 May 22 17:23 .
drwxr-xr-x 6 root root 0 May 22 17:21 ..
drwxr-xr-x 7 root root 0 May 22 17:26 7681dbb3-6558-4e60-b062-5fbb648f6665
–w——- 1 root root 4096 May 2217:57 register
–w——- 1 root root 4096 May 2220:44 register_quiet

“attach”后端设备
命令:echo [cache set uuid] >/sys/block/bcache[N]/bcache/attach
attach之后,缓存设备就能够对新加的后端设备缓存数据了。

# echo 7681dbb3-6558-4e60-b062-5fbb648f6665 >/sys/block/bcache3/bcache/attach

2.3 删除一块后端设备

1)detach backing device
命令:echo [cache set uuid] >/sys/block/bcache[N]/bcache/detach
detach后端设备后,对应的bcache设备还是存在的,只不过这个bcache设备是无缓存的,查看其状态可以看到是no cache

比如删除bcache3

# echo 7681dbb3-6558-4e60-b062-5fbb648f6665 >/sys/block/bcache3/bcache/detach
# cat /sys/block/bcache3/bcache/state
no cache

2)stop backing device
命令:echo 1 > /sys/block/bcache[N]/bcache/stop
detach后端设备后,对应的bcache设备还存在,如果要删除,还需要stop该设备

# echo 1 > /sys/block/bcache3/bcache/stop
# ls /dev/bcache* -la
brw-rw—T 1 root disk 250, 0 May 22 17:51 /dev/bcache0
brw-rw—T 1 root disk 250, 1 May 22 17:54 /dev/bcache1
brw-rw—T 1 root disk 250, 2 May 22 20:42 /dev/bcache2

2.4 新增一块缓存设备(caching device)

1)创建cache设备
命令:make-bcache -C [cache device]
有可能对应的设备已经有一些元数据,需要使用wipefs清理掉

# make-bcache -C /dev/vdf
Device /dev/vdf already has a non-bcache superblock, remove it using wipefs andwipefs -a
# wipefs -a /dev/vdf
4 bytes were erased at offset 0x27fff0000 (linux_raid_member)
they were: fc 4e 2b a9
# make-bcache -C /dev/vdf
UUID: 1f8bc71f-0106-4da5-b781-5de7b1517706
Set UUID: 7bfb0d17-b6d0-4fe9-942b-a1c75a0893ab
version: 0
nbuckets: 20480
block_size: 1
bucket_size: 1024
nr_in_set: 1
nr_this_dev: 0
first_bucket: 1

2)与bcache设备关联
命令:echo [cache set uuid] >/sys/block/bcache[N]/bcache/attach
缓存设备需要与bcache设备关联后,才能作为对应bcache设备缓存。

# echo 7bfb0d17-b6d0-4fe9-942b-a1c75a0893ab >/sys/block/bcache3/bcache/attach

2.5 删除cache设备

首先确保没有backing device在使用它,上述的“删除一块后端设备”有说明如何设置取消后端设备对缓存设备的使用。
然后可以使用lsblk来查看是否有盘在引用它。
在在/sys/fs/bcache目录下还有对应的cacheset uuid,unregister该set uuid后这个cache设备就被视为删除了。
命令:echo 1 > /sys/fs/bcache/[cache setuuid]/unregister

比如vde已经不作为任何设备的缓存盘了,在/sys/fs/bcache目录下有对应的cache set uuid

# ls /sys/fs/bcache/ -la
total 0
drwxr-xr-x 4 root root 0 5月 26 09:07 .
drwxr-xr-x 6 root root 0 5月 26 09:06 ..
drwxr-xr-x 7 root root 0 5月 26 09:077681dbb3-6558-4e60-b062-5fbb648f6665
drwxr-xr-x 7 root root 0 5月 26 09:077bfb0d17-b6d0-4fe9-942b-a1c75a0893ab
–w——- 1 root root 4096 5月 26 09:07 register

参考资料:
1.A block layer cache (bcache) https://www.kernel.org/doc/Documentation/bcache.txt

标签:dev,浅析,BCache,disk,root,bcache,block,设备
From: https://www.cnblogs.com/codeRhythm/p/16966262.html

相关文章

  • 浅析故障电弧探测器在电气防火中的作用与应用介绍
    【摘要】: 分析了重大电气火灾数据。结合目前国内前沿的电气火灾探测技术,重点介绍了故障电弧式电气火灾监控探测器在火灾预警系统中的重要作用,给出了基于多种探测技术的电气......
  • 浅析消防应急照明系统在医疗建筑中的应用
    罗轩志安科瑞电气股份有限公司上海嘉定201801 摘要:随着社会的快速发展以及医疗技术的不断更新,近几年,全国各地涌现不少全新的现代化医疗建筑,就福建省而言,有龙岩上杭医院、......
  • 浅析能耗监测系统在大型数据中心的应用
    罗轩志安科瑞电气股份有限公司上海嘉定201801摘要:本文根据大型数据中心能耗监测的具体需求,设计了一个大型数据中心能耗监测系统,实现了资产管理、环境监测、设备控制、能耗......
  • 浅析电弧光保护在发电厂10KV厂用电系统中的设计应用方案
     刘丹安科瑞电气股份有限公司上海嘉定201801摘要:介绍了电弧光产生、危害及电弧光保护的原理和组成,对发电厂10KV中压厂用电系统保护的现状及存在的不足进行了分析,以福建......
  • 浅析医药工业类洁净厂房电气消防设计与应用
     罗轩志安科瑞电气股份有限公司上海嘉定201801摘要:结合国家相关规范及多年药厂洁净车间的设计经验,就医药工业洁净厂房电气消防设计中的具体做法作了简要论述,指出只有在对......
  • Java文件操作实例浅析
    Java文件操作实例浅析1.   实例一:创建文件和目录在java.io包中有一个专门用于文件操作的类File类。此类提供了文件很多操作,如创建文件、删除文件、创建目录、删除目录等......
  • C、C++、Java语言中异常处理机制浅析
    C、C++、Java语言中异常处理机制浅析一、    异常处理(ExceptionalHandling)概述1.    异常处理异常处理又称异常错误处理,它提供了处理程序运行时出现任何意外或......
  • 浅析C++的多态机制
    一、    多态机制综述1.    回顾实例以前在编写C++程序时,我们曾实现过求某个数的绝对值的函数,当时我们做得是重载了三个函数,intfabs(intx), doublefabs(doub......
  • 浅析故障电弧探测器在电气防火中的作用与应用介绍
    安科瑞陈盼【摘要】: 分析了重大电气火灾数据。结合目前国内前沿的电气火灾探测技术,重点介绍了故障电弧式电气火灾监控探测器在火灾预警系统中的重要作用,给出了基于多种探测......
  • 浅析10kV~35kV 变电站综合自动化系统设计与应用
    陈盼安科瑞电气股份有限公司上海嘉定201801摘要:变电站综合自动化是自动化技术、计算机技术和通信技术等高科技在变电站领域的综合应用。通过采集到比较齐全的数据和信息,......