关于raid5的一系列问题
前几天我的一个同事在对计划采购的存储进行测试,期间聊到了raid5的话题,我和他的意见产生了分歧。他的说法是raid5不能挂太多盘是因为如果挂太多盘写惩罚会非常严重导致性能下降。而我的观点则是对于raid5来说,磁盘越多性能越好,不能挂太多盘是因为容错性下降的原因。
首先,先明确raid5的写惩罚是怎么一回事。我们都知道raid5的特点是N+1的冗余方式,N越大,冗余度越低,而且我们也都知道raid5会把校验信息打散在各个磁盘。这么做的目的当然不是为了好玩,而是为了避免出现校验盘争用的现象。
raid3采用的校验盘放在一起,当两个命令同时对磁盘进行操作的时候,就需要同时操作校验条带。如果这两个操作不属于同一个条带。那么这两个操作就不能同时进行,也就是出现了校验盘争用的现象导致了校验盘瓶颈。
现在问题来了,raid5是如何写入数据的,这个问题直接决定了写惩罚的原理。
raid5的写入情况分成3种:
1.要写入的数据布满整个条带。这种情况可以把要写入的数据的校验信息算好,直接把整个条带写入磁盘。
2.要写入的数据大于半个条带。这种情况可把这个条带上不需要修改的数据读出来,和要写入的数据一起计算校验,并写入磁盘。rcw:read-construct-write,这个是重构一个stripe_head
3.要写入的数据小于半个条带。这种情况需要把要修改的旧数据和原始的校验数据读出来,并连同新数据一起计算校验值。rmw:read-modified-write,这个是覆盖写的方式
4.同样开支采用rcw方式
5.EC纠删码仅使用rcw方式进行,在"小写"的时候所有速度慢
计算公式是 新校验= 老数据 XOR 新数据 XOR 老校验
证明比较简单:
假设原来的校验c=i[0] xor i[1] xor i[2]....xor i[n]
我要把i[0]修改为i1[0],那么c1=i1[0] xor i[1]....xor i[n]
因为 1 xor 0=1 0 xor 0=0 因此 i xor 0=i
得出 c1=i1[0] xor i[1]...xor i[n] xor 0
我们把0换成i[0] xor i[0],c1=i1[0] xor i[1]..xor i[n] xor (i[0] xor i[0])
因为xor 满足结合律,所以c1=x1[0] xor i[0] xor (i[0] xor i[1]...xor i[n])=x1[0] xor x[0] xor c
这个计算公式得到的结论是,在我写入一个segment的时候,不管这个raid有多少块盘组成,我只需要操作两个盘。一个是校验盘,一个是要写入的磁盘。对于这两块盘操作是并发的,可以同时进行。而写惩罚的意义,就在于我需要先把数据读出来,再写入。
正因为如此,在有n块盘的时候,想在不同条带下同时写入数据的并发成为可能。当然前提是每个随机数据并不要太大,占据大部分条带。对于典型的随机读写数据来说,4k是一个比较常见的大小,而raid5的条带深度往往大于4k。因此可以保证每个随机读写都占据了一个segment。在这种情况下可以想象,最大的并发数量是n/2,即每个数据的数据和校验同另外一个数据和校验的segment所处的磁盘都不同。而增加磁盘就相当于增大并发的峰值或者增大并发的概率。这个是单凭直觉就能想到的。因此不管原来有多少块盘,增加磁盘的数量对于随机写来说始终是有利的。
对于大块连续写入,因为都是整个条带写入,n值的升高更能提高写入效率,而不需要考虑概率的影响。
关于raid5的一系列问题的更多相关文章
- RAID5和RAID10,哪种RAID更适合你(上)
[IT168 专稿]存储是目前IT产业发展的一大热点,而RAID技术是构造高性能.海量存储的基础技术,也是构建网络存储的基础技术.专家认为,磁盘阵列的性能优势得益于磁盘运行的并行性,提高设备运行并行度 ...
- 阅读:RAID5和RAID10,哪种RAID更适合你
阅读:RAID5和RAID10,哪种RAID更适合你-------------------------------------------2013/10/06 存储是目前IT产业发展的一大热点,而RA ...
- 在CentOS 7上构建RAID5、LVM和SAMBAserver(5)——架设SAMBAserver
在CentOS 7上构建RAID5.LVM和SAMBAserver(5)--架设SAMBAserver 6. 架设SAMBAserver 6.1. 预备 本节的任务是配置SAMBA服务,共享/home ...
- 转载:RAID5和RAID10,哪种RAID更适合你
转自 http://storage.it168.com/h/2007-06-28/200706281204046_3.shtml 存储是目前IT产业发展的一大热点,而RAID技术是构造高性能.海量存储 ...
- 关于Raid0,Raid1,Raid5,Raid10的总结
RAID0 定义: RAID 0又称为Stripe或Striping,它代表了所有RAID级别中最高的存储性能.RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就 ...
- Windows Server 2012 磁盘管理之 简单卷、跨区卷、带区卷、镜像卷和RAID-5卷
今天给客户配置故障转移群集,在Windows Server 2012 R2的系统上,通过iSCSI连接上DELL的SAN存储后,在磁盘管理里面发现可以新建 简单卷.跨区卷.带区卷.镜像卷.RAID-5 ...
- 问题2: 安装cocoaPods出现的一系列问题
在新电脑上安装cocoaPods的时候,出现了一系列的问题,现在记录下来,方便查看 1.出现 Invalid mark letter (press RETURN) 解决方案:输入 :wq 即可 2. ...
- Ubuntu raid5+lvm实验
首先说一下本次实验的环境:VMware12+Ubuntu (虚拟硬盘+mdadm) 本次实验参照http://allenyu.blog.51cto.com/193668/162067中的流程,下面总结 ...
- 万全R630服务器组装RAID5阵列
随笔, 昨天领导让我给一台服务器做系统,本身作为开发的我有一些挑战.而且领导说的事,怎么着也得努努力试试不是? 下午去机房找到服务器本以为仅仅是装个系统完事,而且据我了解服务器本身有系统,以为拿着系统 ...
随机推荐
- JMeter传递JSON数据
步骤: 1.添加线程组.HTTP请求默认值.察看结果树等参考<JMeter实现bugfree登录接口测试>.这里不再赘述. 2.添加HTTP请求 在Body Data中写上输入的参数.参数 ...
- 新手小白Linux(Centos6.5)部署java web项目(mongodb4.0.2安装及相关操作)
红帽企业或CentOS的Linux上安装MongoDB的社区版: https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat ...
- HDU 4557
http://acm.hdu.edu.cn/showproblem.php?pid=4557 解决一类问题的set用法 #include <iostream> #include <c ...
- linux 读取物理寄存器
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/mman.h ...
- android中传统的创建数据库
1.在Android工程中建立一个class类,且继承与SQLiteOpenHelper. 2.然后到Mainactivity中去new一个MyOpenHelper来找到它 3.第一次创建数据库的时候 ...
- Sublime配置VI插件后 快捷键总结
Vi编辑器快捷键 命令行模式: yy 复制当前行 yy5 复制向下5行 p 粘贴(注意粘贴到最后时候留一个换行符) p5 粘贴5次 dd 删除一行,剪切一行 G 最后一行 1G 第一行 ...
- .NET 中什么样的类是可使用 await 异步等待的?
我们已经知道 Task 是可等待的,但是去看看 Task 类的实现,几乎找不到哪个基类.接口或者方法属性能够告诉我们与 await 相关. 而本文将探索什么样的类是可使用 await 异步等待的? D ...
- getParameter、getParameterValues、getParameterMap用法详解
首先request中的参数parameter是一个map表,如下例 map={username=[xxx],password=[xxx],hobby=[eat,drink]} (1)当调用getPar ...
- (转)Linux 定时关机、休眠命令
立刻关机:sudo haltsudo init 0 sudo shutdown -h nowsudo shutdown -h 0....定时/延时关机:sudo shutdown -h 19:3019 ...
- LeetCode Factorial Trailing Zeroes Python
Factorial Trailing Zeroes Given an integer n, return the number of trailing zeroes in n!. 题目意思: n求阶乘 ...