首页 > 系统相关 >内存管理-32-系统内存统计-2-/proc/buddyinfo 和 /proc/pagetypeinfo

内存管理-32-系统内存统计-2-/proc/buddyinfo 和 /proc/pagetypeinfo

时间:2024-08-27 21:25:48浏览次数:8  
标签:Node zone 32 pagetypeinfo 内存 proc order pageblock

基于 msm-5.4

一、概述

1. 简介

/proc/buddyinfo 节点包含当前伙伴系统的简要信息,而 /proc/pagetypeinfo 则包含了当前伙伴系统详细信息,包括每个迁移类型和每个链表的成员数量等。

迁移类型最小的单位是页块,在Arm64架构中,页块的默认大小是4M. 但需注意,页块的大小和普通巨页有关,当配置了 CONFIG_HUGETLB_PAGE 时,页块的order大小等于 HUGE_PAGE_ORDER, 通常是9,否则,页块的order是10.

#ifdef CONFIG_HUGETLB_PAGE
#define pageblock_order        HUGETLB_PAGE_ORDER //9
#else
#define pageblock_order        (MAX_ORDER-1) //11-1=10
#endif /* CONFIG_HUGETLB_PAGE */


2. 打印格式-buddyinfo

# cat /proc/buddyinfo
Node 0, zone   Normal  40832  27860  12069   3974    423     88     37      0      0      0      0

注:打印函数见 frag_show_print()

3. 打印格式-pagetypeinfo

# cat /proc/pagetypeinfo
Page block order: 10
Pages per block:  1024

Free pages count per migrate type at order       0      1      2      3      4      5      6      7      8      9     10
Node    0, zone   Normal, type    Unmovable  35624  25526   9745   3158     30     55     30      0      0      0      0
Node    0, zone   Normal, type      Movable   4125   2277   2182    773    352     33      7      0      0      0      0
Node    0, zone   Normal, type  Reclaimable      8     39    124     41     41      0      0      0      0      0      0
Node    0, zone   Normal, type          CMA      0      0      0      0      0      0      0      0      0      0      0
Node    0, zone   Normal, type   HighAtomic     67     18     18      2      0      0      0      0      0      0      0
Node    0, zone   Normal, type      Isolate      0      0      0      0      0      0      0      0      0      0      0

Number of blocks type     Unmovable      Movable  Reclaimable          CMA   HighAtomic      Isolate
Node 0, zone   Normal         1293         2113           31           36            1            0

Number of mixed blocks    Unmovable      Movable  Reclaimable          CMA   HighAtomic      Isolate
Node 0, zone   Normal           82          524           16            0            1            0

上面打印可分四部分:

(1) 打印 pageblock_order 和 pageblock_nr_pages 的值, 打印函数 pagetypeinfo_show()。

(2) 打印的是 zone->free_area[order]->free_list[MIGRATE_TYPES] 链表上元素的个数,是个二维矩阵了,实现函数是 pagetypeinfo_showfree_print()。

(3) 打印的是以 pageblock_nr_pages 为步长,遍历每个zone的所有pfn, 从 mem_section->usage->pageblock_flags 拿到其对应的迁移类型,记录的是这种迁移类型对应的页块(单位4M)的个数。打印函数是 pagetypeinfo_showblockcount_print()

(4) 依赖 CONFIG_PAGE_OWNER, 若没有配置则什么也不打印。遍历zone span的所有pages, 剔除没有对应实际物理内存的page、剔除本zone的page、剔除PageBuddy(page)成立的page、剔除PageReserved(page)成立的page后, 根据拓展数据中 page_owner->gfp_mask 得到的page的迁移类型和page所在的pageblock(单位4M)的迁移类型不相等时,则将pageblock对应的迁移类型计数加1,若pageblock对应的迁移类型是 MIGRATE_CMA 则加在 MIGRATE_MOVABLE 上。打印函数是 pagetypeinfo_showmixedcount_print()

ChatGPT: 该函数可能遍历内存中的页面块,并统计每个迁移类型中包含其他类型页面的页面块数量。这有助于了解内存管理策略(如页面迁移和回收)的效果。


二、打印实现

/* kernel_init_freeable --> ~ */
void __init init_mm_internals(void) //mm/vmstat.c
{
    ...
    proc_create_seq("buddyinfo", 0444, NULL, &fragmentation_op);
    proc_create_seq("pagetypeinfo", 0400, NULL, &pagetypeinfo_op);
}


1. buddyinfo

static void frag_show_print(struct seq_file *m, pg_data_t *pgdat, struct zone *zone) //mm/vmstat.c
{
    int order;

    seq_printf(m, "Node %d, zone %8s ", pgdat->node_id, zone->name);
    for (order = 0; order < MAX_ORDER; ++order)
        seq_printf(m, "%6lu ", zone->free_area[order].nr_free);
    seq_putc(m, '\n');
}


2. pagetypeinfo

static int pagetypeinfo_show(struct seq_file *m, void *arg) //mm/vmstat.c
{
    pg_data_t *pgdat = (pg_data_t *)arg;

    /* 打印第(1)部分内容 */
    seq_printf(m, "Page block order: %d\n", pageblock_order); //(MAX_ORDER-1)=10
    seq_printf(m, "Pages per block:  %lu\n", pageblock_nr_pages); //(1UL << pageblock_order)=1<<10
    seq_putc(m, '\n');
    /* 打印第(2)部分内容 */
    pagetypeinfo_showfree(m, pgdat);
    /* 打印第(3)部分内容 */
    pagetypeinfo_showblockcount(m, pgdat);
    /* 打印第(4)部分内容 */
    pagetypeinfo_showmixedcount(m, pgdat);

    return 0;
}

 

标签:Node,zone,32,pagetypeinfo,内存,proc,order,pageblock
From: https://www.cnblogs.com/hellokitty2/p/18383588

相关文章

  • stm32f103c8t6 程序编译后的 Program Size: Code=xxx RO-data=xxx RW-data=xxx ZI-dat
            之前在裸机跑一些简单的项目内存完全够用,就不会涉及到内存方面的问题。最近在学FreeRTOS时,将大容量的stm32f103rct6代码移植到小容量的stm32f103c8t6上时,就遇到了内存不足的问题,所以才注意到这些东西。    那么在我们编译后看到的这些东西到底......
  • 内存管理-31-内存统计-1-初探
    基于msm-5.4一、概述Linux内核为了帮助大家从宏观上把握系统内存的使用情况,在几大核心数据结构上都有相应的统计计数,如物理页面使用情况、伙伴系统分配情况、内存管理区的物理页面使用情况等。1.vm_stat计数值内存管理模块定义了三个全局的vm_stat计数值//include/linux......
  • 项目中Redis常见的一些问题(缓存穿透,缓存雪崩,内存耗尽等)
    缓存穿透缓存穿透是指查询一个不存在的数据,导致每次请求查询这个不存在的数据都会转发到数据库,可能导致数据库崩溃通常都会用布隆过滤器来解决它布隆过滤器布隆过滤器主要是用于检索一个元素是否在一个集合中。它的底层主要是先去初始化一个比较大数组,里面存放的二进......
  • linux系统内存不足时, 系统杀死程序 哪儿查看日记
    下面是由ai回答的:当Linux系统内存不足时,系统可能会通过OOMkiller(Out-Of-Memorykiller)机制自动杀死一些进程以释放内存。要查看因内存不足而被系统杀死的程序,可以通过查看系统日志来获取相关信息。根据搜索结果,以下是一些常用的方法来查看系统日志中的相关记录:使用dmesg......
  • IDA反汇编STM32代码学习记录
    首先,使用IDA反汇编STM32代码应该打开的是bin文件,而不是.hex或.axf文件,只有bin文件是和下载到flash内的数据一致的。具体参见:三种文件的区别那么,怎么生成bin文件呢,在有工程的情况下,在MDK中是在user的afterbuild后添加命令:fromelf--bin-o./Output/@L.bin./Output/@L.axf@L代......
  • 软设每日一练1——(16进制快速算结果)若用256K×8bit存储器芯片,构成地址40000000H到400F
    题目:若用256K× 8bit的存储器芯片,构成地址40000000H到400FFFFFH且按字节编址的内存区域,则需(        )片芯片A.4        B.8        C.16        D.32        答案:A解:1、首先看单位,存储器芯片单位是256K× 8bit,地址是字节......
  • STM32或者RSIC-V输出SPWM波形
    直接上代码吧,其余的内容可以到别的地方搜索,包括什么是SPWM /*@NotePWMoutputroutine:TIM1_CH1(PA8)ThisexampledemonstratesthattheTIM_CH1(PA8)pinoutputsPWMinPWMmode1andPWMmode2.*/#include"debug.h"/*PWMOutputModeDefinition*/#definePWM_M......
  • FreeRTOS不同内存管理策略的区别
    来源于正点原子《STM32F1FreeRTOS开发手册V1.1》第二十章内存管理20.7heap_5内存分配方法(P391):heap_1最简单,但是只能申请内存,不能释放。heap_2提供了内存释放函数,用户代码也可以直接调用函数pvPortMalloc()和vPortFree()来申请和释放内存,但是heap_2会导致内存碎片的......
  • 四博智联 Esp-32CAM 图像识别接入燃气数据 本地识别及百度数字识别
    接到一个客户需求,利用ESP32+摄像头完成家庭燃气表数据的采集接入,大概流程:一、设备配网:  通过微信小程序BLE连接到ESP32配网,配网完成后,把设备id绑定到相应的账号下。让ChatGPT设计协议及代码如下:设计一个通过微信小程序和BLE(蓝牙低功耗)给ESP32设备配网的协议需要考虑数据......
  • 283:vue+openlayers 4326和3857坐标系下的分辨率区别
    作者:还是大剑师兰特,曾为美国某知名大学计算机专业研究生,现为国内GIS领域高级前端工程师,CSDN知名博主,深耕openlayers、leaflet、mapbox、cesium,canvas,echarts等技术开发,欢迎加微信(gis-dajianshi),一起交流。查看本专栏目录-本文是第283个示例文章目录一......