Linux/Ubuntu/Debian使用bcache开启SSD缓存加速

原文地址:https://sqmn666.com/archives/linux%E4%B8%8B%E4%BD%BF%E7%94%A8bcache%E5%BC%80%E5%90%AFssd%E7%BC%93%E5%AD%98%E5%8A%A0%E9%80%9F

详细介绍:https://wiki.archlinuxcn.org/wiki/Bcache

前言

随着磁盘小文件的增多,机械硬盘4K读写速度非常容易遇到瓶颈,考虑到固态硬盘高昂的价格,所以采用固态硬盘作为缓存盘,机械硬盘作为数据盘的方案,使用固态硬盘给机械硬盘加速。

bcache简介

bcache 是一个 Linux 内核块层超速缓存。它允许使用一个或多个高速磁盘驱动器(例如 SSD)作为一个或多个速度低得多的硬盘的超速缓存。bcache 支持直写和写回,不受所用文件系统的约束。

主要功能:

1,可以使用单个超速缓存设备来超速缓存任意数量的后备设备。在运行时可以挂接和分离已装入及使用中的后备设备。
2,在非正常关机后恢复 - 只有在超速缓存与后备设备一致后才完成写入。
3,SSD 拥塞时限制传至 SSD 的流量。
4,高效的写回实施方案。脏数据始终按排序顺序写出。
5,稳定可靠,可在生产环境中使用。

以下教程使用debian演示。

  1. 内核开启bcache

    modprobe bcache
    lsmod |grep bcache
  2. 安装bcache-tools
    apt install bcache-tools

  3. 绑定SSD和HDD
    bcache有两种设备,一个是backing,一个是cache,backing指的就是存放数据的后端磁盘,cache很好理解,就是高速缓存盘SSD。

  4. 查看系统中存在的硬盘
    fdisk -l

  5. 清除磁盘的块信息

    wipefs -a /dev/nvme0n1
    wipefs -a /dev/sdb
  6. 添加数据盘
    make-bcache -B /dev/sdb

  7. 添加缓存盘
    make-bcache -C /dev/nvme0n1

  8. 查看块信息
    lsblk

    root@debian:~# lsblk
    NAME                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda                     8:0    0   16G  0 disk
    ├─sda1                  8:1    0  487M  0 part /boot
    ├─sda2                  8:2    0    1K  0 part
    ├─sda3                  8:3    0 1023K  0 part
    ├─sda4                  8:4    0   12G  0 part
    │ ├─debian--vg-root   254:0    0 11.5G  0 lvm  /
    │ └─debian--vg-swap_1 254:1    0    4G  0 lvm  [SWAP]
    └─sda5                  8:5    0  3.5G  0 part
    ├─debian--vg-root   254:0    0 11.5G  0 lvm  /
    └─debian--vg-swap_1 254:1    0    4G  0 lvm  [SWAP]
    sdb                     8:16   0  3.7T  0 disk
    └─bcache0             253:0    0  3.7T  0 disk
    sdc                     8:32   0  3.7T  0 disk
    └─sdc1                  8:33   0  3.7T  0 part
    nvme0n1               259:0    0  477G  0 disk
  9. 查看缓存盘的UUID
    bcache-super-show /dev/nvme0n1
    最后一行的cset.uuid的值就是我们要找的uuid,然后进行attach操作完成添加缓存磁盘:

  10. 绑定缓存盘
    echo "dcddc3f8-e1d4-4ecf-8510-67158a5e3958" >/sys/block/bcache0/bcache/attach

    root@debian:~# lsblk
    NAME                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda                     8:0    0   16G  0 disk
    ├─sda1                  8:1    0  487M  0 part /boot
    ├─sda2                  8:2    0    1K  0 part
    ├─sda3                  8:3    0 1023K  0 part
    ├─sda4                  8:4    0   12G  0 part
    │ ├─debian--vg-root   253:0    0 11.5G  0 lvm  /
    │ └─debian--vg-swap_1 253:1    0    4G  0 lvm  [SWAP]
    └─sda5                  8:5    0  3.5G  0 part
    ├─debian--vg-root   253:0    0 11.5G  0 lvm  /
    └─debian--vg-swap_1 253:1    0    4G  0 lvm  [SWAP]
    sdb                     8:16   0  3.7T  0 disk
    └─bcache0             254:0    0  3.7T  0 disk
    sdc                     8:32   0  3.7T  0 disk
    └─sdc1                  8:33   0  3.7T  0 part
    nvme0n1               259:0    0  477G  0 disk
    └─bcache0             254:0    0  3.7T  0 disk

如提示错误以下,可以尝试重启后继续操作

-bash: echo: write error: No such file or directory

  1. 查看缓存状态
    cat /sys/block/bcache0/bcache/state
    no cache:该backing device没有attach任何caching device
    clean:一切正常,缓存是干净的
    dirty:一切正常,已启用回写,缓存是脏的
    inconsistent:遇到问题,后台设备与缓存设备不同步

  2. 更改缓存策略
    Bcache有三种缓存策略
    (1)writeback回写策略:数据先写入到缓存磁盘,再等待系统将缓存磁盘数据刷到后端磁盘
    (2)writethrough写通策略:数据会同时写入缓存磁盘和数据磁盘(默认是该模式)
    (3)writearound直达策略:数据直接写入后端磁盘。
    为保证性能,改为writeback回写策略。

    1. 查看缓存模式
      cat /sys/block/bcache0/bcache/cache_mode
    2. 改为回写策略
      echo writeback > /sys/block/bcache0/bcache/cache_mode
    3. 格式化数据盘
      mkfs.xfs /dev/bcache0
    4. 挂载数据盘
      临时挂载
      mount /dev/bcache0 /diskb
      开机自动挂载
      查看设备UUID

    blkid /dev/bcache0
    添加到/etc/fstab

    vi /etc/fstab
    UUID=caa8005f-05ce-430d-b133-94f0a3b32f39 /diska                   xfs     defaults        0 0

    重启后验证是否正常挂载。

  3. 测试缓存性能

    1. 安装测试工具fio
      apt install fio
    2. 读取测试
      • 无缓存时数据盘
        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
      • 加了缓存的数据盘
        fio -filename=/dev/bcache0 -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -bs=4k -size=200G -numjobs=10 -runtime=60 -group_reporting -name=mytest
    3. 写入测试
      • 无缓存时数据盘
        fio -filename=/dev/sdb -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -bs=4k -size=200G -numjobs=10 -runtime=60 -group_reporting -name=mytest
      • 加了缓存的数据盘
        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
    4. 测试结果
      读取IOPS 读取速度 写入IOPS 写入速度
      无缓存数据盘 9342 38.3MB/s 209 859kB/s
      带缓存的数据盘 13.1k 53.7MB/s 84.1k 344MB/s
      虽然有提升,但是离预期相差较大,可能跟策略有关,后续再研究优化。

发表回复

登录... 后才能评论