Linux下SSD缓存加速之bcache试用

一重要客户,要求投标方提供SSD做缓存加速的方案,并提供测试报告。刚开始选择INTEL CAS,客户要求是SUSE系统,而INTEL CAS从去年8月就不再更新,只能支持到SUSE 12SP3,而客户要求操作系统必须是SUSE 12 SP4,所以不得不重新选择方案。

INTEL CAS软件支持的操作系统版本:

22692-2meethye62y.png

在Linux下,使用SSD为HDD加速,目前较为成熟的方案有:flashcache,enhanceIO,dm-cache,bcache等,多方面比较以后最终选择了bcache。

bcache 是一个 Linux 内核块层超速缓存。它允许使用一个或多个高速磁盘驱动器(例如 SSD)作为一个或多个速度低得多的硬盘的超速缓存。bcache 支持直写和写回,不受所用文件系统的约束。默认情况下,它只超速缓存随机读取和写入,这也是 SSD 的强项。它还适合用于台式机、服务器和高端储存阵列

主要功能:

1,可以使用单个超速缓存设备来超速缓存任意数量的后备设备。在运行时可以挂接和分离已装入及使用中的后备设备。

2,在非正常关机后恢复 - 只有在超速缓存与后备设备一致后才完成写入。

3,SSD 拥塞时限制传至 SSD 的流量。

4,高效的写回实施方案。脏数据始终按排序顺序写出。

5,稳定可靠,可在生产环境中使用。

关于bcache的更多介绍都在这里

https://bcache.evilpiepirate.org/
https://wiki.archlinux.org/index.php/Bcache
https://www.suse.com/zh-cn/documentation/sles-12/stor_admin/data/sec_multitiercache_bcache.html

CentOS和Ubuntu都可以使用bcache。我是在suse下安装的,记录下,防止忘记。

1,配置suse 下的zypper本地安装源

zypper ar file:///yumdata local

ar :添加安装源
file:///yumdata suse安装镜像的路径
local zypper安装源的名称

zypper更多参数介绍:

lr 列出所有定义的安装源。
ar 添加一个新的安装源。
rr 删除指定的安装源。
nr 重命名指定的安装源。
mr 修改指定的安装源。
ref 刷新所有安装源。
clean 清除本地缓存。

04377-d6hy4gouqoj.png

查看zypper安装源

91835-jvw3v83pg1.png

2,安装bcache软件

zypper install bcache-tools

71845-0crdy73q3e9w.png

3,加载内核

modprobe bcache
lsmod |grep bcache

有如下输出内容,说明内核加载成功

27438-rsk9t7hln3c.png

查看当前磁盘:三个2TB HDD,一个400GB NVME SSD

31740-tkdttgv6kb.png

4,绑定SSD和HDD

bcache有两种设备,一个是backing,一个是cache,backing指的就是存放数据的后端磁盘,cache很好理解,就是高速缓存盘SSD
bcache 可以支持将用来做缓存的ssd和做数据存放的hdd一次性注册,而不需要手动连接挂载ssd和hdd

make-bcache -B /dev/sdb /dev/sdc /dev/sdd -C /dev/nvme0n1

57261-aswtdc31ev5.png

5,查看bcache相关信息

lsblk

82255-ydvgoycymgh.png

cat /sys/block/bcache0/bcache/state

no cache:该backing device没有attach任何caching device
clean:一切正常,缓存是干净的
dirty:一切正常,已启用回写,缓存是脏的
inconsistent:遇到问题,后台设备与缓存设备不同步

49969-bkys5c3wn1j.png

查看缓存数据量

cat /sys/block/bcache0/bcache/dirty_data

81559-sitz99x9c.png

查看缓存模式,默认情况下是直通超速缓存模式

cat /sys/block/bcache0/bcache/cache_mode

28766-3pbpdfh1d63.png

6,为了提高写的性能,需要修改缓存模式为写回

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

36891-bf043px9oh8.png

7,格式化使用

mkfs.xfs /dev/bcache0
mkdir /cache
mount /dev/bcache0 /cache

8,开机自动挂载

由于bcache<N>设备在每次重启后,N的值并不是固定的,有可能重启后,原先的bcahe0变为bcache1,而bcache1却变成了bcache0,。所以,不能将/dev/bcache<N>作为磁盘挂载,需要使用该磁盘的UUID进行挂载,通过以下命令可以获取磁盘的UUID

blkid /dev/bcache0

00213-00fv9ya05jnnv.png

然后将uuid写入/etc/fstab 实现开机自动挂载

9,使用fio测试性能

先安装编译工具。

zypper install make gcc* kernel-devel kernel-headers

53161-nghlkwarb5h.png

下载fio 编译安装。fio下载连接:http://brick.kernel.dk/snaps/

linux-be3v:~ # cd fio-3.15/
linux-be3v:~/fio-3.15 # ./configure
linux-be3v:~/fio-3.15 # make
linux-be3v:~/fio-3.15 # make install

10,测试有缓存

fio -filename=/dev/bcache0 -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=200G -numjobs=10 -runtime=60 -group_reporting -name=mytest

86413-2h2uu2vtbsv.png

11,测试无缓存

fio -filename=/dev/sdb -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=200G -numjobs=10 -runtime=60 -group_reporting -name=mytest

16572-pl1767ln86.png

后附常用bcache命令

1,查看cache 缓存盘的CACHE_SET_UUID

ll /sys/fs/bcache

2,注销缓存盘

通过缓存盘的CACHE_SET_UUID,在/sys/fs/bcache/<cset.uuid>/unregister写入1,即可进行注销

echo 1 >/sys/fs/bcache/06e33354-7c21-4c52-990d-1a653617ab20/unregister

3,停用后端磁盘

echo 1 > /sys/block/sdb/bcache/stop
echo 1 > /sys/block/sdc/bcache/stop

4,把 cache 上面的数据刷到后端磁盘上面

echo 0 > /sys/block/bcache0/bcache/writeback_percent

5,fio测试工具常用参数说明

filename=/dev/sdb 测试文件名称,通常选择需要测试的盘的data目录。
direct=1 测试过程绕过机器自带的buffer。使测试结果更真实。
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机写和读的I/O
bs=16k 单次io的块文件大小为16k
bsrange=512-2048 同上,提定数据块的大小范围
size=5g 本次的测试文件大小为5g,以每次4k的io进行测试。
numjobs=30 本次的测试线程为30.
runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
ioengine=psync io引擎使用pync方式
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息
lockmem=1g 只使用1g内存进行测试。
zero_buffers 用0初始化系统buffer。
nrfiles=8 每个进程生成文件的数量

本文作者:博主:     文章标题:Linux下SSD缓存加速之bcache试用
本文地址:https://www.mr-mao.cn/archives/linux-bcache-performance-testing.html     
版权说明:若无注明,本文皆为“猫先生的日常点滴”原创,转载请保留文章出处。
最后修改:2019 年 08 月 30 日 04 : 50 PM
如果觉得我的文章对你有用,请随意赞赏,并分享给你觉得需要的人,谢谢!

3 条评论

  1. neo Internet Explorer 11.0 Windows 10 中国 香港

    Hello Mr.Mao ,
    我想请教一下,我用Bcache 来加速我的Iscsi,为什么随机读写还是很弱?
    环境:ubuntu18.04 server 后端磁盘2个500G sata raid0 , ssd 32G , 这个用来做一个bcache0, 策略writeback,
    然后用iscsi把bcache0 分享给windows系统用,测试的随机读写只有3MB ?
    在测试时我留意了bcache缓存里出现了dirty_data , 那应该writeback成功了,可是我的那个32G SSD随机读写可是有20MB的。

    1. 猫先生 Google Chrome 77.0.3865.120 Windows 10 中国 甘肃 兰州
      @neo

      我忽然想起来。bcache默认不会缓存顺序io的,你需要开启它
      echo 0 > /sys/block/bcache0/bcache/sequential_cutoff

    2. 猫先生 Google Chrome 77.0.3865.120 Windows 10 中国 甘肃 兰州
      @neo

      先不要分享,先在本地测试bcache0 看是否正常,如果速度接近ssd ,那么说明本地正常,然后再分享,如果正常的bcache0 分享出去,速度只有3M,再排查链路或者其他问题,我没有这样测试过,所以不能确定是不是iSCSI 问题还是bcache 不支持这样操作

发表评论