CentOS7 利用LVM Cache结合机械盘和SSD盘实现磁盘IO性能提升
创作时间:
作者:
@小白创作中心
CentOS7 利用LVM Cache结合机械盘和SSD盘实现磁盘IO性能提升
引用
CSDN
1.
https://blog.csdn.net/qq_34777982/article/details/128844378
本文将介绍如何在CentOS7系统中利用LVM cache技术结合机械盘和SSD盘来提升磁盘IO性能。通过创建LVM cache池并使用fio工具进行性能测试,可以显著改善系统磁盘的读写速度。
环境说明
- 操作系统:CentOS7 最小化安装
- 系统盘sda 100G(机械盘)+ 数据盘sdb 100G(机械盘)+ SSD缓存盘 sdc 64G
实现过程
对数据盘和缓存盘进行分区,建立一个区就行
parted /dev/sdb parted /dev/sdc创建pv
pvcreate /dev/sdb1 /dev/sdc1创建vg
vgcreate vg /dev/sdb1 /dev/sdc1创建数据卷 并指定创建在/dev/sdb1上
lvcreate -n data -L 98G vg /dev/sdb1创建缓存卷 并指定创建在/dev/sdc1上
lvcreate -n cache -L 60G vg /dev/sdc1创建meta卷 并指定创建在/dev/sdc1
lvcreate -n meta -L 3G vg /dev/sdc1创建缓存池
lvconvert --type cache-pool --poolmetadata vg/meta vg/cache注意:cache和meta的顺序不能搞错。
给数据卷提供缓存
lvconvert --type cache --cachepool vg/cache --cachemode writeback vg/data注意:Cache与Meta的比例不能超过1000:1
查看验证
lsblk格式化并挂载
mkfs.xfs /dev/vg/data mkdir /data mount /dev/mapper/vg-data /data使用fio测试磁盘IO性能
# 取消缓存 lvconvert --uncache vg/data
fio工具使用说明
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。 |
ioengine | io引擎选择,可选值有sync、libaio、psync、vsync、mmap等 | 定义fio如何下发io请求。sync:基本的read、write io。 libaio:linux原生的异步io,linux只支持non-buffer情况下的排队操作。默认值为psync,该模式为同步io模型,异步io模型libaio,一般结合direct=1使用。 |
direct | 0或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的core | fio测试的所有进程/线程可以选择的cpu核,可以是单独一个或者多个核,也可以是一个范围。 |
测试一般关注顺序读、顺序写、随机读、随机写、混合读写,覆盖小包例如4K,大包例如1024K。测试的硬盘通常选用NVMe SSD,文件系统采用EXT4/XFS。关注指标:IOPS和带宽BW。一般性能问题基本集中在小包,主要受内核在存储IO栈以及文件系统的性能影响
源码编译安装fio
# 安装编译工具
yum install gcc make gcc-c++ libaio-devel
# 下载源码 https://brick.kernel.dk/snaps/
wget https://brick.kernel.dk/snaps/fio-3.38.tar.gz
# 解压编译安装
tar -zxvf fio-3.38.tar.gz && cd fio-3.38
./configure
make
make install
其他性能测试命令参考
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的磁盘IO性能测试脚本:
#!/bin/bash
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
热门推荐
营业税金及附加税收政策解析:了解各种税种及其适用范围
菠萝削皮全攻略:6种实用方法+挑选技巧+食用注意事项
青瓜的功效与作用、禁忌和食用方法
文化中国行丨400余年历史 闽剧的台上台下双传承之路
春运安全指南:如何预防和应对孩子在车站走失?
摄影中怎么让照片更具故事性,学会这几个技巧你也可以!
内卷:从学术概念到网络流行语的演变与社会影响
手动明锐的操控性怎样?提升操控性的方法有哪些?
再读吴趼人的《二十年目睹之怪现状》:专制社会的末世画卷!
原神钟离和那维莱特选哪个
朋友搬家送什么?35种值得推荐的创意走心礼物
我们或生活在十维空间里,而通过它可以找到高维空间的入口!
糖尿病友:空腹和餐后血糖,在你心中哪个重要?要先降哪个?
患者报告结果在评估治疗效果和生活质量中的作用
突破性应用:人工智能在金融分析提升决策效率与风险管理的革命
医学领域大模型与多模态大模型:全面综述,深度解析!
脑健康市场爆发:从DHA到益生菌,功能性原料创新助力全民脑健康
从西汉到清朝,从西域都护府再到新疆,一文了解西域之民的融合史
过年催相亲如何用幽默化解
首批游客体验汕尾“跳岛游”
网络设备基本指南:集线器、交换机和路由器的区别
雪的象征着什么?雪的象征:纯洁、希望与重生?带你解读雪的各种象征意义!
关于雪的科学知识
植物照明补光灯:点亮植物生长的秘密武器
多渠道融合下的电话营销:实战策略与高效集成路径
军统和中统的区别:历史演变与作用对比
深入了解英伟达CUDA技术:高性能计算的未来
家具防霉防潮用什么?家庭必知的防潮小妙招
迈克尔·乔丹的训练背后:永不落幕的传奇与经典NBA的永恒魅力
水解乳清蛋白和分离乳清蛋白对特殊人群的功效对比分析