0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux资料汇总之内存管理

Linux阅码场 来源:未知 作者:邓佳佳 2018-03-27 11:39 次阅读

网络上面有很多坑爹的文章,误导不少人,很多人对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之前的状态为:

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

如果要直译,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个用户:

  1. 应用直接访问裸分区

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

3. PSS

许多人引用了关于pss的这个解释:

https://yq.aliyun.com/articles/24048

“PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)

修正

这个文档有3个问题:

  1. 两个进程共享的部分,远远不是只有共享库,比如我们在Linux里面开2个bash进程,那么这2个bash,实际是共享1个代码段;其他的mmap()的时候shared的映射当然也是。

  2. 共享库里面的内存,也不是都共享,只是代码段等不会做CoW(写时拷贝)的内存才会跨进程共享。

  3. USS去掉的是所有跨进程共享的内存,不是只去掉了共享库。

上图中的4这片内存,是libc的代码段在内存驻留的部分,被3个进程共享;5这段内存,是bash的代码段,被2个进程(1044和1045)指向。在计算PSS的时候,这些都需要被比例化。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10942

    浏览量

    206542
  • 内存管理
    +关注

    关注

    0

    文章

    161

    浏览量

    14043

原文标题:宋宝华:网上坑爹的Linux资料汇总之内存管理

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux内存管理是什么,Linux内存管理详解

    Linux内存管理 Linux内存管理是一个非常复杂的过程,主要分成两个大的部分:内核的
    的头像 发表于 05-11 17:54 5190次阅读
    <b class='flag-5'>Linux</b>的<b class='flag-5'>内存</b><b class='flag-5'>管理</b>是什么,<b class='flag-5'>Linux</b>的<b class='flag-5'>内存</b><b class='flag-5'>管理</b>详解

    关于Linux内存管理的详细介绍

    Linux内存管理是指对系统内存的分配、释放、映射、管理、交换、压缩等一系列操作的管理。在
    发表于 03-06 09:28 852次阅读

    Linux内核的内存管理详解

    内存管理的主要工作就是对物理内存进行组织,然后对物理内存的分配和回收。但是Linux引入了虚拟地址的概念。
    发表于 08-31 14:46 390次阅读
    <b class='flag-5'>Linux</b>内核的<b class='flag-5'>内存</b><b class='flag-5'>管理</b>详解

    linux最全的资料汇总

    linux最全的资料汇总
    发表于 12-03 13:43

    linux内存管理

    公交,地铁,睡前必备,方便大家查阅,持续更新,敬请期待!---更新于2020-02-12linux 内存管理Linux内存初始化CPU是
    发表于 07-22 08:41

    linux内存管理机制浅析

    本内容介绍了arm linux内存管理机制,详细说明了linux内核内存管理,
    发表于 12-19 14:09 73次下载
    <b class='flag-5'>linux</b><b class='flag-5'>内存</b><b class='flag-5'>管理</b>机制浅析

    程序设计之内存管理

    使用C语言编程时,关于程序设计之内存管理
    发表于 05-20 17:01 0次下载

    linux内存管理

    linux内存管理
    发表于 10-24 11:12 3次下载
    <b class='flag-5'>linux</b><b class='flag-5'>内存</b><b class='flag-5'>管理</b>

    Linux磁盘存储区管理原理分析及技巧汇总

    Linux管理磁盘贮存区算的上一个技巧,很多朋友在这上面常常问我,今天我就把这方面的东西汇总一下,从Linux特有的交换分区的原理开始介绍Lin
    发表于 11-07 10:14 0次下载

    嵌入式Linux内存管理的知识汇总

    这个内存管理的知识点还真的需要我们专门的去理解一下,今天大家一起来学习学习嵌入式Linux内存管理的知识。 1.不涉及
    发表于 04-09 05:58 890次阅读
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>内存</b><b class='flag-5'>管理</b>的知识<b class='flag-5'>汇总</b>

    你知道linux内存管理基础及方法?

    linux内存管理采取的分页存取机制,会将内存中不经常使用的数据块交换到虚拟内存中。linux
    发表于 04-28 17:12 994次阅读

    Linux内核开发框架学习资料汇总

    Linux内核开发框架学习资料汇总
    发表于 06-17 09:29 23次下载

    嵌入式 Linux 中的内存管理

    点击 嵌入式 Linux 中的内存管理
    发表于 11-02 10:36 12次下载
    嵌入式 <b class='flag-5'>Linux</b> 中的<b class='flag-5'>内存</b><b class='flag-5'>管理</b>

    Linux内存管理的基础知识科普

    Linux内存管理可谓是学好Linux的必经之路,也是Linux的关键知识点,有人说打通了内存
    的头像 发表于 06-08 15:24 1755次阅读

    Linux 内存管理总结

    一、Linux内存管理概述 Linux内存管理是指对系统内存
    的头像 发表于 11-10 14:58 221次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>内存</b><b class='flag-5'>管理</b>总结