Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1900208
  • 博文数量: 211
  • 博客积分: 464
  • 博客等级: 下士
  • 技术积分: 3794
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-24 18:25
个人简介

阿弥陀佛

文章分类

全部博文(211)

文章存档

2020年(2)

2019年(3)

2018年(5)

2017年(6)

2016年(10)

2015年(9)

2014年(73)

2013年(90)

2012年(13)

分类: 服务器与存储

2013-01-11 16:55:22

在对zfs的介绍当中,会提到他会对读写请求排序,然后再合并相邻的请求。
这也是可以理解的。通过阅读代码发现,实际上对请求的排序工作都是在avl树当中进行的。


点击(此处)折叠或打开

  1. struct vdev_queue {
  2.     avl_tree_t    vq_deadline_tree;
  3.     avl_tree_t    vq_read_tree;
  4.     avl_tree_t    vq_write_tree;
  5.     avl_tree_t    vq_pending_tree;
  6.     list_t        vq_io_list;
  7.     kmutex_t    vq_lock;
  8. };
vdev_queue这个数据结构完成了对zio请求的排序工作,并递归的将相邻的请求合并为一个请求。


另再补一下我对dmu层的观察,我发现dmu层的代码是当你发出了读请求之后db->db_blkptr这里面是有内容的,当你发出了写请求时,db->db_blkptr里面是没有内容的,这也很容易理解,毕竟此时还不知道到底应该向哪个盘上写,也不知道应该怎么写,这一切都是由底层来决定。
阅读(2164) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~