Posts in category 内存管理
[转]Local and Remote Memory: Memory in a Linux NUMA System
全面介绍Linux内核中的NUMA系统,不错的资料。 1.Introduction 2.A sample NUMA system 3.Linux and NUMA memory 3.1.Memory Management 101 3.2.NUMA memory 4.Efficient allocations 4.1.Optimal placement: Node local 4.2.Multi node applications 4.3.Page Cache 4.4.Memory balancing 4.5.NUMA interlink and node hardware limits 5.Memory reclaim 5.1.Reclaim in an UP or SMP system 5.2.NUMA reclaim 6.Memory Migration 6.1.Why migrate pages 6.2.How page migration works 6.3.Determining […]
READ MORE »Linux物理内存页面分配
在用户态C语言程序中,我们对内存分配函数malloc()或calloc()非常熟悉;函数执行成功,就会返回需要的内存起始地址。显然这些函数在在内核态没法运行,在内核态有专门的内存申请/释放函数。 Linux内核中,如何分配和回收内存?空闲内存如何管理?本文以linux 2.6.32-220.el6版本内核源码为基础,介绍Linux内核中如何分配物理内存页面。 目 录 1 概述 2 内核页面分配与回收API 3 空闲页面的管理 3.1 物理内存空间描述 3.2 空闲页面的管理 4 伙伴算法 4.1 Buddy System 4.2 伙伴算法举例 4.2.1 页面分配过程 4.2.2 页面回收过程 4.3 Buddy系统信息查看 5 页面分配 5.1 UMA页面分配 5.2 NUMA页面分配 5.2.1 NUMA策略与cpuset功能 5.2.2 alloc_pages_current() 5.3 __alloc_pages_nodemask() 5.3.1 内存迁移类型与lockdep 5.3.2 __alloc_pages_nodemask() 5.4 get_page_from_freelist() 5.4.1 区域(Zone)水准 5.4.2 Hot-N-Cold页面 5.4.3 […]
READ MORE »Linux物理内存描述
Linux内核采用页式存储管理,进程的地址空间被划分成固定大小的“页面”;物理内存同样被分为与页面大小相同的“页帧”,由MMU在运行时将虚拟地址“映射”成某个物理内存页面上的地址。 本文以linux-2.6.32-220.el6版本内核源码为基础,介绍Linux内核中有关物理内存的概念,和如何描述物理内存。注意:本文中涉及到的仅是和物理内存有关的概念、数据结构。和地址如何映射、线性地址、物理地址;内存如何分配/回收等概念无关。 目录 1 概述… 3 2 物理内存相关概念… 3 2.1 NUMA(Non Uniform Memory Access)… 3 2.2 页面和虚拟内存(Paging and Virtual Memory)… 5 2.2.1 PAE(Physical Address Extensions)… 6 2.2.2 PSE(Page Size Extensions)… 6 2.3 TLB(Translation Lookaside Buffers)… 7 3 Linux内核对物理内存描述… 7 3.1 节点(Node)… 8 3.2 区域(Zone)… 10 3.2.1 区域类型… 10 3.2.2 struct zone结构体… 13 3.3 […]
READ MORE »[转]What Every Programmer Should Know About Memory
非常经典且全面介绍内存的资料,强烈推荐。 内容包括: Commodity Hardware Today CPU Caches Virtual Memory NUMA Support What Programmers Can Do Memory Performance Tools Upcoming Technology 点击下载:What Every Programmer Should Know About Memory
READ MORE »Linux内核在x86_64 CPU中地址映射
在《Linux内存地址映射》(http://ilinuxkernel.com/?p=1276),详细介绍了在32位x86 CPU中Linux内核地址映射过程,并且给出实验验证整个地址映射过程。 64位CPU中,地址映射稍微复杂,本文介绍Linux内核在x86_64 CPU中地址映射过程,同样给出实验和源码,验证整个地址映射过程。 完整文档下载地址:Linux内核在x86_64 CPU中地址映射 实验源码下载地址:Memory_Address_Mapping_x86-64
READ MORE »Linux内存地址映射
在Intel体系结构的CPU中,现代操作系统如Linux都采用内存保护模式来管理内存。我们看Linux内核中的内存管理相关内容时,会遇到一个基本问题:普通用户程序中的地址是如何转换到内存上的物理地址的?IA-32架构的CPU规定地址映射过程是逻辑地址–>线性地址–>物理地址。Linux既然能在Intel架构的CPU上运行,就要遵守这个规定,那么Linux又是如何进行地址映射的?
READ MORE »Linux内存管理伙伴算法
伙伴算法 Linux内核内存管理的任务包括: 遵从CPU的MMU(Memory Management Unit)机制 合理、有效、快速地管理内存 实现内存保护机制 实现虚拟内存 共享 重定位
READ MORE »Intel Nehalem服务器中物理内存地址分布
Nehalem架构中系统内存地址空间如下。共有三个基本内存地址区域: (1)低于1MB; (2)1MB~4GB; (3)高于4GB。 TOLM: Top of Low Memory CSR: Control and Status Register
READ MORE »