Linux,zfs耗内存的原因剖析

    有些时候大家可能觉得Linux系统刚刚启动的时候没什么操作,为什么这么耗内存。最最常见的回答就是Linux会将很多的东西cache到内存当中。这么说是笼统的。
    linux的cache有很多种,linux之所以这么消耗内存,主要是内核的设计即使如此。
    我总结了一下,主要有两个大类:
    1.slab会先从内存当中申请一些内存,以备内核申请一个核心数据结构的时候能够快速得到满足,提高内核申请一些关键数据结构的效率。
    2.page cache,将常常需要访问的文件及数据块cache到内存当中,这样访问文件的时候就不会每次都访问磁盘。效率大大的增加了。

同时我们也可以发现有些时候,zfs on linux 这个zfs消耗内存也比较大。
    那是由于zfs需要copy on write,那么copy的操作,肯定是copy到内存当中,也就是常说的dbuf。而dbuf有几种状态,从UNCACHED 变到CACHED的状态的时候,需要从内存中申请,以备copy操作使用。
    另外一点就是由于他的dbuf经常会申请和释放,所以zfs会在刚刚创建的时候就申请大量的内存,建立几个缓冲区,

点击(此处)折叠或打开

  1. kmem_cache_t *zio_cache;
  2. kmem_cache_t *zio_link_cache;
  3. kmem_cache_t *zio_vdev_cache;
  4. kmem_cache_t *zio_buf_cache[SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT];
  5. kmem_cache_t *zio_data_buf_cache[SPA_MAXBLOCKSIZE >> SPA_MINBLOCKSHIFT];
然后dbuf如果需要申请内存,根据arc buffer的类型,如果dbuf中存放的是数据 那么就从zio_data_buf_cache当中申请,如果申请的内容是meta data,那么就可以从zio_buf_cache当中申请。
   这就是linux及sun 的zfs为什么这么消耗内存的原因了。

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

上一篇:zfs当中的事务处理(二)

下一篇:zfs的块设备写操作很慢的原因分析

相关热门文章
  • 世界第四大铁矿公司债务问题进...
  • 汇丰银行上半年利润大增...
  • 网资为什么比异地好做呢?...
  • 《Oracle11gR2详细安装文档》...
  • java.lang.OutOfMemoryError: ...
  • 双机热备Oracle数据库服务器操...
  • 双机热备Oracle数据库服务器操...
  • 双机热备Oracle数据库服务器操...
  • 缘聚湘西南 武冈深圳同乡会 欢...
  • 虚拟磁带库 变革数据保护流程(...
  • 这样配置的服务器能够承受8k并...
  • vm里的系统能够ping到nfs,但...
  • bind是否随机从两台master中读...
  • 在win7下用cygwin搭建hadoop,...
  • Mysql的binglog日志能否分库备...
给主人留下些什么吧!~~
评论热议

你可能感兴趣的:(服务器与存储)