zfs当中的事务处理(二)

来源:互联网 发布:js cookie 代码 编辑:程序博客网 时间:2024/06/05 04:55
当写buffer的操作完成之后,在dbuf_dirty函数当中,会创建一个dr,dr所属的txg 为 open txg 的 txg id。
然后 他会插入到dnode的dn_dirty_records当中。
为了以后同步的时候使用,所以 根据txgoff=txg & TXG_MASK,算出相应的txgoff,然后插入进去。

当open txg 变成 sync txg的时候,sync thread会调用函数spa_sync ,大范围内的进行同步操作。

spa_sync(spa,txg)

点击(此处)折叠或打开

  1. list_insert_tail(&dn->dn_dirty_records[txgoff], dr);
向下同步的时候,他会从dn->dn_dirty_records[txgoff]当中,同步之前插入的脏记录。
简单的事例代码如下:

点击(此处)折叠或打开

  1. list = dn->dn_dirty_records[txgoff];
  2. dbuf_sync_list(list, tx);
完成了dbuf_sync_leaf 操作,zfs会记录这次写磁盘的块的blk_birth 为txg。相当于块的创建时间,然后执行zio_nowait(zio),异步的将脏记录写入到磁盘上了。

这样就完成了一次写操作。但是我的分析是高度概括的,很多的实现细节由于篇幅有限没法完全说清楚,有机会再逐渐的补充吧。




阅读(146) | 评论(0) | 转发(0) |
0

上一篇:linux打印当前函数调用栈backtrace

下一篇:Linux,zfs耗内存的原因剖析

相关热门文章
  • crtmpserver实现防盗流和流推...
  • 出售HP54100D/HP54100D二手/惠...
  • Flash文件系统TFFS简介
  • 低价出售HP54540A/HP54540A示...
  • 二手惠普HP54600B/HP54600B/HP...
  • 双机热备Oracle数据库服务器操...
  • 双机热备Oracle数据库服务器操...
  • 双机热备Oracle数据库服务器操...
  • 缘聚湘西南 武冈深圳同乡会 欢...
  • 虚拟磁带库 变革数据保护流程(...
  • 这样配置的服务器能够承受8k并...
  • vm里的系统能够ping到nfs,但...
  • bind是否随机从两台master中读...
  • 在win7下用cygwin搭建hadoop,...
  • Mysql的binglog日志能否分库备...
给主人留下些什么吧!~~
原创粉丝点击