Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92389
  • 博文数量: 26
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 345
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-10 15:51
文章分类

全部博文(26)

文章存档

2011年(1)

2009年(25)

我的朋友

分类: LINUX

2009-08-14 09:20:22

读均衡

       RAID1中各磁盘的内容是相同的,读操作可以以任何一个磁盘为目标进行提交,读均衡算法就是为了找到一个最为合适的读操作磁盘。

       read_balance完成读均衡算法,说明如下:

1.      如果磁阵正在进行同步操作,且访问落在同步窗口内,则使用和sync_request找读目标盘一样的算法,找出目标磁盘,此时的目标盘和同步读磁盘是一样的,返回。

2.      磁阵中last_used保留了上一次读均衡选择的磁盘号。从上一个访问的磁盘开始,在磁阵中找到下一个轮选的磁盘newdisk(注意,如果上一次访问磁盘仍然正常工作,首选的是仍然是上一次访问的磁盘)。

3.      每一次成功的读写操作(包括同步读写操作)完成后,都会更新操作目标磁盘的磁头位置(update_head_pos),如果newdisk的磁头位置正好位于本次操作的起点,则返回newdisk

4.      这一步就是newdisk的磁头和本次操作的起点不同了。再次遍历磁阵所有可用磁盘,如果磁盘上无等待的操作,则返回此盘;否则找到当前磁头位置和本次操作位置最为接近的磁盘返回。

Write Behind模式

       是否启动write behind模式,取决于bitmap的超级块的设置。

对于RAID1而言,延迟写的意义为,只要数据写入了所有非WriteMost属性的磁盘,就认为写入成功,返回上层;而如果不是延迟写的话,则需要写入所有盘以后才能认为写入成功。如果不考虑读负荷均衡的话,那么RAID1可以只读一个磁盘的数据,其他盘都可以设置为WriteMost,这些盘都可以延迟写,也就是只要写入被读操作访问的盘以后,就可以认为写入成功,这样可以提高写入效率。

成功返回后,该bio会被调用者释放,由于此时有些盘还没有完成写入,此时这些没有写入的盘从哪里去获取信息呢?答案是需要另外拷贝一份(raid1make_request中,behind_pages),在所有盘都写入成功后再将这个拷贝释放掉(raid1_end_write_request)。

 

阅读(1040) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~