操作系统:ubuntu22.04
硬件环境:服务器:宁畅R640 G40,1个1.7T nvme做系统盘,2个3.2T NVME做缓存盘,HDD硬盘共36个,阵列卡9560-16I-8G
磁盘做成做成两个raid5,:23*20T磁盘做raid5,11*20T做raid5,2个硬盘做成热备盘,但是raid5超过7块磁盘会造成写效率低下,故打算用bcache做缓存提高raid效率
一、fio测试
1、安装fio
sudo apt update
sudo apt install fio
2、fio基本用法
- fio 通过配置文件或命令行参数定义测试任务。以下是一些常用参数:
- --name:测试任务名称。
- --filename:测试文件路径。
- --size:测试文件大小。
- --rw:读写模式(如 read、write、randread、randwrite 等)。
- --bs:块大小(如 4k、64k 等)。
- --iodepth:I/O 队列深度。
- --numjobs:并发任务数。
- --runtime:测试运行时间(秒)。
- --direct:是否使用直接 I/O(绕过缓存)。
- --group_reporting:汇总所有任务的性能数据。
3、在未挂载卷的情况下,对磁盘进行读写性能测试,测试数据大小30G
顺序读
fio --name=seq_read_sda --ioengine=libaio --rw=read --bs=1M --direct=1 --size=30G --numjobs=1 --runtime=60 --time_based --group_reporting --filename=/dev/sda
顺序写
fio --name=seq_write_sda --ioengine=libaio --rw=write --bs=1M --direct=1 --size=30G --numjobs=1 --runtime=60 --time_based --group_reporting --filename=/dev/sda
随机读
fio --name=rand_read_sda --ioengine=libaio --rw=randread --bs=4k --direct=1 --size=30G --numjobs=1 --runtime=60 --time_based --group_reporting --filename=/dev/sda
随机写
fio --name=rand_write_sda --ioengine=libaio --rw=randwrite --bs=4k --direct=1 --size=30G --numjobs=1 --runtime=60 --time_based --group_reporting --filename=/dev/sda
混合读写
fio --name=mixed_io_sda --ioengine=libaio --rw=randrw --rwmixread=70 --bs=4k --direct=1 --size=30G --numjobs=1 --runtime=60 --time_based --group_reporting --filename=/dev/sda
4、在已挂载卷的情况下对磁盘进行读写测试
在已挂载卷的情况下,如果对磁盘进行写性能测试有可能造成磁盘数据被覆盖丢失,故--filename参数不能再指向设备名,需要指向具体的某个文件
(1)、生成测试文件
使用 fio 的 --randrepeat 参数在/dev/sda1生成30G随机数据:
fio --name=rand_test --filename=/mnt/filedisk/testfile --size=30G --rw=randrw --bs=4k --iodepth=32 --numjobs=8 --runtime=60 --direct=1 --group_reporting --randrepeat=1
(2)、读写测试
前面所有命令的 --filename参数需修改为:--filename=/mnt/filedisk/testfile
二、安装配置bcache
1、内核开启bcache
modprobe bcache
lsmod |grep bcache
2、安装bcache-tools
apt update
apt install bcache-tools
3、查看当前磁盘
后端磁盘sda 180T,sdb 400T,缓存盘nvme0n1和nvme1n1
4、清除磁盘块信息
wipefs -a /dev/nvme0n1
wipefs -a /dev/nvme1n1
wipefs -a /dev/sda
wipefs -a /dev/sdb
5、添加数据盘
make-bcache -B /dev/sda
make-bcache -B /dev/sdb
6、添加缓存盘
make-bcache -C /dev/nvme0n1
make-bcache -C /dev/nvme1n1
7、将缓存盘与数据盘绑定
查看缓存盘uuid,最后一行的cset.uuid的值就是我们要找的uuid
bcache-super-show /dev/nvme0n1
bcache-super-show /dev/nvme1n1
绑定缓存盘
echo "703eca51-28c3-4913-aa43-1e2d5172b546" > /sys/block/bcache0/bcache/attach
echo "116cfa32-5b94-4f04-8032-b282b49c950f" > /sys/block/bcache1/bcache/attach
一个数据盘只能绑定一个缓存盘,但是一个缓存盘可以绑定多个数据盘
8、查看缓存状态
cat /sys/block/bcache0/bcache/state
no cache:该backing device没有attach任何caching device
clean:一切正常,缓存是干净的
dirty:一切正常,已启用回写,缓存是脏的
inconsistent:遇到问题,后台设备与缓存设备不同步
9、更改缓存策略
如果缓存状态是clean,可以将缓存策略更改为writeback
Bcache有三种缓存策略
(1)writeback回写策略:数据先写入到缓存磁盘,再等待系统将缓存磁盘数据刷到后端磁盘
(2)writethrough写通策略:数据会同时写入缓存磁盘和数据磁盘(默认是该模式)
(3)writearound直达策略:数据直接写入后端磁盘。
查看缓存模式
cat /sys/block/bcache0/bcache/cache_mode
cat /sys/block/bcache1/bcache/cache_mode
改为writeback
echo writeback > /sys/block/bcache0/bcache/cache_mode
echo writeback > /sys/block/bcache1/bcache/cache_mode
那个方括号框在writeback,说明当前模式是writeback
10、格式化和挂载数据盘
缓存状态是clean的时候,bcache0和bcache1这时候就像一个裸设备一样,进行格式化和挂载处理
将bcache
格式化为xfs文件系统
mkfs.xfs /dev/bcache0
挂载到/mnt/data1
mkdir /mnt/data1
mount /dev/bcache0 /mnt/data1
添加到开机启动
blkid /dev/bcache0
vi /etc/fstab
UUID=**uuid** mnt/data1 xfs defaults 0 0
三、bcache踩坑
1、/sys/block/bcache0/bcache下面的文件代表当前的运行参数,可以通过cat查看这些参数,echo重定向修改这些文件可以调整参数
attach:绑定缓存盘 detach:解除绑定缓存盘
state:缓存状态
dirty_data:当前缓存盘内还未写入数据盘的脏数据量
stop:1停止缓存
其他的参数有空慢慢测试
2、/sys/fs/bcache下面可以看到当前绑定的缓存盘uuid,操作相应uuid文件夹下的文件可以获取和修改相应缓存盘的参数
3、bcache-super-show
bcache-super-show 是一个用于显示 bcache 设备超级块信息的工具,可以查看 bcache 设备的详细配置信息,包括设备状态、UUID、缓存模式等
数据盘:可以看到工作在writeback模式
缓存盘:
bcache0:不知道为什么,bcache0查看超级块始终报错,好像也不影响使用,留待以后解决
4、卸载bcache设备
(1)停止所有bcache设备
echo 1 | sudo tee /sys/block/bcache*/bcache/stop
(2)卸载所有bcache设备
sudo umount /dev/bcache*
(3)清除设备bcache配置
sudo wipefs --all /dev/sda
sudo wipefs --all /dev/sdb
sudo wipefs --all /dev/nvme0n1
sudo wipefs --all /dev/nvme1n1
本文暂时没有评论,来添加一个吧(●'◡'●)