Linux内核RAID5写性能分析
2015-07-24 18:27
746 查看
Linux内核RAID5写性能分析
前面的几篇博文大致介绍了下Linux内核中RAID5源码实现写的过程,那么今天我们就来分析下RAID5写性能如何,具体来说,应该是根据bio请求的大小来分析写延迟。Background
首先我们先确定下测试的模型:3+1 RAID5,并且有chunk_size=4∗pagechunk\_size=4*page,结构如下图。上图中S0~S3均为stripe_head结构,A~P编号的块表示page编号,仅为下面表示容易些。如果不是很清楚stripe_head结构,或者容易将stripe与stripe_head结构搞混淆的同学可以查看我之前的博文:Linux内核中RAID5源码详解之基本架构与数据结构。
这里我们将一个chunk的大小设置为4*page,是为了更清楚的观察CPU中流水线情况,以便计算,而且这里只是提供了一种基本的计算方法,如果搞得太复杂,也没有那个必要的啦。
为了更清楚的计算写延迟,我们以CPU的角度观察bio请求从进入RAID5层到完成这个阶段所消耗的时间。并规定内存到磁盘 或者磁盘到内存的IO延迟为:
图中M:内存,D:物理磁盘,并且加入内存计算时间α\alpha。
接下来采用如下表达方式来简便记录写过程:
in A ,rmw //请求落在A块中,并采用rmw的方式进行写
read A,D:yy//需要从磁盘中读取A,D两块中的数据,耗时yy
compute:α\alpha//内存计算parity,耗时α\alpha
write A,D:xx//将A,D两块中的数据从内存中写到磁盘上,耗时xx
total latency:x+y+αx+y+\alpha//总的耗时情况
写延迟计算
这里我们根据bio请求的大小,并且根据采用的rmw还是rcw的写决策来计算所花费的时间,从CPU的角度来整体看待这个时间基准。bio_size < 4KB
in A , rmw, :A块非overwrite
read A,D : yy
compute: αα
write A,D : xx
total latency:x+y+α x+y+α
bio_size = 4KB
in A , rcw:A块overwrite
read B,C:yy
compute: αα
write A,D:xx
total:x+y+αx+y+α
4KB < bio_size <8KB
In A,E;A块overwrite,E块非overwrite
S0: rcw
Read B,C:yy
Compute: αα
Write A,D:xx
S1: rmw
Read E,H:yy
Compute: αα
Write E,H:xx
这里就不能单纯的累加了,要从CPU的角度考虑流水线的情况,并且考虑磁盘的并行性,具体耗时如下图:
图中y 0,3表示读0号盘和3号盘,由于可以并行,顾只消耗yy;x 0,3 表示将内存数据写到0号和3号磁盘上,还要考虑相同盘之间的IO顺序,因为一块盘不可能同时处理两个IO,因此有:
total latency:2x+y+α2x+y+\alpha
bio_size = 8KB
in A,E:A,E块均为overwrite
s0: rcw
read B,C:yy
compute: αα
write A,D:xx
s1: rcw
read F,G:yy
compute: αα
write F,H:xx
流水线情况:
total latency:2x+y+α2x+y+\alpha
8KB < bio_size < 12KB
In A,E,I:A,E块overwrite,I块非overwrite
S0: rcw
read B,C:yy
compute: αα
write A,D:xx
s1: rcw
read F,G:yy
compute: αα
write F,H:xx
s2: rmw
read I,L:yy
compute: αα
write I,L:xx
流水线情况:
total latency:3x+2y3x+2y
bio_size = 12KB
In A,E,I:A,E,I均为overwrite
S0: rcw
read B,C:yy
compute: αα
write A,D:xx
s1: rcw
read F,G:yy
compute: αα
write F,H:xx
s2: rcw
read J,K:yy
compute: αα
write J,K:xx
流水线情况:
total latency:3x+y+α3x+y+\alpha
12KB < bio_size <16KB
In A,E,I,M:A,E,I均为overwrite,M块非overwrite
S0: rcw
read B,C:yy
compute: αα
write A,D:xx
s1: rcw
read F,G:yy
compute: αα
write F,H:xx
s2: rcw
read J,K:yy
compute:αα
write J,K:xx
s3: rmw
read M,P:yy
compute: αα
write M,P:xx
流水线情况:
total latency:4x+3y4x+3y
bio_size = 16KB
In A,E,I,M:均为overwrite
S0: rcw
read B,C:yy
compute: αα
write A,D:xx
s1: rcw
read F,G:yy
compute:αα
write F,H:xx
s2: rcw
read J,K:yy
compute: αα
write J,K:xx
s3: rcw
read N,O:yy
compute: αα
write M,P:xx
流水线情况:
total latency:4x+y+α4x+y+\alpha
对于更大的bio请求,相应的计算方法和上述的计算方法一样,在此不一一赘述,只需要采用流水线技术并且保证不同盘的并发和相同盘的IO互斥即可。
这只是简单的小例子,单纯的了解下如何计算RAID5写方式的延迟,希望能对你有帮助。
祝好~^_^
相关文章推荐
- ARM Linux 3.x的设备树(Device Tree)
- Linux跟踪工具:虚幻的肥皂闹剧
- 插入的U盘读写时候出现Read-only file system的处理方法
- Linux 系统挂载数据盘
- linux下修改系统日期与时间
- 安装Vmtools for linux
- linux安装软件
- Linux下压缩某个文件夹(文件夹打包)
- 在Linux系统上实现IP转发的方法
- linux下测试程序中各函数执行时间工具
- Linux下查看分区/文件夹大小
- Linux释放内存后。清空swap分区
- Linux patch命令参数及用法详解---Linux打补丁命令
- centos安装第三方软件库,flash与视频播放器
- Linux patch命令参数及用法详解---Linux打补丁命令
- linux文件管理小结之自定义more
- Linux编程推荐书籍
- 每天一个linux命令(1):ls命令
- mysql-cluster 7.x安装(Linux 和 windows)
- linux 文件系统