首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux内核最新的连续内存分配器(CMA)——避免预留大块内存【转】

在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,这部分内存平时不用,但是一般的做法又必须先预留着。...通过这套机制,我们可以做到不预留内存,这些内存平时是可用的,只有当需要的时候才被分配给Camera,HDMI等设备。下面分析它的基本代码流程。 1....end), migratetype); 简单地说,就是把相关的page标记为MIGRATE_ISOLATE,这样buddy系统就不会再使用他们...接下来要回收page,回收page的作用是,不至于因为拿了连续的内存后,系统变得内存饥饿: -> /* * Reclaim enough pages to make sure that.../module.h> #include #include #include #include <linux

3.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

kvm宿主机物理内存预留方案

正常一个kvm虚拟机的管理内存大约为1.2GB左右,正常不会超过2GB 标准虚机机可用内存计算方法:     宿主机物理内存 - 系统保留内存4GB - N个虚拟机物理内存 - (N个虚拟机 * 2GB...虚拟机管理内存) 可能存在的内存浪费:     系统正常内存使用量为:2.5GB,空闲1.5GB     虚拟机管理内存通常为:1.2GB,空闲0.8GB     虚拟机内部业务未使用的物理内存:大小不定...正常大小应该设置为可能浪费的内存大小加上2GB保底内存。...假设宿主机需要同时启动8个虚拟机,则swap分区大小应设置为:         系统可能浪费的1.5GB + 虚拟机管理可能的内存浪费0.8GB * 8个虚机 = 8GB 在轻负载下环境下,使用增加swap...分区避免内存浪费的方法还是比较靠谱的,此时虚机机可用内存计算方法为:     宿主机虚拟内存大小 - 系统保留内存4GB - N个虚拟机物理内存 - (N个虚拟机 * 2GB虚拟机管理内存

2.4K10

全志D1-H芯片 如何在 Linux Device Tree 中配置预留内存

前言 有时我们需要在 Linux 内核中预留一部分内存空间用作特殊用途(给安全模块使用,给其它处理器使用,或是给特定的驱动程序使用等),在 Device Tree 中有提供两种方法对预留内存进行配置:memreserve...; 使用 memreserve 预留出来的内存一般无法再被 Linux 系统使用(当然,也可以通过特殊方法让代码固定访问该地址,但这种并非标准用法,在此不展开描述)。...CMA 内存池,而是来源于该预留内存: /* Initialize reserved memory resources */ rc = of_reserved_mem_device_init(dev...有时我们不需要将预留内存分配给特定的设备驱动,而只是想给默认 CMA 内存池分配一片固定的内存区域,这时我们可配置上“reusable”和“linux,cma-default”: reserved-memory...,cma-default; }; }; 由此可见,不同于 memreserve,通过 reserved-memory 预留内存有可能进入系统 CMA,这需要满足以下几个条件: compatible

10810

Linux 查看系统内存总结

在做Linux系统优化的时候,物理内存是其中最重要的一方面。自然的,Linux也提供了非常多的方法来监控宝贵的内存资源的使用情况。...下面的清单详细的列出了Linux系统下通过视图工具或命令行来查看内存使用情况的各种方法。 1. /proc/meminfo 查看RAM使用情况最简单的方法是通过/proc/meminfo。...1$ cat /proc/m12. vmstat vmstat命令显示实时的和平均的统计,覆盖CPU、内存、I/O等内容。例如内存情况,不仅显示物理内存,也统计虚拟内存。...它显示的是各种系统资源(CPU, memory, network, I/O, kernel)的综合,并且在高负载的情况下进行了彩色标注。...1$ memstat -p image.png 8. nmon nmon是一个基于ncurses的系统基准测试工具,它可以监控CPU、内存、I/O、文件系统及网络资源等的互动模式。

13K20

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

查看linux系统中空闲内存/物理内存使用/剩余内存 查看系统内存有很多方法,但主要的是用top命令和free 命令 当执行top命令看到结果,要怎么看呢?...= 总物理内存 - 实际已用内存  应用程序已用内存 = 实际已用内存 - 缓冲 - 缓存 top命令的结果详解 top命令 是Linux下常用的性能 分析工具 ,能够实时显示系统 中各个进程的资源占用状况... 系统负载 ,即任务队列的平均长度。            ...可以看到,top命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,它的缺点是会消耗很多系统资源。...测量一个进程占用了多少内存linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。

19.7K41

深度好文:Linux操作系统内存

内存 二、 Linux 内存地址空间 三、 Linux 内存分配算法 四、 内存使用场景 五、 内存使用那些坑 ---- Linux 内存是后台开发人员,需要深入了解的计算机资源。...合理的使用内存,有助于提升机器的性能和稳定性。本文主要介绍Linux 内存组织结构和页面布局,内存碎片产生原因和优化算法,Linux 内核几种内存管理的方法,内存使用场景以及内存使用的那些坑。...项目地址:https://github.com/YunaiV/ruoyi-vue-pro 二、 Linux 内存地址空间 1、Linux 内存地址空间 Linux 内存管理全貌 2、内存地址——用户态...=80M,预留部分内存;然后通过 request_mem_region 和 ioremap_nocache 将预留内存映射到模块中。...,如设备驱动alloc_bootmem在启动 kernel 时,预留一段内存,内核看不见小于物理内存大小,内存管理要求较高 4、malloc 申请内存 调用 malloc 函数时,它沿 free_chuck_list

1.2K10

深入理解Linux内存系统

目录 一、走进 linux 内存 二、 linux 内存地址空间 三、 Linux 内存分配算法 四、 内存使用场景 五、 内存使用那些坑 一、走进 linux 内存 1、内存是什么?...3)保障 cpu 计算的稳定性和高性能 二、 linux 内存地址空间 1、linux 内存地址空间 Linux 内存管理全貌 2、内存地址——用户态&内核态 用户态:Ring3 运行于用户态的代码则要受到处理器的诸多...="参数, 如"mem=80M,预留部分内存;然后通过 request_mem_region 和 ioremap_nocache 将预留内存映射到模块中。...,如设备驱动alloc_bootmem在启动 kernel 时,预留一段内存,内核看不见小于物理内存大小,内存管理要求较高 4、malloc 申请内存 调用malloc函数时,它沿 free_chuck_list...系统内存使用情况:/proc/meminfo $cat /proc/meminfo MemTotal: 8052444 kB #所有内存(RAM)大小,减去一些预留空间和内核的大小

1.8K41

Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配的内存 )

文章目录 一、Linux 内核 动态分配内存 系统接口函数 二、统计输出 vmalloc 分配的内存 一、Linux 内核 动态分配内存 系统接口函数 ---- Linux 内核 " 动态分配内存 "...是通过 " 系统接口 " 实现的 , 下面介绍几个重要的 接口函数 ; ① 以 " 页 " 为单位分配内存 : alloc_pages , __get_free_page ; ② 以 " 字节 " 为单位分配..." 虚拟地址连续的内存块 " : vmalloc ; ③ 以 " 字节 " 为单位分配 " 物理地址连续的内存块 " : kmalloc ; 注意 该 " 物理地址连续的内存块 " 是以 Slab 为中心的...; 二、统计输出 vmalloc 分配的内存 ---- 执行 grep vmalloc /proc/vmallocinfo 命令 , 可以统计输出 通过 vmalloc 函数分配的 " 虚拟地址连续的内存

5.1K30

Linux 内核 内存管理】Linux 内核内存布局 ① ( 查看 Linux 操作系统位数 | 查看 Linux 操作系统软硬件信息 )

文章目录 一、查看 Linux 操作系统位数 二、查看 Linux 操作系统软硬件信息 一、查看 Linux 操作系统位数 ---- 在 64 位的 Linux 中 , 使用 48 位 表示 "...虚拟地址空间 " ; 使用 45 位 表示 " 物理地址空间 " ; 执行 getconf LONG_BIT 命令 , 可以查看 Linux 操作系统 是 32 位还是 64 位的 ;...得到结果 64 , 说明该系统是 64 位 Ubuntu Linux 操作系统 ; 二、查看 Linux 操作系统软硬件信息 ---- 执行 cat /proc/cpuinfo 命令 , 可以查看..." Linux 内核位数 “ 和 ” 系统的软硬件信息 " ; 输出内容解析 : vendor_id : GenuineIntel CPU 制造商 GenuineIntel cpu family :...物理核心 在 CPU 中的编号 cpu cores : 1 逻辑核心 所在的 物理核心数 apicid : 0 区分不同的逻辑核心编号 , 该编号不一定连续 ; bogomips : 5807.99 Linux

31.7K20

Linux 内核 内存管理】Linux 内核堆内存管理 ② ( 动态分配堆内存方式 | brk 系统调用 | mmap 系统调用 | brk 系统调用源码介绍 )

文章目录 一、Linux 系统 动态分配堆内存 方式 二、brk 系统调用 动态分配堆内存 一、Linux 系统 动态分配堆内存 方式 ---- Linux 系统中 , 提供了 2 种方式 进行 "...动态分配堆内存 " 操作 ; ① brk 系统调用 : 该方式本质是 设置 " 进程数据段 “ 的 结束地址 , 将该 ” 结束地址 " 向 高或低 移动 , 实现堆内存的 扩张或收缩 ; ② mmap...系统调用 : 向 Linux 操作系统 申请 " 虚拟地址空间 " 内存 , 并且将某个文件 " 映射 “ 到该申请的内存中 ; 如果 不需要映射文件 到该空间中 , 则该空间就是 ” 匿名空间 "..., 可作为 " 堆内存 " 使用 ; 二、brk 系统调用 动态分配堆内存 ---- " brk 系统调用 “ 可以指定 ” 堆内存 “ 在 ” 虚拟内存空间 “ 的 ” 结束地址 " ; 如果要 "...扩张 " 堆内存 , 可以将 结束地址 " 大于当前值 " , 如果要 " 收缩 " 堆内存 , 可以将 结束地址 " 小于当前值 " ; brk 系统调用 源码在 Linux 源码中的 linux-5.6.18

5K20

伙伴系统之伙伴系统概述--Linux内存管理(十五)

但在Linux内存管理方面,有一个长期存在的问题:在系统启动并长期运行后,物理内存会产生很多碎片。该情形如下图所示 ? 假定内存由60页组成,这显然不是超级计算机,但用于示例却足够了。...,这种紧急情况下可从MIGRATE_HIGHATOMIC中分配内存 MIGRATE_CMA Linux内核最新的连续内存分配器(CMA), 用于避免预留大块内存 MIGRATE_ISOLATE 是一个特殊的虚拟区域...HDMI等都需要预留大量连续内存,这部分内存平时不用,但是一般的做法又必须先预留着....通过这套机制, 我们可以做到不预留内存,这些内存平时是可用的,只有当需要的时候才被分配给Camera,HDMI等设备....参照宋宝华–Linux内核最新的连续内存分配器(CMA)——避免预留大块内存, 内核为此提供了函数is_migrate_cma来检测当前类型是否为MIGRATE_CMA, 该函数定义在include/linux

2.9K50

openshiftorigin工作记录(5)——node节点系统资源预留

实际应用中发现,如果不做处理,当集群内应用数量不断增加时,会占满node节点的系统资源,导致某node节点挂掉,同时也会造成openshift集群的卡死。 解决思路为设置node节点系统资源预留值。...参考k8s博客:《Kubernetes 针对资源紧缺处理方式的配置》、《kubernetes节点资源限制》 设置node节点系统资源预留值 如果尚未安装集群 修改ansible的hosts文件,在变量openshift_node_kubelet_args...中设置系统预留值。...我的修改示意如下(这里我只设置了cpu和内存预留预留值根据自己实际情况调整): #设置预留系统服务的资源 system-reserved: - cpu=200m - memory=3G #设置预留给...查看node节点的内存使用量 [这里写图片描述] [这里写图片描述] 可以看出,node节点的内存还有2G多可用。 这样就可以避免node节点系统资源被使用完,导致节点挂掉。

1K100

linux下清理系统缓存并释放内存

linux频繁读取文件后,物理内存会很快被用完,当程序结束后,内存不会被正常释放,而是一直caching,因此有必要手动清理系统缓存释放内存。...如果必须停止系统,则运行sync 命令以确保文件系统的完整性。...sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件 手动释放内存的命令 > echo 3>/proc/sys/vm/drop_caches...drop_caches的值可以是0-3之间的数字,代表不同的含义: 0:不释放(系统默认值) 1:释放页缓存 2:释放dentries和inodes 查看内存 > free -h total——总物理内存...,inode值等(ls大目录可看到这个值增加) cached——缓存,用于已打开的文件 恢复默认设置 缓存可以提升系统的运行效率,如果发现系统内存经常不够用,应该考虑添加内存,而不是经常清理 > echo

5.5K10

PostgreSQL 内存消耗从LINUX 系统层次看

,以及总体使用的内存数据量....在LINUX 中proc目录中有所有相关的进程的信息, PSS 通过下面的预计获得,所以RSS - PSS 等于的就是进程独享的内存 ps -u postgres o pid= | sed 's#....,并且在这之后,你可以告诉他共享内存使用了多少, 进程独占使用了多少, 有那些进程已经开始使用了SWAP, 这对解决某些关于内存方面的问题,是有帮助的,尤其对于某些访问的进程的内存使用的分析....VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) RSS- Resident Set Size 实际使用物理内存(包含共享库占用的内存) PSS- Proportional...Set Size 实际使用的物理内存(比例分配共享库占用的内存) USS- Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存

3K20

Linux系统建立虚拟内存教程

虚拟内存是将硬盘规划出一个区间用来读取数据的空间,建立虚拟内存可以提高服务器的运行效率。...目前,大多数服务器操作系统都使用了虚拟内存,Windows系统一般称为“虚拟内存”;而Linux称作“交换空间”。 这里主要讲解Linux系统如何建立虚拟内存。...Linux系统建立虚拟内存,一般通过建立swap file完成。先建立swap这个装置或是档案后,将他格式化为swap格式,最后将他挂载到系统上即可。...方法如下:   一、 建立虚拟内存装置   直接再加一颗硬盘,并且将其中的某个分区规划为swap 的文件系统   1、(1) fdisk /dev/hd[a-d]   (2) 将该分区的ID改为82 ,...16]   将上面1中的分区格式化为swap的档案格式   3、swapon /dev/hd[a-d][1-16]   启动swap ,顺便说一下 关掉swap的命令为swapoff   二、建立虚拟内存档案

3.4K10

linux下清理系统缓存并释放内存

linux频繁读取文件后,物理内存会很快被用完,当程序结束后,内存不会被正常释放,而是一直caching,因此有必要手动清理系统缓存释放内存。...如果必须停止系统,则运行sync 命令以确保文件系统的完整性。...的值可以是0-3之间的数字,代表不同的含义:0:不释放(系统默认值) 1:释放页缓存 2:释放dentries和inodes 查看内存 > free -h total——总物理内存 used——已使用内存...大目录可看到这个值增加) cached——缓存,用于已打开的文件 恢复默认设置 缓存可以提升系统的运行效率,如果发现系统内存经常不够用,应该考虑添加内存,而不是经常清理 > echo 0>/proc/sys.../vm/drop_caches 原文链接:https://rumenz.com/rumenbiji/linux_drop_caches.html

8.9K10
领券