写点什么

自用学习资料,Linux 内核之【内存管理】的一些分享

作者:奔着腾讯去
  • 2021 年 12 月 23 日
  • 本文字数:4786 字

    阅读完需:约 16 分钟

本文涉及的资料全部打包放到我 Github 仓:

GitHub - 0voice/kernel_memory_management: 总结整理linux内核的内存管理的资料,包含论文,文章,视频,以及应用程序的内存泄露,内存池相关

有需要的可以前去下载,或者觉得还不错,请给我 Star,感谢支持!


📜 100 篇文章

内存管理(一):硬件原理 和 分页管理


内存管理(二):内存的动态申请和释放


内存管理(三):进程的内存消耗和泄漏


内存管理(四):内存与 IO 的交换


内存管理(五):其他工程问题以及调优


---------内存管理系列文章---------


内存管理系列一:启动简介


内存管理系列二:创建启动阶段的页表


内存管理系列三:MMU 前 CPU 初始化及打开 MMU


内存管理系列四:setup_arch 简介(内存管理初始化)


内存管理系列五:alloc_pages 从伙伴系统申请空间简易流程


内存管理系列六:伙伴系统之 buffered_rmqueue


内存管理系列七:slub 初始化


内存管理系列八:slub 创建


内存管理系列九:slub 申请内存


内存管理系列十:slub 回收


内存管理系列十一:slub 销毁


内存管理系列十二:vmalloc 内存机制


内存管理系列十三:VMA 操作


内存管理系列十四:brk


内存管理系列十五:do_page_fault 缺页中断


内存管理系列十六:反向映射 RMAP


内存管理系列十七:内存池


内存管理系列十八:内存回收之 LRU 链表


内存管理系列十九:内存压缩算法


内存管理系列二十:内存压缩算法之数据同步


内存管理系列二十一:内存回收入口


内存管理系列二十二:内存回收核心流程


----------英文文章鉴赏----------


Linux: large-memory management histories


Looking at kmalloc() and the SLUB Memory Allocator


Memory Management in OS: Contiguous, Swapping, Fragmentation


Memory Management in Operating System


Operating System - Memory Management


Virtual Memory in OS: What is, Demand Paging, Advantages


----------分割线----------


Linux 内核(5.4.81)—内存管理模块源码分析


glibc2.23 ptmalloc 原理概述


多核心 Linux 内核路径优化的不二法门之-slab 与伙伴系统


尽情阅读,技术进阶,详解 mmap 原理


浅谈 Linux 内存管理机制


Linux 中的内存管理机制


C++中内存管理之 new、delete


malloc 和 free 的实现原理解析


常用寄存器总结


内存碎片之外部碎片与内部碎片


Linux 虚拟内存管理,MMU 机制,原来如此


一文了解,Linux 内存管理,malloc、free 实现原理


内存管理之内存映射


内存管理之分页


内存管理之内核空间和用户空间


Linux 内存占用分析的几个方法,你知道几个?


深入理解 Linux 内存子系统


深入理解 glibc malloc:内存分配器实现原理


图解 Linux 内存性能优化核心思想


📀 视频

Linux 内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈


内存管理 ---Slab | 内存映射 | kmalloc | vmalloc | 内核源码 | MM | brk


90 分钟了解 Linux 内存架构--- numa 的优势 | slab 的实现 | vmalloc 的原理


内存分配与回收机制---伙伴算法|slab 分析|内存映射|进程虚拟空间|请求调页|写时复制


3 种内存泄漏的解决方案--hook|malloc 函数|free 函数|避免内存泄漏


剖析 Linux 内核 MMU 机制---页表原理|高速缓存|TLB 工作原理|内存映射|不连续页原理


虚拟内存空间之 VMA 实战操作


Linux 内核内存管理(一)---内存映射|空间管理|ARM32/64 页表|slab 分配器|malloc


Linux 内核内存管理(二)---malloc|mmap|反向映射|缺页中断处理|回收页面|KSM 实现|内存漏洞|匿名页面


Linux 内核内存管理(三)---Slab 机制架构|物理页面|管理区|分配/释放页面


Linux 内核之内存页回收---LRU 及反向映射?如何异步回收、直接回收?以及回收 slab 缓存


Linux 内核内存管理专题训练营(一)---伙伴系统|slab 分配器|vmalloc()|malloc()|TLB|虚拟内存|缺页机制


Linux 内核内存管理专题训练营(二)---伙伴系统|slab 分配器|vmalloc()|malloc()|TLB|虚拟内存|缺页机制


Linux 内核精讲之内存管理---物理内存组织|内核引导|内存映射


Linux 物理内存页面分配---kmalloc|slab/slub|页框分配机制


❓ 面试题

59 问:内存管理

  • 如何知道计算机内存布局?内存空间有多少?

  • 何时去探明内存布局?由谁去探明呢?

  • kernel 会加载到何处呢?由什么决定它的位置?

  • kernel 映像如何隐匿自己的位置?

  • 探知的 e820 表如何处理?

  • 内存是连续的吗?

  • 处理完毕的 e820 表如何管理?

  • 启动之时内存如何映射的?

  • 保护模式是怎样的?相比实模式有何特点?

  • 页保护模式是怎样的?

  • 页面映射有何作用?都有什么好处?

  • x86 支持的映射模式都有哪些形式?如何分级的?

  • 内核如何处理多样式的页映射?

  • 面对 NUMA 等复杂内存环境如何处理?

  • 内核页表如何建立?

  • 内核态进程虚拟地址与物理内存的映射关系?

  • 用户态进程虚拟内存与物理内存的关系如何?

  • 内存管理框架如何构造?

  • Kernel 内存空间如何划分?

  • 64 位地址空间如何划分?

  • 内存分配空间如何实现不可预测性?

  • 物理内存是如何管理的?怎么分配的?

  • Buddy 管理算法所处的位置?在什么地方体现?

  • 内存碎片化了怎么办?

  • 如何为驱动应用预留大块连续内存?

  • LRU 如何运作?

  • 内存回收是如何运作的?

  • 相同的内存浪费内存空间了?

  • 页面空间监测手段有什么?

  • 如何降低页面分配的可预测性?

  • 如何防范内存泄密?

  • 如何查看 Buddy 管理算法下的内存类型信息?

  • 小块内存空间如何分配管理?

  • SLUB 如何管理内存的?

  • 如何查看 slab 信息?

  • 如何防范 slab 空闲链表的攻击?

  • SLUB 分配如何防止被预判?

  • kmalloc 和 kfree 如何实现的?

  • kernel 的内存泄漏如何定位?

  • kernel 有内存检测机制吗?

  • 支离破碎的内存如何得到大块连续内存?

  • 如何查看 vmalloc 信息?

  • Percpu 内存空间如何管理的?

  • 从 proc 接口还可以看到什么?

  • 容器的内存如何管理?

  • 内核如何防范信息外泄?

  • 物理内存页面耗尽了如何处理?

  • 内核代码段如何进行自我防护?

  • 内核代码段如何防护注入?

  • kernel 程序空间能否再压榨?

  • 面向用户态程序,内核提供了哪些内存分配接口?

  • brk 接口实现了什么?

  • mmap 接口实现了什么?

  • 用户态内存如何管理?

  • glibc 对 brk 和 mmap 如何使用?

  • 如何查看进程内存映射信息?

  • 如何查看进程内存占用实际情况?

  • 如何查看进程内存片段映射详情?

  • 如何查看进程内存映射汇总信息?


📃 100 篇论文

《ARM 的虚拟内存管理技术的研究》


《C 语言的内存漏洞分析与研究》


《FreeRTOS 内存管理方案的分析与改进》


《Linux Memory Management》


《Linux 内存管理分析与研究》


《Linux 内存管理的设计与实现》


《Linux 内核中内存池的实现及应用》


《Linux 内核中动态内存检测机制的研究》


《Linux 内核伙伴系统分析》


《Linux 内核内存池实现研究》


《Linux 实时内存的研究与实现》


《Linux 操作系统内核分析与研究》


《Memory Management 101: Introduction to Memory Management in Linux》


《Memory Management in Linux》


《Memory Management》


《NUMA 架构内多个节点间访存延时平衡的内存分配策略》


《Nginx Slab 算法研究》


《TCP_IP 协议栈的轻量级多线程实现》


《VC 中利用内存映射文件实现进程间通信的方法》


《Virtual Memory Management Techniques in 2.6 Kernel and Challenges》


《Visual C 中利用内存映射文件在进程之间共享数据》


《Linux Physical Memory Page Allocation》


《一个内存分配器的设计和实现》


《一种 Linux 内存管理机制》


《一种 TLB 结构优化方法》


《一种优化的伙伴系统存储管理算法设计》


《一种基于虚拟机的动态内存泄露检测方法》


《一种提高 Linux 内存管理实时性的设计方案》


《一种改进的 Linux 内存分配机制》


《一种改进的伙伴系统内存管理方法》


《一种跨平台内存池的设计与实现》


《一种高效的池式内存管理器的设计》


《云计算平台中多虚拟机内存协同优化策略研》


《云计算平台中多虚拟机内存协同优化策略研究》


《内存管理机制的高效实现研究》


《分页存储管理系统中内存有效访问时间的计算》


《利用内存映射连续性提高 TLB 地址覆盖范围的技术评测》


《动态内存分配器研究综述》


《动态存储管理机制的改进及实现》


《基于 C 的高效内存池的设计与实现》


《基于 C 自定义内存分配器的实现》


《基于 Linux 内核的动态内存管理机制的实现》


《基于 Linux 内核页表构建内核隔离空间的研究及实现》


《基于 RDMA 和 NVM 的大数据系统一致性协议研究》


《基于 RDMA 高速网络的高性能分布式系统》


《基于 RelayFS 的内核态内存泄露的检测和跟踪》


《基于 linux 用户态可自控缓冲区管理设计与实现》


《基于 multimap 映射的动态内存分配算法探究》


《基于云计算虚拟化平台的内存管理研究》


《基于内存池的空间数据调度算法》


《多核系统内存管理算法的研究》


《实时系统内存管理方案的设计与实现》


《对 linux 伙伴系统及其反碎片机制的研究》


《嵌入式实时系统动态内存分配管理器的设计与实现》


《并发数据结构及其在动态内存管理中的应用》


《应用协同的进程组内存管理支撑技术》


《支持高性能 IPC 的内存管理策略研究》


《有效的 C 内存泄露检测方法》


《浅析伙伴系统的分配与回收》


《用户态内存管理关键技术研究》


《申威处理器页表结构 Cache 的优化研究与实现》


《虚拟化系统中的内存管理优化》


《面向 Linux 内核空间的内存分配隔离方法的研究与实现》


《页面分配器的研究与实现》


🌌 内存池相关

文章

  • 18 张图揭秘高性能 Linux 服务器内存池技术是如何实现的

  • C++ 实现高性能内存池

  • Nginx 内存池管理

  • 性能优化:高效内存池的设计与实现

框架

🍺 内存泄露

  • 5 useful tools to detect memory leaks with examples

  • 内存泄漏的在线排查

🛠 内存管理工具

Valgrind:Valgrind 是一个用于构建动态分析工具的工具框架。有一些 Valgrind 工具可以自动检测许多内存管理和线程错误,并详细分析你的程序。您还可以使用 Valgrind 来构建新的工具。 Valgrind 发行版目前包括 7 个产品质量的工具:一个内存错误检测器、两个线程错误检测器、一个缓存和分支预测分析器、一个调用图生成缓存和分支预测分析器,以及两个不同的堆分析器。它还包括一个实验性的 SimPoint 基本块向量生成器。


AddressSanitizer:Google 出品的内存检测工具

内存性能指标

指标-工具映射图

工具-指标映射图

分析思路

a. 先用 free 和 top,查看系统整体的内存使用情况。


b. 用 vmstat 及 pidstat 查看内存变化情况,确定内存问题类型


c. 详细分析,如内存分配分析、缓存/缓冲区分析、具体进程的内存分析


用户头像

wx:【后台服务架构师】,第一手掌握资源。 2021.05.20 加入

wx:【后台服务架构师】,第一手掌握资源。 专注于整理it资料的百科全库,让程序学起来不再麻烦,学习技术一套资料搞定。 系统学习免费课程:https://ke.qq.com/course/417774?flowToken=1033508

评论

发布
暂无评论
自用学习资料,Linux内核之【内存管理】的一些分享