linux内存管理资料,Linux资料汇总之内存管理

网络上面有很多坑爹的文章,误导不少人,很多人对Linux的很多误解可能来自于这些广泛流传的技术文章。下面我们推出一个系列来总结。先从内存管理开始。

1. compact_memory

网上常见文字:

compact_memory

只有在启用了CONFIG_COMPACTION选项才有效。当向该文件(/proc/sys/vm/compact_memory)写入1时,所有的内存域都会被压缩,使空闲的内存尽可能形成连续的内存块。

”“

当内核编译参数设置了CONFIG_COMPACTION,就会在/proc/sys/vm/compact_memory有入口文件。将1写入到这个文件,则所有的zones就会进行压缩,以便能够尽可能地提供连续内存块。对于需要分配大页的时候这个功能非常重要,不过,进程会在需要时直接进行内存压缩(compact memory)。

修正

这里的compact与"压缩(compress)"没有半毛钱关系,compact是使得空闲内存更加紧凑的内存迁移技术。实现的效果如下:

假设红色和白色分别是空闲和被占用的页面,经过内存compaction之前的状态为:

bd7b8fde66fbd4e8b1154d9a8db5e295.png

那么内存的compact行为可以达到如下目的,空闲内存被扎堆了,这样如果要申请更大的连续内存,则可以满足:

d9dcc567a6982c445fa23b3f9ee7fe29.png

如果要直译,compact memory可以翻译为“内存紧凑”。但是绝对不是压缩,因为zRAM之类的才是采用了压缩技术。

2. cached和buffers的区别

网上常见文字:

Buffers与cached啥区别

A buffer is something that has yet to be “written” to disk.

A cache is something that has been “read” from the disk and stored for later use

对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。

所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached.

修正

此处极容易让人产生误解,以为free命令里面的buffers是为了写而产生,而cached是为了读而产生。

真实情况下,cached和buffers与读写没有半毛钱关系,它们都是缓存,唯一的区别是,如果你cat /dev/sda1 > /dev/null,这样/dev/sda1内容进入buffers,如果你cat /mnt/aaa/bbb.c > /dev/null,则/mnt/aaa/bbb.c的内容进入cached。所以,这两种cache,一个以裸设备或分区为背景,一个以文件系统里面的文件为背景,无论读写皆然。

buffers主要有2个用户:

应用直接访问裸分区

文件系统本身的实现,会认为/dev/sda1是个裸设备,因此文件系统的metadata会缓存到buffers

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值