linux 内存显示括号内字母的含义

本文解析Linux系统中sysrq-trigger触发的内存报告,通过源码解读M、U、E、R等字符含义,并探讨内存管理类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当linux系统发生异常或者 echo 'm' > /proc/sysrq-trigger 我们会看到类似以下的信息,其中括号内字符代表什么含义呢?我们跟踪 sysrq-trigger,看看源码的解释

DMA: 1*4kB (M) 0*8kB 1*16kB (M) 2*32kB (UM) 2*64kB (UM) 1*128kB (U) 2*256kB (UM) 2*512kB (UM) 1*1024kB (M) 1*2048kB (M) 2*4096kB (ER) = 13140kB
DMA32: 294*4kB (UEM) 1052*8kB (UEM) 608*16kB (UEM) 398*32kB (UEM) 190*64kB (UEM) 82*128kB (UEM) 48*256kB (EM) 34*512kB (EM) 23*1024kB (UEM) 13*2048kB (UEM) 371*4096kB (MR) = 1654200kB
Normal: 158*4kB (UEM) 503*8kB (UEM) 266*16kB (UEM) 160*32kB (UEM) 80*64kB (UEM) 40*128kB (UEM) 30*256kB (UEM) 21*512kB (UEM) 9*1024kB (EM) 4*2048kB (EM) 147*4096kB (EMR) = 662224kB

部分源码如下,我们省略一些其他信息,找我们最终想要的

# drivers/tty/sysrq.c
__handle_sysrq()
    sysrq_handle_showmem()
        show_mem()

# lib/show_mem.c
show_mem()
    show_free_areas()
        show_migration_types()

# mm/page_alloc.c 
show_migration_types(unsigned char type)
{
	static const char types[MIGRATE_TYPES] = {
		[MIGRATE_UNMOVABLE]	= 'U',
		[MIGRATE_RECLAIMABLE]	= 'E',
		[MIGRATE_MOVABLE]	= 'M',
		[MIGRATE_RESERVE]	= 'R',
#ifdef CONFIG_CMA
		[MIGRATE_CMA]		= 'C',
#endif
#ifdef CONFIG_MEMORY_ISOLATION
		[MIGRATE_ISOLATE]	= 'I',
#endif
	};
	char tmp[MIGRATE_TYPES + 1];
	char *p = tmp;
	int i;

	for (i = 0; i < MIGRATE_TYPES; i++) {
		if (type & (1 << i))
			*p++ = types[i];
	}

	*p = '\0';
	printk("(%s) ", tmp);
}  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值