【存储缓存】bcache原理及实践

【存储缓存】bcache原理及实践作者 吴业亮 博客 wuyeliang blog csdn net 一 前言 简单介绍下 bcache bcache 是 linux 内核块设备层的 cache 主要是使用 SSD 盘在 IO 速度较慢的 HDD 盘上面做一层缓存 从而来提高 HDD 盘的 IO 速率 一个缓存设备 SSD 可以同时为多个后端设备 HDD 提供缓存 既然是缓存

大家好,我是讯享网,很高兴认识大家。

作者:吴业亮
博客:wuyeliang.blog.csdn.net

一、前言

简单介绍下bcache,bcache是linux内核块设备层的cache。主要是使用SSD盘在IO速度较慢的HDD盘上面做一层缓存,从而来提高HDD盘的IO速率。一个缓存设备(SSD)可以同时为多个后端设备(HDD)提供缓存。既然是缓存,那自然就会想到缓存策略,bcache支持三种缓存策略:

  • writeback:回写策略,所有的数据将先写入缓存盘,然后等待系统将数据回写入后端数据盘中。
  • writethrough:直写策略(默认策略),数据将会同时写入缓存盘和后端数据盘。
  • writearoud:数据将直接写入后端磁盘。

bcache比较灵活,缓存策略可以随时修改,也可以针对不同的bcache设备设置不同的缓存策略。以下会按照安装、配置和使用这几个部分来说明具体使用bcache的过程。bcache可以大概分为两个部分,一个是linux内核模块,一个是bcache-tools,bcache内核模块在linux内核3.10及以上才支持,所以使用bcache,需要将内核升级到3.10及以上版本才行

官网说bcache的性能完全优于flashcache,参考:

http://www.accelcloud.com/2012/04/18/linux-flashcache-and-bcache-performance-testing/ 

讯享网

官网介绍:

讯享网https://wiki.archlinux.org/index.php/Bcache https://bcache.evilpiepirate.org/ 

bcache-tools 源码:

https://evilpiepirate.org/git/bcache-tools.git 

一、升级内核

1、官网下载内核

讯享网http://cdn.kernel.org/pub/linux/kernel/ 

注意:编译前修改.config文件开启CONFIG_BCACHE

CONFIG_BCACHE=y 
讯享网https://wuyeliang.blog.csdn.net/article/details/ 

3、安装内核

# rpm -ivh kernel-4.18.20-1.x86_64.rpm --force 

4、生成grub

讯享网# grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg 

5、重启

# reboot 

6、加载内核

讯享网# modprobe bcache # lsmod | grep bcache 

二、安装bcache-tools

1、安装依赖libblkid-devel和gcc

# yum install libblkid-devel gcc -y 
讯享网https://github.com/g2p/bcache-tools/releases。 

3、解压包

# tar -zxvf bcache-tools-1.0.8.tar.gz # cd /root/bcache-tools-1.0.8 

4、安装

讯享网# make # make install 

注意:如果是ubuntu环境可以直接安装

apt-get install bcache-tools 

三、创建bcache设备

1、创建后端低速设备(一般是HDD、SATA盘等)

讯享网# make-bcache -B /dev/sdc UUID: 1eca911e-c9c9-4d9b-84c0-c1da023574ed Set UUID: 5cf29253-f347-435e-a3db-b99006c8e6e0 version: 1 block_size: 1 data_offset: 16 

可以看到,在sdb(HDD)磁盘下,出现了bcache0节点,这个bcache0可以理解为就是/dev/sdb磁盘了

# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 80G 0 disk sr0 11:0 1 1024M 0 rom fd0 2:0 1 4K 0 disk sdc 8:32 0 200G 0 disk └─bcache0 252:0 0 200G 0 disk sda 8:0 0 80G 0 disk ├─sda2 8:2 0 79G 0 part │ ├─centos-swap 253:1 0 4G 0 lvm [SWAP] │ └─centos-root 253:0 0 75G 0 lvm / └─sda1 8:1 0 1G 0 part /boot 

对bcache0进行格式化操作了。

讯享网# mkfs.xfs /dev/bcache0 meta-data=/dev/bcache0 isize=256 agcount=4, agsize= blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 data = bsize=4096 blocks=, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 

挂载目录

# mkdir /wyl # mount /dev/bcache0 /wyl # df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 2.0G 0 2.0G 0% /dev tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 2.0G 8.6M 2.0G 1% /run tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/mapper/centos-root 18G 1.6G 16G 9% / /dev/sda1 497M 170M 328M 35% /boot tmpfs 394M 0 394M 0% /run/user/0 /dev/bcache0 20G 33M 20G 1% /wyl 

2、创建前端缓存磁盘(SSD)

讯享网# make-bcache -C /dev/sdb UUID: 51d3daf3-ca90-4bf7-9499-79b98321c43a Set UUID: f43c7118-4595-49cf-a17c-1965ee939b4b version: 0 nbuckets:  block_size: 1 bucket_size: 1024 nr_in_set: 1 nr_this_dev: 0 first_bucket: 1 

首先需要获取该缓存盘(/dev/sdb)的cset.uuid,通过bcache-super-show命令查看:

# bcache-super-show /dev/sdb sb.magic ok sb.first_sector 8 [match] sb.csum AD0D7EED63 [match] sb.version 3 [cache device] dev.label (empty) dev.uuid 51d3daf3-ca90-4bf7-9499-79b98321c43a dev.sectors_per_block 1 dev.sectors_per_bucket 1024 dev.cache.first_sector 1024 dev.cache.cache_sectors  dev.cache.total_sectors  dev.cache.ordered yes dev.cache.discard no dev.cache.pos 0 dev.cache.replacement 0 [lru] cset.uuid f43c7118-4595-49cf-a17c-1965ee939b4b 

备建立联

讯享网# echo "f43c7118-4595-49cf-a17c-1965ee939b4b" > /sys/block/bcache0/bcache/attach 

操作完成后,可以通过lsblk命令查看结果

# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 80G 0 disk └─bcache0 252:0 0 200G 0 disk /wyl sr0 11:0 1 1024M 0 rom fd0 2:0 1 4K 0 disk sdc 8:32 0 200G 0 disk └─bcache0 252:0 0 200G 0 disk /wyl sda 8:0 0 80G 0 disk ├─sda2 8:2 0 79G 0 part │ ├─centos-swap 253:1 0 4G 0 lvm [SWAP] │ └─centos-root 253:0 0 75G 0 lvm / └─sda1 8:1 0 1G 0 part /boot 

三、快速配置方式

上面我们配置大概分了三个步骤:创建后端设备、创建前端缓存设备、建立他们之间的映射关系。

1、快速创建

讯享网# make-bcache -C /dev/sdb -B /dev/sdc 

2、查看


讯享网

# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 80G 0 disk └─bcache0 252:0 0 200G 0 disk /wyl sr0 11:0 1 1024M 0 rom fd0 2:0 1 4K 0 disk sdc 8:32 0 200G 0 disk └─bcache0 252:0 0 200G 0 disk /wyl sda 8:0 0 80G 0 disk ├─sda2 8:2 0 79G 0 part │ ├─centos-swap 253:1 0 4G 0 lvm [SWAP] │ └─centos-root 253:0 0 75G 0 lvm / └─sda1 8:1 0 1G 0 part /boot 

3、同样支持多个后端设备

讯享网make-bcache -C /dev/sdb -B /dev/sdc /dev/sdd 

四、高级功能

-w block size 默认2K,一般需要block size = 后端设备的扇区大小。 -b bucket size,一般需要bucket size = 前端缓存设备的erase block size大小。 
讯享网# cat /sys/block/bcache0/bcache/cache_mode [writethrough] writeback writearound none 

修改缓存策略

# echo writeback > /sys/block/bcache0/bcache/cache_mode 

然后查看是否生效

讯享网# cat /sys/block/bcache0/bcache/cache_mode writethrough [writeback] writearound none 

注:就算机器重启之后缓存策略也不会失效的。

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

输出的内容有以下可能:

  • no cache: 这代表你还没有绑定缓存设备到你的后端设备上
  • clean: 这代表一切正常,缓存是clean的
  • dirty: 这代表一切正常,缓存模式被设置成了writeback,缓存是dirty的
  • inconsistent: 这代表问题很大,后端设备与缓存设备没有同步
    使用一个没有缓存设备的 /dev/bcache0 的话所有的IO都会直接在后端设备上执行,等于pass-through模式。

4.IO路径跟踪

bcache会跟踪每个IO,如果IO的时间超过阈值,则旁路cache设备,直接读写backing设备。

如果你的SSD足够强大,可以不跟踪,减少跟踪的开销。

讯享网# echo 0 > /sys/fs/bcache/<cache set uuid>/congested_read_threshold_us # echo 0 > /sys/fs/bcache/<cache set uuid>/congested_write_threshold_us 

关闭旁路的另一个好处是,所有的离散读写都会经过cache设备,从而不会导致cache missing。

默认情况下当读请求超过2ms,写请求超过20ms时,旁路cache设备。

The default is 2000 us (2 milliseconds) for reads, and 20000 for writes. 
讯享网#echo 0 > /sys/block/bcache0/bcache/sequential_cutoff 

设置回默认值:

# echo  > /sys/block/bcache0/bcache/sequential_cutoff 

五、删除bcache

1、解除缓存盘和后端盘关系

要将缓存盘从当前的后端磁盘删除,只需将缓存盘的cset.uuid detach到bcache设备即可实现

查看ssd的cset.uuid

讯享网# bcache-super-show /dev/sdb | grep cset.uuid cset.uuid f43c7118-4595-49cf-a17c-1965ee939b4b 

解除绑定

echo f43c7118-4595-49cf-a17c-1965ee939b4b > /sys/block/bcache0/bcache/detach 

查看结果

讯享网# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 80G 0 disk sr0 11:0 1 1024M 0 rom fd0 2:0 1 4K 0 disk sdc 8:32 0 200G 0 disk └─bcache0 252:0 0 200G 0 disk sda 8:0 0 80G 0 disk ├─sda2 8:2 0 79G 0 part │ ├─centos-swap 253:1 0 4G 0 lvm [SWAP] │ └─centos-root 253:0 0 75G 0 lvm / └─sda1 8:1 0 1G 0 part /boot 

可以看到sdb下面已经没有bcache0了。

2、删除后端盘

# umount /wyl/ # echo 1 > /sys/block/bcache0/bcache/stop # echo 1 >/sys/fs/bcache/f43c7118-4595-49cf-a17c-1965ee939b4b/unregister # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 80G 0 disk sr0 11:0 1 1024M 0 rom fd0 2:0 1 4K 0 disk sdc 8:32 0 200G 0 disk └─bcache0 252:0 0 200G 0 disk sda 8:0 0 80G 0 disk ├─sda2 8:2 0 79G 0 part │ ├─centos-swap 253:1 0 4G 0 lvm [SWAP] │ └─centos-root 253:0 0 75G 0 lvm / └─sda1 8:1 0 1G 0 part /boot 

3、验证

讯享网# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 80G 0 disk sr0 11:0 1 1024M 0 rom fd0 2:0 1 4K 0 disk sdc 8:32 0 200G 0 disk sda 8:0 0 80G 0 disk ├─sda2 8:2 0 79G 0 part │ ├─centos-swap 253:1 0 4G 0 lvm [SWAP] │ └─centos-root 253:0 0 75G 0 lvm / └─sda1 8:1 0 1G 0 part /boot 

4、格式化磁盘

mkfs.xfs /dev/sdb -f mkfs.xfs /dev/sdc -f 

六、遇到的问题

1、擦除磁盘中的超级块中的数据

用磁盘作为Bcache磁盘前,请先确保磁盘是空的,或者磁盘中的数据无关紧要。如果磁盘中有文件系统,将会出现如下错误:

讯享网# make-bcache -C /dev/sdc Device /dev/sdc already has a non-bcache superblock, remove it using wipefs and wipefs -a 

擦除磁盘中的超级块信息:

# wipefs -a /dev/sdc /dev/sdc: 2 bytes were erased at offset 0x00000438 (ext4): 53 ef # 

2、如果使用make-bcache命令出现了如下打印,那就说明当前磁盘已经是bcache磁盘,

讯享网# make-bcache -B /dev/sdb Already a bcache device on /dev/sdb, overwrite with --wipe-bcache 

加上 --wipe-bcache参数就可以了:

# make-bcache -B /dev/sdb --wipe-bcache 

3、设备处于繁忙中

讯享网root@node2:~# make-bcache -C /dev/sdf -B /dev/sdc Can't open dev /dev/sdf: Device or resource busy 

这时候应该可以看到这个lv的superblock还有信息,这就是原因.

bcache-super-show /dev/sdf wipefs -af /dev/sdf dd if=/dev/zero of=/dev/sdf bs=1M count=512 reboot 
小讯
上一篇 2025-03-31 08:16
下一篇 2025-01-13 18:42

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/65531.html