2017年6月

kswapd唤醒分析

kswapd is a background pageout daemon,回收内存。唤醒的接口是 wake_all_kswapd/wakeup_kswapd,lets check./* * This is the 'heart' of the zoned buddy allocator. */ struct page * __alloc_pages_nodemask...阅读全文

理解Linux VM pressure

原生Linux内核是把vmpressure和CONFIG_MEMCG绑定的,是给用户态用的。makefile里写的很清楚:obj-$(CONFIG_MEMCG) += memcontrol.o page_cgroup.o vmpressure.o内核文档也放到了cgroup下memory.txt:Memory PressureThe pressure level noti...阅读全文

zone水位阈值代码分析

内核zone里有个水位的概念,根据这个水位判断内存压力,从而进行内存回收,版本3.18。struct zone { /* Read-mostly fields */ /* zone watermarks, access with *_wmark_pages(zone) macros */ unsigned long watermark[NR_WM...阅读全文

Linux内存模型分析

kernel版本是3.18,先看下内存描述几个概念。zone 概念NUMA全称Non-Uniform Memory Access,主要说的是cpu访问memory bank依赖他们之间的距离成本问题。memory被划分成bank,每一个bank叫做node,每一个node被分成很多块叫zones, node用pglist_data表示, zone里包含pages/* *...阅读全文

分析__pa和__va代码定义

arm64/kernel3.18的定义在arch/arm64/include/asm/memory.h里#ifndef __ASSEMBLY__ #define __pa(x) __virt_to_phys((unsigned long)(x)) #define __va(x) ((void *)__phy...阅读全文