阿弥陀佛
发布时间:2013-01-16 16:27:51
在dmu buffer当中,最为常见的是互斥锁,但是有一个问题随之而来,如何使用互斥锁,而且怎么样来规定mutex锁所保护的范围呢?/* db_mtx protects the members below */kmutex_t db_mtx;/* * Current state of the buffer */dbuf_states_t db_state;/* * Refcount accessed by dmu_buf_{hold,rele}..........【阅读全文】
发布时间:2013-01-15 19:16:05
看了论坛http://bbs.chinaunix.net/thread-4063853-1-1.html里面的讨论,掌握了一个之前一直不会解决的问题。那就是如何运行gdb 带参数调试?比如 ./a.out 1 2 3你如果运行 $gdb ./a.out 1 2 3 肯定会报错。正确的做法是:1,gdb --args ./A V1 V2 V32,gdb ./A,进.........【阅读全文】
发布时间:2013-01-15 10:47:00
有些时候,在zfs当中,你加入printk语句,发现无法加,会编译报错,而很奇怪的是有些地方可以加printk,而有些地方不能加。根据我的观察发现,只要加入宏定义就可以了。方法如下:#ifdef __KERNEL printk("HELLO WORLD\n");#endif.........【阅读全文】
发布时间:2013-01-13 20:53:21
zfs是有两个缓冲区的。首先是dmu buffer,如果dmu buffer中没有数据再找arc buffer,如果找到了,那么就直接调用回调函数,将arc buffer的内容传给dmu buffer。如果再找不到就找磁盘。具体的实现细节如下: dbuf_read 首先会看 dmu buffer的状态,如果是UNCACHED。就会调用 dbuf_read_impl函数。dbuf_read_impl函数会调用dsl_read,进而从arcbuffer中找数据。找的方法是根据db的db_blkptr来查找。 点击(此处)折叠或打开(voi......【阅读全文】
发布时间:2013-01-11 16:55:22
在对zfs的介绍当中,会提到他会对读写请求排序,然后再合并相邻的请求。这也是可以理解的。通过阅读代码发现,实际上对请求的排序工作都是在avl树当中进行的。 点击(此处)折叠或打开struct vdev_queue {????avl_tree_t????vq_deadline_tree;????avl_tree_t????vq_read_tree;????avl_tree_t??......【阅读全文】