写在前面

zram是Linux内核提供的一种虚拟内存压缩功能,通过在将一部分内存模拟成块设备,并将压缩后的内存写到这部分模拟的块设备中,直到必须使用硬盘上的交换空间,zram 本质是就是一个块设备。

zram的触发时机是在进行内存回收的时候,如下:

1.kswapd:当内存watermark低于low水位时,kswapd回收线程被唤醒。

2.direct reclaim:内存分配过程中进入slowpath,进行直接内存回收。

3.compact:用户进程通过操作zram暴露的结点”echo 1 > /sys/block/zram0/compact"。

一、原理学习

zram机制运行在内存回收链路上,在内存回收过程中,会通过将当前不活跃的内存页进行shrink,如果是匿名页则进行pageout,触发内存压缩并存放到zram中。

以Android 设备上使用的 zram swap为例,其主要原理就是从内存分配一块区域出来用作 swap 分区,每次如果内存空间不够了,不是把应用程序杀掉,而是把应用程序所占用的内存数据复制到 swap 分区,等切换回来的时候就可以直接把这部分数据恢复到内存当中,节省重新开启所需的时间。而被放到 swap 分区的应用程序,所占用的内存都是被压缩过的,比如,微信在普通内存中占用 50 MB 的空间,如果压缩率为 0.4,则放到 swap 分区里面的数据只需要 20 MB 的空间,这样 swap 分区里面就可以存放更多后台临时不用的应用程序,变相扩展了内存的大小。

1.1 内存压缩链路

Linux内存从0到1学习笔记(11.2 内存优化方案之内存压缩zram)相关推荐

  1. Linux内存从0到1学习笔记(4,TLB)

    一.TLB简介 Kernel初始化的时候,会在初始化内存中创建页表:而处理器读取指令和数据的时候需要首先通过MMU查表得到物理地址,然后在访问物理地址读取指令或数据.MMU查表过程汇中需要4次访问内存 ...

  2. Linux内存从0到1学习笔记(6.6,物理内存初始化之预留内存)

    写在前面 前面的章节中有提到过,memblock分配器会将内存划分为动态管理的内存(保存在memblock的memory type的数组)和静态预留的内存(保存在memblock的reserved t ...

  3. Linux内存从0到1学习笔记(6.7,物理内存初始化之CMA初始化)

    写在前面 CMA (contiguous memory allocator)连续内存分配器,被开发用于分配大的.物理连续的内存块,其底层还是依赖内核伙伴系统这样的内存管理机制.通过这套机制,在设备驱动 ...

  4. Linux内存从0到1学习笔记(9.1,内存优化调试之kswapd0触发原理)

    写在前面 Linux内核中有一个非常重要的内核线程kswapd,它负责在内存不足时回收页面.kswapd内核线程初始化时会为系统中每个内存结点创建一个名为"kswapd%"内核线程 ...

  5. Linux内存从0到1学习笔记(8.5,CMA内存分配)

    CMA是通过cma_alloc分配的.cma_alloc() --> alloc_contig_range(..., MIGRATE_CMA,...),向刚才释放给buddy system的MI ...

  6. 【C#8.0 and .NET Core 3.0 高级编程学习笔记】

    @C#8.0 and .NET Core 3.0 高级编程学习笔记 前言 为了能精细地完成对C#语言的学习,我决定选择一本书,精读它,理解它,记录它.我想选择什么书并不是最重要的,最重要的是持之以恒的 ...

  7. CSAPP学习笔记——第九章 虚拟内存(一)内存陷阱

    CSAPP学习笔记--第九章 虚拟内存(一)内存陷阱 int val; ... scanf("%d", val); 引用了错误的指针,scanf将val解释为一个地址,并试图将一个 ...

  8. 2017-2-15从0开始前端学习笔记(HTML)-图片-表格-表单

    2017-2-15从0开始前端学习笔记-图片-表格-表单 标签 图片 图片<img src="#" alt="文本说明 不能加载图片时显示" title= ...

  9. 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)

    技术qq交流群:JavaDream:251572072  教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...

最新文章

  1. MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN
  2. 谷歌本地不支持websocket_django开发-websocket的实现
  3. 计算机网络与网站设计知识点,计算机网络技术知识点总结-20210525075410.docx-原创力文档...
  4. case函数,replace函数
  5. wcdma系统随机接入过程的流程图_WCDMA终端的随机接入过程的射频测试
  6. python代码删掉了几行怎么撤回_仅78行代码实现微信撤回消息查看 | Python itchat
  7. Centos6.9 minmal 安装
  8. VueX扒文档的整理
  9. php header 跳转 ie问题
  10. 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析)
  11. VMware vSphere 5.1 群集深入解析(二十八)- vSphere配置
  12. Atlassian Confluence安装以及如何更改数据库
  13. 2008-03-18 中午日出傍晚雨
  14. ReviewBoard 系列图文教程之(一)—— 安装
  15. WPS(Word)中图注、域的使用基础
  16. mipi的dsi全称_MIPI-DSI/CSI协议介绍
  17. 计算机自动维护有用吗,Win10怎么开启自动维护功能?系统自动维护有什么作用?...
  18. Java 删除文件/文件夹
  19. 高性能v100 gpu服务器,TESLA V100 GPU 加速性能指南
  20. (LeetCode C++)跳跃游戏

热门文章

  1. 你的“脸”,5毛钱就能买到
  2. React Native开发基础
  3. word在另外计算机格式不对,为什么word 2007文件在不同电脑上排版显示不同?应该如何解决?...
  4. 小米估值≠苹果*腾讯
  5. mysql 视图使用 WITH
  6. 巨巨的磁盘(线段树)
  7. 7-6 寻找大富翁 (25分)
  8. YUV 后面数字的含义_笔记本电脑CPU字母含义及天梯图
  9. HTML注释标签以及注释快捷键的用法
  10. java中常用的日期工具类