在用户态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 »LSI SAS控制器驱动报告Invalid Page原因分析
在使用LSISAS 1068E控制器的服务器上,Linux内核中打印如下信息: mptbase: ioc0: LogInfo(0x30030501): Originator={IOP}, Code={Invalid Page}, SubCode(0x0501) cb_idx mptctl_reply 在遇到这种打印信息时,不清楚原因,担心磁盘是否存在问题。本文详细分析错误日志来源及可能存在的原因。 完整文章下载:LSI SAS控制器驱动报告Invalid Page原因分析
READ MORE »[转]Evolution of Intel’s Basic Microarchitectures
介绍Intel CPU微架构的演变。 1. Introduction 2. Core 2 3. Penryn 4. Nehalem 5. Nehalem-EX 6. Westmere 7. Westmere-EX 8. Sandy Bridge 9. Overview of the evolution 来源:http://users.nik.uni-obuda.hu//sima/oktatas.htm 下载:Evolution of Intel’s Basic Microarchitectures
READ MORE »Do Not Worry
Do Not Worry 25 “Therefore I tell you, do not worry about your life, what you will eat or drink; or about your body, what you will wear. Is not life more important than food, and the body more important than clothes? 26 Look at the birds of the air; they do not sow or […]
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 »[转]Debugging Linux Kernel Problems
In this tutorial, we’ll look at the following topics: • How and why kernels fail. • Understanding log files: dmesg and the files in /var/log, notably /var/log/messages. • Userland tools for debugging a running system. • Building a kernel with debugging support: the options. • Using a serial console. • Preparing for dumps: dumpon, savecore. […]
READ MORE »[转]Linux Kernel Crash Book Everything you need to know
介绍LKCD和KDUMP的资料,还不错。 来源:http://www.dedoimedo.com/ 下载:Linux Kernel Crash Book Everything you need to know
READ MORE »Linux系统安装盘设备驱动制作及更新
1 前言 在安装Linux操作系统过程中,有时会遇到安装盘中自带设备驱动版本较老,不支持最新的RAID控制器(如MegaRAID SAS 9265-8i),导致系统安装时,找不到硬盘,系统无法继续安装。此时我们需要更新安装盘中带的驱动,或者使用使用驱动安装盘(一般为img文件)来更新驱动。 本文主要介绍如何制作Redhat Linux驱动安装盘和如何更新安装盘中的驱动,并介绍常见故障的处理办法。
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 »