Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1863566
  • 博文数量: 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)

分类: 服务器与存储

2012-12-27 10:08:41

    有些时候大家可能觉得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为什么这么消耗内存的原因了。

  
阅读(4608) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~