首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    认识 Linux 内存构成:Linux 内存调优之虚拟内存与物理内存认知

    写在前面 博文内容涉及 Linux 内存构成基本认知 包括虚拟内存和物理内存映射,多级页表和MMU简单认知 理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。...所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》 认识 Linux 内存构成:虚拟内存与物理内存 计算机中的进程小伙伴一定不陌生,...48 位虚拟地址(低 48 位),高 16 位(48-63)需填充为第 47 位的值,形成规范地址(Canonical Address),实际可寻址空间为 256 TB(2^48 字节),分为两部分: 用户空间...系统默认使用完整的 48 位地址,但用户进程实际可用空间通常更小(如通过 TASK_SIZE_MAX 限制为 128 TB 减去保护页) 在 Linux 系统中查看 /proc/cpuinfo 时,address...在实际的查询之前,还有一个验证页表项的步骤,主要进行权限检查,MMU 检查页表项的权限(如读/写/执行、用户/内核模式权限) 虚拟地址分页号和偏移量,页面定位页表中的对应索引位置,根据页面查询到物理地址的起始位置

    87300

    kmalloc分配物理内存与高端内存映射--Linux内存管理(十八)

    虚拟内存中连续、但物理内存中不连续的内存区,可以在vmalloc区域分配. 该机制通常用于用户过程, 内核自身会试图尽力避免非连续的物理地址。...它与通过固定公式与物理内存关联的直接映射页相反,虚拟固定映射地址与物理内存位置之间的关联可以自行定义,关联建立后内核总是会注意到的. ?...说明 注意用户空间当然可以使用高端内存,而且是正常的使用,内核在分配那些不经常使用的内存时,都用高端内存空间(如果有),所谓不经常使用是相对来说的,比如内核的一些数据结构就属于经常使用的,而用户的一些数据就属于不经常使用的...kmallc & kfree分配释放连续的物理内存 kmalloc和kzalloc kmalloc函数与用户空间的malloc一族函数非常类似, 只不过它多了一个flags参数, kmalloc函数是一个简单的接口...他们定义在tools/virtio/linux/kernel.h?v=4.7, line 46 这两个函数返回一个指向内存块的指针, 其内存块至少要有size大小. 所分配的内存区在物理上是连续的.

    7.2K21

    如何查看linux系统中空闲内存物理内存使用剩余内存

    查看linux系统中空闲内存/物理内存使用/剩余内存 查看系统内存有很多方法,但主要的是用top命令和free 命令 当执行top命令看到结果,要怎么看呢?...一些简单的计算方法:  物理已用内存 = 实际已用内存 - 缓冲 - 缓存 = 6811M - 350M - 5114M 物理空闲内存 = 总物理内存 - 实际已用内存 + 缓冲 + 缓存  应用程序可用空闲内存...= 总物理内存 - 实际已用内存  应用程序已用内存 = 实际已用内存 - 缓冲 - 缓存 top命令的结果详解 top命令 是Linux下常用的性能 分析工具 ,能够实时显示系统 中各个进程的资源占用状况...内容如下: Mem: 191272k total  物理内存总量   173656k used  使用的物理内存总量   17616k free  空闲内存总量   22052k buffers  ...测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。

    22.4K41

    【Linux 内核 内存管理】物理内存组织结构 ⑥ ( 物理页 page 简介 | 物理页 page 与 MMU 内存管理单元 | 内存节点 pglist_data 与 物理页 page 联系 )

    文章目录 一、物理页 page 简介 1、物理页 page 引入 2、物理页 page 与 MMU 内存管理单元 3、物理页 page 结构体 4、Linux 内核源码中的 page 结构体 二、内存节点...pglist_data 与 物理页 page 联系 内存管理系统 3 级结构 : ① 内存节点 Node , ② 内存区域 Zone , ③ 物理页 Page , Linux 内核中 , 使用 上述..., 就是 " 内存区域 " zone , " 内存区域 " 再向下划分 , 就是 " 物理页 " page ; 2、物理页 page 与 MMU 内存管理单元 在 Linux 内核中 , MMU 内存管理单元...结构体 " 物理页 " page 是 Linux 内核 " 内存管理 " 中的 最小单位 , 物理页 中的 " 物理地址 " 是连续的 , 每个 " 物理页 " 使用 struct page 结构体...SPARSEMEM */ // 页描述数组 struct page *node_mem_map; #endif } 参考 【Linux 内核 内存管理】物理内存组织结构 ③ ( 内存管理系统三级结构

    7.4K10

    物理内存管理

    前言: 书接上回《内存映射技术分析》,继续来分析一下linux的物理内存管理。 分析: 1,物理内存 PC上的内存条,或者手机上的内存芯片,物理上实实在在的内存,就是物理内存。...原因在于:32bit的机器上,虚拟地址空间只有4G,linux默认把低3G给用户用,把高1G给kernel用。那么kernel要想访问内存,最多只能映射1G,这个明显不合理。...所以kernel把高于896M的物理内存标记为High Memory Zone,访问High Memory Zone的内存就不能使用固定映射了,需要动态映射。...这里需要说明一下,对于Linux来说,一般都不需要连续的内存,因为系统跑起来之后,CPU在protected mode下访问的是虚拟地址,MMU把不连续的物理地址映射成连续的虚拟地址就可以了。...10,sparse mem 物理内存上,如果存在巨大的hole,可以考虑使用sparse mem。

    3K70

    虚拟地址空间与物理内存(Linux系统)

    一、什么是虚拟内存 如果一个物理内存总大小为4G,那么每个进程都会创建一个自己的虚拟内存,大小和物理内存大小一样是4G,用来接收物理内存给它分配的内存。...在虚拟内存与物理内存之间存在着一个媒介,它就是页表,起到一个交通枢纽的作用,它实际上是一个映射关系,把虚拟内存上的值通过页表映射得到对应的物理内存。...二、虚拟内存的描述与组织 进程有自己的虚拟内存,那么就需要对它进行管理,既然要管理就需要对它进行描述与组织,所以在Linux中就有了mm_struct结构体对虚拟内存进行描述。...不直接从虚拟内存去与物理内存匹配,而是在此之间加一个页表,这样可以使得虚拟内存和物理内存保持自己的独立性,从而起到一个解耦合的作用。 这个解耦合的意义是非常的大的。...linux内核使⽤ vm_area_struct 结构来表⽰⼀个独⽴的虚拟内存区域(VMA),由于每个不同质的虚拟内存区域功能和内部机制都不同,因此⼀个进程使⽤多个vm_area_struct结构来分别表

    17310

    Linux释疑:物理内存占用80%以上,正常吗?

    在 Linux 系统(比如 CentOS/RadHat、Debian/Ubuntu)上配置 lnmp环境,通过探针查看物理内存使用率: 当然,也可以使用 top 命令查看: 从上面的图片可以看出 物理内存...Linux 特性: 充分利用物理内存,加快数据访问 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。...主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。...换句话说,每增加一些物理内存,Linux 都将能充分利用起来,发挥了硬件投资带来的好处,而Windows只将其做为摆设,即使增加8GB甚至更大。...Linux 的这一特性,主要是利用空闲的物理内存,划分出一部份空间,做为 cache 和 buffers ,以此提高数据访问性能。 页高速缓存(cache)是 Linux内核实现的一种主要磁盘缓存。

    5.9K10

    【Linux 内核 内存管理】物理页释放 ( 物理页释放 __free_pages 函数 )

    文章目录 一、物理页释放 __free_pages 函数 一、物理页释放 __free_pages 函数 ---- 页分配器 提供了 释放 物理页的 函数 __free_pages , 该函数定义在 Linux...内核源码的 linux-4.12\mm\page_alloc.c#4083 位置 ; __free_pages 函数参数分析 : struct page *page 参数 表示 要释放的 物理页 page...的 虚拟空间地址 ; unsigned int order 参数 表示 要释放的 物理页 的 " 阶数 " , 也就是 要释放的物理页大小 ; 阶 ( Order ) : 物理页 的 数量单位 ,...n 阶页块 指的是 2^n 个 连续的 " 物理页 " ; 参考 【Linux 内核 内存管理】伙伴分配器 ① ( 伙伴分配器引入 | 页块、阶 | 伙伴 ) __free_pages 函数源码...order == 0) free_hot_cold_page(page, false); else __free_pages_ok(page, order); } } 源码路径 : linux

    13.3K20

    OpenHarmony 内核源码分析(物理内存篇) | 怎么管理物理内存

    如何初始化物理内存?鸿蒙内核物理内存采用了段页式管理,先看两个主要结构体.结构体的每个成员变量的含义都已经注解出来,请结合源码理解....,尤其是 LosVmPage ,鸿蒙内存模块代码通篇都能看到它的影子.内核默认最大允许管理32个段.段页式管理简单说就是先将物理内存切成一段段,每段再切成单位为 4K 的物理页框, 页是在内核层的操作单元..., 物理内存的分配,置换,缺页,内存共享,文件高速缓存的读写,都是以页为单位的,所以LosVmPage 很重要,很重要!...OsVmPageStartup 是对物理内存的初始化, 它被整个系统内存初始化 OsSysMemInit所调用. ...1.申请大块内存g_vmPageArray存放LosVmPage,按4K一页划分物理内存存放在数组中.

    44220

    物理内存与虚拟内存

    物理内存就是你的机器本身内存了(如内存条的大小)。物理内存就是CPU的地址线可以直接进行寻址的内存空间大小。...当物理内存用完后,虚拟内存管理器选择最近没有用过的,低优先级的内存部分写到交换文件(页面文件)上,并将需要访问内存的程序的内容从页面文件中换入到物理内存。...所以,虚拟内存是进程运行时所有内存空间的总和,并且可能有一部分不在物理内存中,而物理内存就是我们平时所了解的内存条。有的地方呢,也叫这个虚拟内存为内存交换区。...的内存管理单元)组成一个物理上真正存在的地址,接着就是访问物理内存中的数据了。...总结起来说,虚拟内存地址的大小是与地址总线位数相关,物理内存地址的大小跟物理内存条的容量相关。

    2.7K31

    Linux用户态进程的内存管理

    上一篇我们了解了内存在内核态是如何管理的,本篇文章我们一起来看下内存在用户态的使用情况,如果上一篇文章说是内核驱动工程师经常面对的内存管理问题,那本篇就是应用工程师常面对的问题。...,在缺页中断的处理程序中读出虚拟地址和原因,去VMA中查,发现是用户程序在写malloc的合法区域且有写权限,Linux内核就真正的申请内存,页表中对应一页的权限也修改为R+W。...malloc小于128k的内存,使用brk分配内存,将_edata往高地址推(只分配虚拟空间,不对应物理内存(因此没有初始化),第一次读/写数据时,引起内核缺页中断,内核才分配对应的物理内存,然后虚拟地址空间建立映射关系...) malloc大于128k的内存,使用mmap分配内存,在堆和栈之间找一块空闲内存分配(对应独立内存,而且初始化为0) 内存的消耗VSS RSS PSS USS 首先,我们评估一个进程的内存消耗都是指用户空间的内存...Set Size 实际使用的物理内存(比例分配共享库占用的内存) USS -Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存) 下面再用一张图来更好的解释VSS,RSS,

    3.3K30

    Linux用户态进程的内存管理

    上一篇我们了解了内存在内核态是如何管理的,本篇文章我们一起来看下内存在用户态的使用情况,如果上一篇文章说是内核驱动工程师经常面对的内存管理问题,那本篇就是应用工程师常面对的问题。...,在缺页中断的处理程序中读出虚拟地址和原因,去VMA中查,发现是用户程序在写malloc的合法区域且有写权限,Linux内核就真正的申请内存,页表中对应一页的权限也修改为R+W。...) malloc大于128k的内存,使用mmap分配内存,在堆和栈之间找一块空闲内存分配(对应独立内存,而且初始化为0) 内存的消耗VSS RSS PSS USS 首先,我们评估一个进程的内存消耗都是指用户空间的内存...Set Size 实际使用的物理内存(比例分配共享库占用的内存) USS -Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存) 下面再用一张图来更好的解释VSS,RSS,...物理地址和虚拟地址的分布 Linux内核内存管理算法Buddy和Slab

    3.1K41

    深入理解 Linux 物理内存分配全链路实现

    前文回顾 在上篇文章 《深入理解 Linux 物理内存管理》中,笔者详细的为大家介绍了 Linux 内核如何对物理内存进行管理以及相关的一些内核数据结构。...通过以上内容的介绍,笔者觉得大家已经在架构层面上对 Linux 物理内存管理有了一个较为深刻的认识,现在物理内存管理的架构我们已经建立起来了,那么内核如何根据这个架构层次来分配物理内存呢?...0 ,这在分配物理内存页给用户空间使用的时候非常有用。...关于物理内存区域中的紧急预留内存相关内容,笔者在之前文章 《深入理解 Linux 物理内存管理》一文中的 “ 5.1 物理内存区域中的预留内存 ” 小节中已经详细介绍过了。...GFP_HIGHUSER 用于给用户空间分配高端内存,因为在用户虚拟内存空间中,都是通过页表来访问非直接映射的高端内存区域,所以用户空间一般使用的是高端内存区域 ZONE_HIGHMEM。

    1.4K10

    Linux 内存调优之 BPF 分析用户态小内存分配

    写在前面 博文内容为 使用 BPF 工具跟踪 Linux 用户态小内存分配(brk,sbrk) 理解不足小伙伴帮忙指正 :),生活加油 我看远山,远山悲悯 持续分享技术干货,感兴趣小伙伴可以关注下 ^..._^ brk 内存分配简单概述 一般来说,应用程序的数据存放于堆内存中,堆内存通过brk(2)系统调用进行扩展,对于比较常见的 libc 分配器的 malloc 等函数,在内存分配,小内存块使用 brk...通过跟踪 brk(2)调用,可以展示对应的用户态调用栈信息,已经调用次数统计。同时还有一个sbrk(2)变体调用。...在Linux中,sbrk(2)是以库函数形式实现的,内部仍然使用 brk(2)系统调用。...和trace(8)一样,事件源可以是内核态或用户态函数、内核跟踪点或者USDT探针。 ┌──[root@liruilongs.github.io]-[~/bpfdemo] └─$.

    25310

    物理内存管理之zone详解

    上一次说过了物理内存由node,zone,page三级结构来描述。而node是根据当前的系统是NUMA还是UMA系统。假设我们当前是UMA系统架构,则只有一个node。 ?...WMARK_LOW:低水位,代表内存已经开始吃紧,需要启动回收页内核线性kswapped去回收内存 WMARK_HIGH:高水位,代表内存还是足够的。...,当系统内存出现不足的时候,系统就会使用这些保留的内存来做一些操作,比如使用保留的内存进程用来可以释放更多的内存 free_area:用于维护空闲的页,其中数组的下标对应页的order数。...通过pglist_data结构就可以完全的描述一个内存的layout了。...,就会开启内核swapd来回收内存 每次申请的page都会挂到lru链表中,当出现内存不足的时候,就会根据lru算法找出那些page最近很少使用,然后释放

    3.9K10

    一步一图带你深入理解 Linux 物理内存管理

    前文回顾 在上篇文章 《深入理解 Linux 虚拟内存管理》 中,笔者分别从进程用户态和内核态的角度详细深入地为大家介绍了 Linux 内核如何对进程虚拟内存空间进行布局以及管理的相关实现。...,紧接着我们又介绍了 Linux 内核如何对用户态虚拟内存空间进行管理以及相应的管理数据结构: image.png 在介绍完用户态虚拟内存空间的布局以及管理之后,我们随后又介绍了内核态虚拟内存空间的布局情况...,并结合之前介绍的用户态虚拟内存空间,得到了 Linux 虚拟内存空间分别在 32 位和 64 位系统中的整体布局情况: 32位系统中虚拟内存空间整体布局.png 64位系统中虚拟内存空间整体布局.png...这一点在进程的用户空间是没有问题的,因为进程在用户空间访问内存都是根据虚拟内存地址通过页表找到对应的物理内存地址,这些迁移之后的物理页,虽然物理内存地址发生变化,但是内核通过修改相应页表中虚拟内存地址与物理内存地址之间的映射关系...6.4 复合页 compound_page 相关属性 我们都知道 Linux 管理内存的最小单位是 page,每个 page 描述 4K 大小的物理内存,但在一些对于内存敏感的使用场景中,用户往往期望使用一些巨型大页

    2.3K33
    领券