【学习笔记】详细图解RAID设计(操作系统导论38章作业)

通过完成操作系统导论38章作业来理解廉价冗余磁盘阵列RAID的四种设计的块位置计算,其中详细图解RAID-5中的奇偶校验块跨驱动器旋转的左对称、左不对称方式。

38.1

Use the simulator to perform some basic RAID mapping tests. Run with different levels (0, 1, 4, 5) and see if you can figure out the mappings of a set of requests. For RAID-5, see if you can figure out the difference between left-symmetric and left-asymmetric layouts. Use some different random seeds to generate different problems than above.

RAID-0

运行指令:python2 raid.py -n 5 -L 0 -R 30
在这里插入图片描述在这里插入图片描述
采用RAID-0,只是简单的条带化。所以磁盘序号=地址%磁盘数,偏移量=地址/磁盘数,磁盘数是4,所以结果如下:

地址 磁盘序号=地址%4 偏移量=地址/4
25 1 6
12 0 3
15 3 3
23 3 5
14 2 3

-c验证:
在这里插入图片描述

RAID-1

python2 raid.py -n 5 -L 1 -R 30
在这里插入图片描述
在这里插入图片描述
RAID-1每个块都有镜像对,所以磁盘序号=地址*2 % 磁盘数(/ +=1),偏移量=地址*2 / 磁盘数,磁盘数是4.

地址 磁盘序号=地址*2%4 (/+1) 偏移量=地址*2/4
25 2/3 12
12 0/1 6
15 2/3 7
23 2/3 11
14 0/1 7

-c验证:
在这里插入图片描述

RAID-4

python2 raid.py -n 5 -L 4 -R 30

在这里插入图片描述
如图,RAID-4最后一个磁盘是奇偶校验,所以磁盘序号=地址 % (磁盘数-1),偏移量=地址 / (磁盘数-1),磁盘数是4 。

地址 磁盘序号=地址%3 偏移量=地址/3
25 1 8
12 0 3
15 3 3
23 3 5
14 2 3

-c验证:
在这里插入图片描述

RAID-5

RAID-5采用了奇偶校验块跨驱动器旋转,如下图:
在这里插入图片描述
但是旋转的方式可能会不一样。

左对称

设置磁盘数位5 -D 5,样例数40 -n 40,顺序读写-W seq左对称 -5 LS,指令是:python2 raid.py -n 40 -L 5 -D 5 -W seq -5 LS -c

位置如下面表格:

磁盘0 磁盘1 磁盘2 磁盘3 磁盘4
0 1 2 3 P0
5 6 7 P1 4
10 11 P2 8 9
15 P3 12 13 14
P4 16 17 18 19
20 21 22 23 P5
25 26 27 P6 24
30 31 P7 28 29
35 P8 32 33 34

注意,方向如下:
在这里插入图片描述

左不对称

然后看到左不对称 -5 LApython2 raid.py -n 40 -L 5 -D 5 -W seq -5 LA -c

位置如下:

磁盘0 磁盘1 磁盘2 磁盘3 磁盘4
0 1 2 3 P0
4 5 6 P1 7
8 9 P2 10 11
12 P3 13 14 15
P4 16 17 18 19
20 21 22 23 P5
24 25 26 P6 27
28 29 P7 30 31
32 P8 33 34 35

方向如下:
在这里插入图片描述
我太南了 查阅资料发现:左/右指的是校验信息如何分布,而对称/非对称指的是数据如何分布。

RAID5 的奇偶校验信息是在磁盘上交叉存放的。有四种分布方式: 1、向左对称 2、向 左非对称 3、向右对称 4、向右非对称。 基本上,左/右指的是校验信息如何分布,而对称/非对称指的是数据如何分布。"左"算 法中,校验从最后一个磁盘开始,每一个条带将校验向靠近第一个磁盘的方向移动一个磁盘的位置(必要时重绕)。而"右"算法则相反,其校验从第一个磁盘开始,每一个条 带将校验向靠近最后一个磁盘的方向移动一个磁盘的位置(必要时重绕)。"非对称"算 法将给定条带的数据块按简单的顺序方式放置,必要时跳过条带,并且总是从第一个磁盘上的第一个条带的数据块开始。与之不同的是,"对称"算法并不是将条带的第一个块放在第一个磁盘上,而是连续将数据块按顺序磁盘序列的方式分布,只是在必要时重绕回第一个磁盘。因此对称算法对于大量顺序读操作有更好的性能。

说白了就是下面的草图那样(红线是奇偶校验位,黄线是地址编号):我画得真好
在这里插入图片描述

38.2

Do the same as the first problem, but this time vary the chunk size with -C. How does chunk size change the mappings?

就是说改变大块的大小,看看有什么不一样。

那就把大块的大小由原来的4096乘以2变成8192。

RAID-0

python2 raid.py -n 20 -L 0 -D 4 -W seq -C 8192 -c
在这里插入图片描述
跟书上图一样了:
在这里插入图片描述

RAID-1

python2 raid.py -n 20 -L 1 -D 4 -W seq -C 8192 -c
在这里插入图片描述

如表格:

磁盘0 磁盘1 磁盘2 磁盘3
0 0 2 2
1 1 3 3
4 4 6 6
5 5 7 7
8 8 10 10
9 9 11 11

RAID-4

python2 raid.py -n 20 -L 4 -D 4 -W seq -C 8192 -c
在这里插入图片描述
位置如下:

磁盘0 磁盘1 磁盘2 磁盘3
0 2 4 P
1 3 5 P
6 8 10 P
7 9 11 P
12 14 15 P
13 15 16 P

RAID-5

python2 raid.py -n 20 -L 5 -D 4 -W seq -C 8192 -c

image-20191229132030845

位置如下:

磁盘0 磁盘1 磁盘2 磁盘3
0 2 4 P
1 3 5 P
8 10 P 6
9 11 P 7
16 P 12 14
17 P 13 15
P 18 20 22
P 19 21 23

方向如下:
在这里插入图片描述
奇偶校验大块的旋转方式跟块大小无关,看成一个整体就行了。

38.3

Do the same as above, but use the -r flag to reverse the nature of each problem.

就是说用-r标志,使得问题反转,之前是告诉逻辑地址,求物理地址;现在是告诉物理地址,求逻辑地址。

例如这样:python2 raid.py -n 10 -L 1 -D 4 -R 30 -r
在这里插入图片描述
整个位置布局我都分析出来了,所以计算肯定没问题了,跳过吧。

38.4

Now use the reverse flag but increase the size of each request with the -S flag. Try specifying sizes of 8k, 12k, and 16k, while varying the RAID level. What happens to the underlying I/O pattern when the size of the request increases? Make sure to try this with the sequential workload too (-W sequential); for what request sizes are RAID-4 and RAID-5 much more I/O efficient?

用-S改变请求的大小,看看底层I/O模式会发生什么。

8k

先是8k的写请求,大块的大小是4k,所以会是连续写两个大块,相当于对地址和地址+1的请求。

RAID-0python2 raid.py -R 30 -n 5 -L 0 -S 8k -w 100 -c (-w 100是写请求)
在这里插入图片描述
显然,每次直接写入两个块,2次写操作。

RAID-1python2 raid.py -R 30 -n 5 -L 1 -S 8k -w 100 -c
在这里插入图片描述
可以看出,因为有镜像,每次写入两个块,以及它的镜像块,所以会有4次写操作。

RAID-4:python2 raid.py -R 30 -n 5 -L 4 -S 8k -w 100 -c
在这里插入图片描述
正常如果请求的大小跟块大小一样,应该要次先读地址对应的块,再读奇偶校验块,判断是否需要改变,然后再写入地址对应的块和校验块即可。但是请求大小为8k的话,其实是写入地址和地址+1的块,若两个块不连续,则需要两次上述的操作,需要8个I/O操作;若这两个块是连续的(偏移量一样),奇妙的事情发生了,例如第一个例子,要写25(还有26),如下图,只要读24即可,然后24跟需要写入的25、26进行异或运算可以算出奇偶校验块的值,就直接写入25、26和P,由原来的8个I/O操作减少到4个。
在这里插入图片描述

RAID-5:python2 raid.py -R 30 -n 5 -L 5 -S 8k -w 100 -c
在这里插入图片描述
同理。

12K

同理,RAID-0和RAID-1都是直接写入三个块,而RAID-4和RAID-5能用到上面说的连续块减少I/O操作的情况更频繁了。

python2 raid.py -R 30 -n 5 -L 0 -S 12k -w 100 -c ( -L 改变即可)
在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZgbiOPGO-1577603333908)(38.assets/image-20191229142146162.png)]
在这里插入图片描述
在这里插入图片描述

16K

与12K同理。

python2 raid.py -R 30 -n 5 -L 0 -S 16k -w 100 -c ( -L 改变即可)

图略。

当请求大小为16k时,RAID-4和RAID-5效率更高。因为连续的写入4个块,能更多地用到上述的连续块节省I/O的方法。

RAID比较

最后附上各级RAID在容量、可靠性和性能上的对比。
在这里插入图片描述

发布了10 篇原创文章 · 获赞 14 · 访问量 644

猜你喜欢

转载自blog.csdn.net/weixin_42368748/article/details/103753923