CentOS7 利用lvm cache结合机械盘和SSD盘实现磁盘IO性能提升 —— 筑梦之路

环境说明

1.操作系统:CentOS7 最小化安装

2.系统盘sda 100G (机械盘)+ 数据盘sdb 100G(机械盘)+ SSD缓存盘 sdc 64G

实现过程

1. 对数据盘和缓存盘进行分区,建立一个区就行

parted /dev/sdb

parted /dev/sdc

2. 创建pv

pvcreate /dev/sdb1 /dev/sdc1

3. 创建vg

vgcreate vg /dev/sdb1 /dev/sdc1

4. 创建数据卷 并指定创建在/dev/sdb1上

lvcreate -n data -L 98G vg /dev/sdb1

5. 创建缓存卷 并指定创建在/dev/sdc1上

lvcreate -n cache -L 60G vg /dev/sdc1

6. 创建meta卷 并指定创建在/dev/sdc1

lvcreate -n meta -L 3G vg /dev/sdc1

7. 创建缓存池

lvconvert --type cache-pool --poolmetadata vg/meta vg/cache

一定要注意cache和meta的顺序,不能搞错。一定要注意cache和meta的顺序,不能搞错。一定要注意cache和meta的顺序,不能搞错

8. 给数据卷提供缓存

lvconvert --type cache --cachepool vg/cache --cachemode writeback vg/data


注意:Cache与Meta的比例不能超过1000:1

9. 查看验证
lsblk

10. 格式化并挂载

mkfs.xfs /dev/vg/data

mkdir /data

mount /dev/mapper/vg-data /data

使用fio测试磁盘IO性能

# 取消缓存

lvconvert --uncache vg/data

fio是一个开源压力测试工具,主要用来测试硬盘IO性能。这个工具的可定制性非常强,可以根据测试者的想法进行各种混合io测试,它支持13种不同类型io引擎(libaio、sync、mmap、posixaio、network等等)。它可以测试块设备或文件,可以通过多线程或进程模拟各种io操作,可以测试统计iops、带宽和时延等性能。

当前我们通常使用异步IO引擎libaio,并结合direct=1,以绕过文件系统缓存来测试硬盘的真实IO性能。

关注的指标为:IOPS和带宽。

参数参数值解释
filename设备名或文件名,如:裸设备/dev/sdb,文件/home/test.img定义测试对象,一般是设备或者文件。如果想测试裸盘设备/dev/sdb,可以设置filename=/dev/sdb;如果想要测试文件系统性能,则可以设置filename=/home/test.img
name测试名称定义测试名称。必填项,本地fio测试的名称,对性能没有影响。
rw测试类型,可选值有:read,write,rw,randread,randwrite,randrw定义测试的读写类型:read-顺序读,write-顺序写,rw(readwrite)- 混合顺序读写,randread- 随机读,randwrite-随机写,randrw-混合随机读写。对于读写混合类型来说,默认读写比例为1:1
rwmixwrite,rwmixread混合读写中读写占用比例,可选值为[0,100]定义在混合读写模式中,写或读所占的比例。举例来说,rwmixread值为10,则表示读写比为10:90。
ioengineio引擎选择,可选值有sync、libaio、psync、vsync、mmap等定义fio如何下发io请求。sync:基本的read、write io。 libaio:linux原生的异步io,linux只支持non-buffer情况下的排队操作。默认值为psync,该模式为同步io模型,异步io模型libaio,一般结合direct=1使用
direct0或1定义是否使用direct io:值为0,表示使用buffered io;值为1,表示使用direct io。
bs带单位的数字定义io的块大小,单位是k,K,m,M。默认值为4k。
numjobs正整数定义测试的进程/线程数,默认值为1,如果指定了thread参数,则使用单进程多线程模式,否则使用多进程模式
iodepth正整数定义每个进程/线程可以同时下发的io任务数,默认为1,适用于异步io场景,同步io场景要等前一个io任务完成才能下发下一个任务,所以iodepth并不起作用。
cpu_allowed指定cpu的corefio测试的所有进程/线程可以选择的cpu核,可以是单独一个或者多个核,也可以是一个范围。

测试一般关注顺序读、顺序写、随机读、随机写、混合读写,覆盖小包例如4K,大包例如1024K。

测试的硬盘通常选用NVMe SSD,文件系统采用EXT4/XFS。

关注指标:IOPS和带宽BW。

一般性能问题基本集中在小包,主要受内核在存储IO栈以及文件系统的性能影响

# 其他性能测试命令参考

IOPS:
随机读    fio --filename=/改成待测试文件名称 --ioengine=libaio --rw=randread  --bs=4k --size=40G --iodepth=64 --numjobs=4 --direct=1 --name=4kiops_randread  --group_reporting --runtime=120 
随机写    fio --filename=/改成待测试文件名称 --ioengine=libaio --rw=randwrite --bs=4k --size=40G --iodepth=64 --numjobs=4 --direct=1 --name=4kiops_randwrite --group_reporting --runtime=120

吞吐量:
随机读   fio --filename=/改成待测试文件名称 --ioengine=libaio --rw=randread  --bs=4M --size=40G --iodepth=64 --numjobs=1 --direct=1 --name=4kio_randread    --group_reporting --runtime=120
随机写  fio --filename=/改成待测试文件名称 --ioengine=libaio --rw=randwrite --bs=4M --size=40G --iodepth=64 --numjobs=1 --direct=1 --name=4kio_randwrite   --group_reporting --runtime=120

时延:
随机读  fio --filename=/改成待测试文件名称 --ioengine=libaio --rw=randread  --bs=4k --size=40G --iodepth=1  --numjobs=1 --direct=1 --name=4klat_randread   --group_reporting --runtime=120
随机写  fio --filename=/改成待测试文件名称 --ioengine=libaio --rw=randwrite --bs=4k --size=40G --iodepth=1  --numjobs=1 --direct=1 --name=4klat_randwrite  --group_reporting --runtime=120
#磁盘IO性能测试脚本,主要测试IOPS

#!/bin/bash
# fiopressure.sh

filename=/data/fiotest
size=5G
runtime=60
report_path=/var/log/fio.report
# 4k顺序读
echo ">>>正在进行4k顺序读测试"
fio -filename=$filename  -direct=1 -iodepth 1 -thread -rw=read -rwmixread=70 -ioengine=psync -bs=4k -size=$size -numjobs=20 -runtime=$runtime -group_reporting -name=4k顺序读 > $report_path
# 4k顺序写
echo ">>>正在进行4k顺序写测试"
fio -filename=$filename  -direct=1 -iodepth 1 -thread -rw=write -rwmixread=70 -ioengine=psync -bs=4k -size=$size -numjobs=20 -runtime=$runtime -group_reporting -name=4k顺序写 >> $report_path
# 4k顺序混合读写
echo ">>>正在进行4k顺序混合读写测试"
fio -filename=$filename  -direct=1 -iodepth 1 -thread -rw=rw -rwmixread=70 -ioengine=psync -bs=4k -size=$size -numjobs=20 -runtime=$runtime -group_reporting -name=4k顺序混合读写 >> $report_path
# 4k随机读
echo ">>>正在进行4k随机读测试"
fio -filename=$filename  -direct=1 -iodepth 1 -thread -rw=randread -rwmixread=70 -ioengine=psync -bs=4k -size=$size -numjobs=20 -runtime=$runtime -group_reporting -name=4k随机读 >> $report_path
# 4k随机写
echo ">>>正在进行4k随机写测试"
fio -filename=$filename  -direct=1 -iodepth 1 -thread -rw=randwrite -rwmixread=70 -ioengine=psync -bs=4k -size=$size -numjobs=20 -runtime=$runtime -group_reporting -name=4k随机写 >> $report_path
# 4k随机混合读写
echo ">>>正在进行4k随机混合读写测试"
fio -filename=$filename  -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=$size -numjobs=20 -runtime=$runtime -group_reporting -name=4k随机混合读写 >> $report_path
echo ">>>FIO测试完毕,测试报告位于$report_path"

磁盘IO性能对比图,左边为未使用lvm cache  右边为使用lvm cache

 

 

参考资料:

SSD作缓存方案之LVM cache - LinCaes - 博客园

LVM Cache折腾杂记(一) · 大专栏

Ubuntu Server使用LVM Cache机制为大容量机械硬盘加速(保姆级教程)_NAS存储_什么值得买

https://developer.huawei.com/home/forum/kunpeng/thread-0296146133417441001-1-1.html

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值