在对zfs的介绍当中,会提到他会对读写请求排序,然后再合并相邻的请求。
这也是可以理解的。通过阅读代码发现,实际上对请求的排序工作都是在avl树当中进行的。
-
struct vdev_queue {
-
avl_tree_t vq_deadline_tree;
-
avl_tree_t vq_read_tree;
-
avl_tree_t vq_write_tree;
-
avl_tree_t vq_pending_tree;
-
list_t vq_io_list;
-
kmutex_t vq_lock;
-
};
vdev_queue这个数据结构完成了对zio请求的排序工作,并递归的将相邻的请求合并为一个请求。
另再补一下我对dmu层的观察,我发现dmu层的代码是当你发出了读请求之后db->db_blkptr这里面是有内容的,当你发出了写请求时,db->db_blkptr里面是没有内容的,这也很容易理解,毕竟此时还不知道到底应该向哪个盘上写,也不知道应该怎么写,这一切都是由底层来决定。
阅读(2164) | 评论(0) | 转发(0) |