mm
文章平均质量分 71
yiyeguzhou100
专注,探索,分享
展开
-
关于Linux内存寻址与页表处理的一些细节
http://blog.sina.com.cn/s/blog_533074eb0101ai5t.html上图反映了如下信息:1、 进程的4G 线性空间被划分成三个部分:进程空间(0-3G)、内核直接映射空间(3G– high_memory)、内核动态映射空间(VMALLOC_START - VMALLOC_END)2、三个空间使用同一张页目录表,通过CR3可找到此转载 2017-06-08 14:54:52 · 12137 阅读 · 2 评论 -
workingset protection/detection on the anonymous LRU list
Working-set protection for anonymous pages [LWN.net][PATCH v3 0/9] workingset protection/detection on the anonymous LRU list [LWN.net]14.7 跟踪LRU活动情况和Refault Distance算法-CSDN博客原创 2024-07-16 22:55:22 · 264 阅读 · 0 评论 -
x86 clear accessed bit 后不 flush tlb
关于页表项的 accessed bit,OS 页表管理可以定期将其复位,但 TLB 一般不参与该 bit 位的管理,因为 TLB 中的页表项均为最近要访问的。例如,在 cpu load/store 内存时,如果对应的页表项不在 TLB 中,cpu 会 walk page table 并将页表项的 accessed bit 置位(如果之前已经被清除了),然后将该页表项更新到 TLB 中(这样 TLB 记录的页表项的 accessed bit 也是置位的)。原创 2024-01-22 23:24:29 · 376 阅读 · 0 评论 -
The behavior inside pte_page()
以下展示了 pte_page() 的实现细节,x86 ptearch/x86/include/asm/pgtable-2level.h/* No inverted PFNs on 2 level page tables */static inline u64 protnone_mask(u64 val){ return 0;}arch/x86/include/asm/page_types.h, arch/x86/include/asm/pgtable_64_types.原创 2022-03-17 22:02:23 · 886 阅读 · 0 评论 -
Linux内核中用GFP_ATOMIC申请内存究竟意味着什么?
我们都知道,在中断、软中断、spinlock等原子上下文里面,申请内存,应该使用GFP_ATOMIC标记,譬如内核中有大量的kmalloc/GFP_ATOMIC的例子:对于不可睡眠的上下文,如果我们用常规的GFP_KERNEL这样的标记去申请内存,可能引发直接的内存reclaim,从而引起睡眠,所以GFP_KERNEL这种标记只适合进程上下文调用:GFP_KERNEL的标记可以引发直接的内存回收,从而导致进程阻塞睡眠,这在原子上下文显然是不允许的。#define GFP_KERNEL转载 2021-04-20 10:24:29 · 567 阅读 · 0 评论 -
3篇文章全面理解SLAB/SLUB机制
https://blog.csdn.net/lukuen/article/details/6935068http://www.wowotech.net/memory_management/426.html原创 2020-10-14 12:24:47 · 541 阅读 · 0 评论 -
Linux内核源码分析--内存管理(一、分页机制)
http://blog.csdn.net/yuzhihui_no1/article/details/43021405 Linux系统中分为几大模块:进程调度、内存管理、进程通信、文件系统、网络模块;各个模块之间都有一定的联系,就像蜘蛛网一样,所以这也是为什么Linux内核那么难理解,因为不知道从哪里开始着手去学习。很多人会跟着系统上电启动 BIOS-->bootsect-->set转载 2017-06-09 10:27:21 · 691 阅读 · 0 评论 -
进程内存分布剖析
英文原文 https://manybutfinite.com/post/anatomy-of-a-program-in-memory/另外, https://manybutfinite.com/post/how-the-kernel-manages-your-memory/ 内存管理是操作系统的核心功能之一,这对于编程以及系统管理都至关重要。在接下来的叙述中我将着眼于实用方面但兼顾内部原...转载 2018-12-19 11:45:17 · 373 阅读 · 0 评论 -
伙伴系统分配器 - PF_MEMALLOC 标志位
这是一个进程标记位,除了在内存管理子系统中使用外,还在其他的内核子系统中使用。之所以在伙伴系统分配器中讨论,是因为这个标记和内存管理密不可分。当一个进程被设置PF_MEMALLOC后,那么对进程会有如下影响:1. 当进程进行页面分配时,可以忽略内存管理的水印进行分配,这是告诉内存管理系统,给我一点紧急内存使用,我将会释放更多的内存给你。2. 如果忽略水印分配仍然失败,那么直接返回ENO...转载 2019-01-04 16:36:42 · 1140 阅读 · 0 评论 -
linux free analysis
https://git.busybox.net/busybox/tree/procps/free.chttp://www.cnblogs.com/ultranms/p/9254160.htmlhttp://blog.yufeng.info/archives/2456转载 2019-05-05 11:22:58 · 127 阅读 · 0 评论 -
NUMA相关
Linux的NUMA机制 NUMA对性能的影响 cgroup的cpuset问题 深挖NUMAhttp://www.litrin.net/2017/10/31/%E6%B7%B1%E6%8C%96numa/ NUMA的原理与局限https://www.cnblogs.com/longchang/p/10734540.html ...原创 2019-08-20 23:09:40 · 232 阅读 · 0 评论 -
wowo - 页面回收的理解
页面回收的基本概念作者:linuxer 发布于:2017-8-25 19:01 分类:内存管理本文主要介绍了一些page reclaim机制中的基本概念。这份文档其实也可以看成阅读ULK第17章第一小节的一个读书笔记。虽然ULK已经读了很多遍,不过每一遍还是觉得有收获。Linux内核虽然不断在演进,但是页面回收的基本概念是不变的,所以ULK仍然值得内核发烧友仔细品味。转载 2017-12-27 15:33:20 · 396 阅读 · 0 评论 -
linux内存源码分析 - 内存回收(lru链表)
转载:http://www.cnblogs.com/tolimit/概述 对于整个内存回收来说,lru链表是关键中的关键,实际上整个内存回收,做的事情就是处理lru链表的收缩,所以这篇文章就先说说系统的lru链表。 内存回收的核心思想,就是如果一些数据能够保存到磁盘,在内存不足时就把这些数据写到磁盘中,这样这些数据占用的内存页就可以作为空闲内存页给予系统使用了。转载 2017-11-03 13:29:39 · 517 阅读 · 0 评论 -
arm linux中一些重要的宏及地址定义
转载自http://biancheng.dnbcw.info/linux/352414.html。在此基础上,做一些修改。 1)TEXT_OFFSET 内核在RAM中的起始位置相对于RAM起始地址偏移。值为0x00008000./arch/arm/Makefile111 textofs-y := 0x00008000112 textofs-$(转载 2017-07-29 23:53:15 · 1492 阅读 · 0 评论 -
CPU和内存调优(非常全)
http://www.amd5.cn/atang_3537.htmlCPU和内存调优Monitor:Process: 一个独立运行单位系统资源:CPU时间,存储空间Process: 一个独立运行单位OS: VMCPU: 时间:切片缓存:缓存当前程序数据进程切换:保存现场、恢复现场内存:线性地址 空间:映射I/O:内核 –> 进转载 2017-06-21 14:24:53 · 1528 阅读 · 1 评论 -
kmalloc vmalloc kzalloc malloc 和 get_free_page()
http://blog.csdn.net/hbhhww/article/details/7236695kmalloc vmalloc kzalloc get_free_page()是内核空间申请内存空间函数malloc是用户空间申请内存函数 一 ,kmalloc() 与 kfree() 和get_free_page的区别1,用于申请较小的、连续的物理内存:使用的是内存分配器s转载 2017-06-09 14:51:10 · 277 阅读 · 0 评论 -
Linux内存管理之kmalloc 与 __get_free_page()
http://blog.csdn.net/shaoguangleo/article/details/5826628在设备驱动程序中动态开辟内存,不是用malloc,而是kmalloc,或者用get_free_pages直接申请页。释放内存用的是kfree,或free_pages. 对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言转载 2017-06-09 14:06:34 · 1257 阅读 · 0 评论 -
探索 Linux 内存模型
https://www.ibm.com/developerworks/cn/linux/l-memmod/理解 Linux 使用的内存模型是从更大程度上掌握 Linux 设计和实现的第一步,因此本文将概述 Linux 内存模型和管理。Linux 使用的是单一整体式结构 (Monolithic),其中定义了一组原语或系统调用以实现操作系统的服务,例如在几个模块中以超级模式转载 2017-06-09 10:36:53 · 377 阅读 · 0 评论 -
进程render要读取一个scene.dat文件过程(normal and mmap)
加入一个进程render要读取一个scene.dat文件,实际发生的步骤如下1. render进程向内核发起读scene.dat文件的请求2. 内核根据scene.dat的inode找到对应的address_space(struct inode->struct address_space *i_mapping;),在address_space中查找页缓存,如果没有找到,那么分配一个内存转载 2017-06-20 10:59:09 · 1086 阅读 · 0 评论 -
***缺页异常详解***
http://blog.csdn.net/cosmoslhf/article/details/42743349首先明确下什么是缺页异常,CPU通过地址总线可以访问连接在地址总线上的所有外设,包括物理内存、IO设备等等,但从CPU发出的访问地址并非是这些外设在地址总线上的物理地址,而是一个虚拟地址,由MMU将虚拟地址转换成物理地址再从地址总线上发出,MMU上的这种虚拟地址和物理地址的转换关系转载 2017-06-07 15:03:56 · 782 阅读 · 0 评论 -
linux进程地址空间--vma的基本操作
http://www.cnblogs.com/jikexianfeng/articles/5648057.html在32位的系统上,线性地址空间可达到4GB,这4GB一般按照3:1的比例进行分配,也就是说用户进程享有前3GB线性地址空间,而内核独享最后1GB线性地址空间。由于虚拟内存的引入,每个进程都可拥有3GB的虚拟内存,并且用户进程之间的地址空间是互不可见、互不影响的,也就是说转载 2017-06-07 14:05:16 · 526 阅读 · 0 评论 -
Linux kernel内存映射实例分析
http://blog.csdn.net/crazyjiang/article/details/7903772作者:JHJ(jianghuijun211@gmail.com)日期:2012/08/24欢迎转载,请注明出处 引子现在Android智能手机市场异常火热,硬件升级非常迅猛,arm cortex A9 + 1GB DDR似乎已经跟不上主流配置了。虽说硬件是王转载 2017-07-30 20:00:17 · 1211 阅读 · 0 评论 -
linux内核 address_space 结构
http://oldblog.donghao.org/2009/03/linuxaue-address-space-a.htmllinux内核 address_space 结构 看linux内核很容易被struct address_space 这个结构迷惑,它是代表某个地址空间吗?实际上不是的,它是用于管理文件(struct inode)映射到内存的页面(转载 2017-07-10 09:45:39 · 2901 阅读 · 0 评论 -
slab机制
https://www.cnblogs.com/wangzahngjun/p/4977425.html1.内部碎片和外部碎片外部碎片什么是外部碎片呢?我们通过一个图来解释:假设这是一段连续的页框,阴影部分表示已经被使用的页框,现在需要申请一个连续的5个页框。这个时候,在这段内存上不能找到连续的5个空闲的页框,就会去另一段内存上去寻找5个连续的页框,这样子,久而久转载 2017-11-12 20:14:40 · 650 阅读 · 0 评论 -
为什么手工drop_caches之后cache值并未减少?
https://mp.weixin.qq.com/s?__biz=MzAxOTk3OTgxOQ==&mid=2247483661&idx=1&sn=b53d42adb2b80c756c5ad51b637ea252在Linux系统上查看内存使用状况最常用的命令是"free",其中buffers和cache通常被认为是可以回收的:$ free转载 2017-10-17 10:17:00 · 1380 阅读 · 0 评论 -
Memory split(user:kernel) config
PAGE_OFFSE 内核镜像起始虚拟地址[xiatian@hzling45 lfs_linux]$ vimarch/arm/Kconfig:config PAGE_OFFSET#这里才是配置宏PAGE_OFFSET的值的地方hexdefault0x40000000 ifVMSPLIT_1G #VMSPLIT_1G在arch/arm/xxx_defconfig中原创 2017-07-30 00:13:29 · 1981 阅读 · 0 评论 -
Linux High Memory
http://blog.sina.com.cn/s/blog_9815359e01012yup.htmlLinux 内核占据线性空间的3G~4G(32位)(/include/asm-i386/page.h中,由__PAGE_OFFSET指定,#define __PAGE_OFFSET (0xC0000000)),所以能直接映射到Linux内核空间的物理内存不可能大于 1G,L转载 2017-07-25 09:55:55 · 629 阅读 · 0 评论 -
dirty_page writeback caused task hang
Author:SkateTime:2015/03/04 How to fix hung_task_timeout_secs and blocked for more than 120 seconds problem 现象:系统hang住,可以ping通,但ssh无响应查看message log[1379100.801689] [] page_fault+0x25/0x3转载 2017-08-01 17:24:17 · 522 阅读 · 0 评论 -
linux用户空间与内核空间—高端内存详解
http://www.cnblogs.com/zlcxbb/p/5841417.html摘要:Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。用户空间的内存映射采用段页式,而内核空间有自己的规则;本文旨在探讨内核空间的地址转载 2017-07-23 22:25:18 · 599 阅读 · 0 评论 -
ioremap返回的地址
http://blog.csdn.net/kickxxx/article/details/6620532ioremap和vmalloc一样,都会返回vmalloc区的虚拟地址,但是ioremap并不会分配任何物理内存,ioremap也需要建立新的页表来访问物理页面。ioremap获取的虚拟地址空间需要使用iounmap来释放。ioremap主要用来映射设备的物理内存到内核的转载 2017-07-21 23:31:55 · 873 阅读 · 0 评论 -
Linux地址映射--地址转换(mmap,vma)
一,线性映射与非线性映射1. 内存管理物理内存管理:Linux内存最小管理单位为页(page),通常一页为4K。初始化时,linux会为每个物理内存也建立一个page的管理结构,操作物理内存时实际上就是操作page页。某些设备会映射在物理内存地址外,这些地址会在使用时建立page结构。进程内存管理:Linux进程通过vma进行管理,每个进程都有一个task_转载 2017-06-06 10:00:34 · 6624 阅读 · 0 评论