OK6410A 开发板 (八) 43 linux-5.11 OK6410A memblock 的 消费者

怎么查看 memblock 的消费者 memblock=debug
log 中查看关键字 "memblock_reserve: ["

start_kernel -> setup_arch -> arm_memblock_init

memblock_reserve: [0x50100000-0x51080143] arm_memblock_init+0x48/0x148			// start_kernel->setup_arch->arm_memblock_init->memblock_reserve(__pa(KERNEL_START), KERNEL_END - KERNEL_START);
memblock_reserve: [0x50004000-0x50007fff] arm_memblock_init+0x88/0x148			// start_kernel->setup_arch->arm_memblock_init->arm_mm_memblock_reserve();->memblock_reserve
memblock_reserve: [0x5fffe000-0x5fffffff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->early_alloc->memblock_alloc
memblock_reserve: [0x5fffde70-0x5fffdfff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc -> memblock_alloc
memblock_reserve: [0x5fffc000-0x5fffcfff] memblock_alloc_range_nid+0xc0/0x148 	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc -> create_mapping -> __create_mapping -> alloc_init_p4d -> alloc_init_pud -> alloc_init_pmd -> alloc_init_pte -> arm_pte_alloc -> early_alloc -> memblock_alloc
memblock_reserve: [0x5fffb000-0x5fffbfff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc -> create_mapping -> __create_mapping -> alloc_init_p4d -> alloc_init_pud -> alloc_init_pmd -> alloc_init_pte -> arm_pte_alloc -> early_alloc -> memblock_alloc
memblock_reserve: [0x5fffa000-0x5fffafff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc -> create_mapping -> __create_mapping -> alloc_init_p4d -> alloc_init_pud -> alloc_init_pmd -> alloc_init_pte -> arm_pte_alloc -> early_alloc -> memblock_alloc
memblock_reserve: [0x5fff9000-0x5fff9fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc -> create_mapping -> __create_mapping -> alloc_init_p4d -> alloc_init_pud -> alloc_init_pmd -> alloc_init_pte -> arm_pte_alloc -> early_alloc -> memblock_alloc
memblock_reserve: [0x5fff8000-0x5fff8fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc -> create_mapping -> __create_mapping -> alloc_init_p4d -> alloc_init_pud -> alloc_init_pmd -> alloc_init_pte -> arm_pte_alloc -> early_alloc -> memblock_alloc
memblock_reserve: [0x5fffde48-0x5fffde6f] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(mach_desc -> memblock_alloc
memblock_reserve: [0x5fff7000-0x5fff7fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->kmap_init->early_pte_alloc->arm_pte_alloc->early_alloc->memblock_alloc
memblock_reserve: [0x5fffde20-0x5fffde47] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->tcm_init->iotable_init(dtcm_iomap->memblock_alloc
memblock_reserve: [0x5fffddf8-0x5fffde1f] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->tcm_init->iotable_init(itcm_iomap->memblock_alloc
memblock_reserve: [0x5fff6000-0x5fff6fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->early_alloc->memblock_alloc

start_kernel->setup_arch->paging_init->bootmem_init->memblock_allow_resize 

memblock_reserve: [0x5fdf6000-0x5fff5fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->bootmem_init->zone_sizes_init->free_area_init->alloc_node_mem_map->memblock_alloc_node->memblock_alloc_try_nid
memblock_reserve: [0x5fffddc0-0x5fffdddf] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->bootmem_init->zone_sizes_init->free_area_init->free_area_init_core->setup_usemap->memblock_alloc_node->memblock_alloc_try_nid
memblock_reserve: [0x5fffdd80-0x5fffdd9f] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->request_standard_resources->memblock_alloc
memblock_reserve: [0x5fffdcc0-0x5fffdd71] memblock_alloc_range_nid+0xc0/0x148 	// start_kernel ->setup_command_line-> saved_command_line = memblock_alloc
memblock_reserve: [0x5fffdc00-0x5fffdcb1] memblock_alloc_range_nid+0xc0/0x148 	// start_kernel ->setup_command_line-> static_command_line = memblock_alloc
memblock_reserve: [0x5fdf5000-0x5fdf5fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_alloc_alloc_info->memblock_alloc
memblock_reserve: [0x5fded000-0x5fdf4fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->memblock_alloc_from->memblock_alloc_try_nid
memblock_reserve: [0x5fffdbc0-0x5fffdbc3] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> memblock_alloc
memblock_reserve: [0x5fffdb80-0x5fffdb83] memblock_alloc_range_nid+0xc0/0x148 	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> memblock_alloc
memblock_reserve: [0x5fffdb40-0x5fffdb43] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> memblock_alloc
memblock_reserve: [0x5fffdb00-0x5fffdb03] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> memblock_alloc
memblock_reserve: [0x5fffda80-0x5fffdaf7] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> memblock_alloc
memblock_reserve: [0x5fffda00-0x5fffda5b] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> pcpu_alloc_first_chunk -> memblock_alloc
memblock_reserve: [0x5fffd600-0x5fffd9ff] memblock_alloc_range_nid+0xc0/0x148 	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> pcpu_alloc_first_chunk -> memblock_alloc
memblock_reserve: [0x5fffd1c0-0x5fffd5c3] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> pcpu_alloc_first_chunk -> memblock_alloc
memblock_reserve: [0x5fffd0c0-0x5fffd1bf] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> pcpu_alloc_first_chunk -> memblock_alloc
memblock_free: [0x5fdf5000-0x5fdf5fff] setup_per_cpu_areas+0x11c/0x168			// start_kernel ->setup_per_cpu_areas->pcpu_free_alloc_info->memblock_free_early->memblock_free
memblock_reserve: [0x5fdcd000-0x5fdecfff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->vfs_caches_init_early -> dcache_init_early -> alloc_large_system_hash -> memblock_alloc
memblock_reserve: [0x5fdbd000-0x5fdccfff] memblock_alloc_range_nid+0xc0/0x148 	// start_kernel->vfs_caches_init_early -> inode_init_early -> alloc_large_system_hash -> memblock_alloc

start_kernel->vfs_caches_init_early

// 之后就没有 用过 memblock_reserve

MEMBLOCK configuration:
 memory size = 0x10000000 reserved size = 0x011c5ed8
 memory.cnt  = 0x1
 memory[0x0]    [0x50000000-0x5fffffff], 0x10000000 bytes flags: 0x0	
 	// 全部内存
 reserved.cnt  = 0x10
 reserved[0x0]  [0x50004000-0x50007fff], 0x00004000 bytes flags: 0x0	
 	// 页表,页目录表
 reserved[0x1]  [0x50100000-0x51080143], 0x00f80144 bytes flags: 0x0	
 	// kernel
 reserved[0x2]  [0x5fdbd000-0x5fdf4fff], 0x00038000 bytes flags: 0x0	
 	// inode_hashtable 	 : 文件系统相关
 	// dentry_hashtable  : 文件系统相关
 	// setup_per_cpu_areas中的memblock_alloc_from	 : per_cpu 变量相关 
 reserved[0x3]  [0x5fdf6000-0x5fffcfff], 0x00207000 bytes flags: 0x0	
 	// buddy 中的 所有的 struct page
 	// paging_init->early_alloc : zero page
 	// paging_init->kmap_init->early_pte_alloc : fixmap 相关
 	// 4个 s3c64xx_init_io-> iotable_init(s3c_iodesc -> create_mapping	: 设备的一级页表在 0x50004000-0x50007fff , 申请设备的二级页表(1个页)
 reserved[0x4]  [0x5fffd0c0-0x5fffd5c3], 0x00000504 bytes flags: 0x0	
 	// 2个 setup_per_cpu_areas->pcpu_setup_first_chunk -> pcpu_alloc_first_chunk
 reserved[0x5]  [0x5fffd600-0x5fffda5b], 0x0000045c bytes flags: 0x0	
 	// 2个 setup_per_cpu_areas->pcpu_setup_first_chunk -> pcpu_alloc_first_chunk
 reserved[0x6]  [0x5fffda80-0x5fffdaf7], 0x00000078 bytes flags: 0x0	
	// 1个 setup_per_cpu_areas->pcpu_setup_first_chunk
 reserved[0x7]  [0x5fffdb00-0x5fffdb03], 0x00000004 bytes flags: 0x0	
 	// 1个 setup_per_cpu_areas->pcpu_setup_first_chunk
 reserved[0x8]  [0x5fffdb40-0x5fffdb43], 0x00000004 bytes flags: 0x0	
 	// 1个 setup_per_cpu_areas->pcpu_setup_first_chunk
 reserved[0x9]  [0x5fffdb80-0x5fffdb83], 0x00000004 bytes flags: 0x0	
 	// 1个 setup_per_cpu_areas->pcpu_setup_first_chunk
 reserved[0xa]  [0x5fffdbc0-0x5fffdbc3], 0x00000004 bytes flags: 0x0	
 	// 1个 setup_per_cpu_areas->pcpu_setup_first_chunk
 reserved[0xb]  [0x5fffdc00-0x5fffdcb1], 0x000000b2 bytes flags: 0x0	
 	// 1个 setup_command_line-> static_command_line = memblock_alloc
 reserved[0xc]  [0x5fffdcc0-0x5fffdd71], 0x000000b2 bytes flags: 0x0	
 	// 1个 setup_command_line-> static_command_line = memblock_alloc
 reserved[0xd]  [0x5fffdd80-0x5fffdd9f], 0x00000020 bytes flags: 0x0	
 	// 1个 request_standard_resources
 reserved[0xe]  [0x5fffddc0-0x5fffdddf], 0x00000020 bytes flags: 0x0	
 	// 1个 free_area_init->free_area_init_core->setup_usemap
 reserved[0xf]  [0x5fffddf8-0x5fffffff], 0x00002208 bytes flags: 0x0	
 	// tcm_init->iotable_init(itcm_iomap							// static_vm
 	// tcm_init->iotable_init(dtcm_iomap 							// static_vm
 	// smdk6410_map_io->s3c64xx_init_io-> iotable_init(mach_desc 	// static_vm
 	// smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc 	// static_vm
 	// devicemaps_init->early_alloc									// vectors
总结
消费者有
1. 页表
2. kernel
3. per_cpu
4. 文件系统
5. buddy中的struct page
6. zero page的 物理页
7. fixmap 的 4KB 二级页表
8. 设备的 n*4KB 二级页表
9. static_vm	// add_static_vm_early
10. vectors		// vectors = early_alloc
11. resource	
12. command_line
13. setup_usemap

为什么这些模块会成为 memblock_alloc 的消费者 ???
大概是需要内存
	为什么 需要 alloc 的内存
	而不是建立 全局变量
	
	而且现在必须用,不能等到buddy建立,
	而此时只有 memblock ,所以只能用 memblock_alloc 
	

其他
per_cpu 基于 chunk内存分配器

chunk 基于 vmalloc和buddy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值