On Thu, May 18, 2023, at 15:09, guoren@xxxxxxxxxx wrote: > From: Guo Ren <guoren@xxxxxxxxxxxxxxxxx> > Why 32-bit Linux? > ================= > The motivation for using a 32-bit Linux kernel is to reduce memory > footprint and meet the small capacity of DDR & cache requirement > (e.g., 64/128MB SIP SoC). > > Here are the 32-bit v.s. 64-bit Linux kernel data type comparison > summary: > 32-bit 64-bit > sizeof(page): 32bytes 64bytes > sizeof(list_head): 8bytes 16bytes > sizeof(hlist_head): 8bytes 16bytes > sizeof(vm_area): 68bytes 136bytes > ... > Mem-usage: > (s32ilp32) # free > total used free shared buff/cache available > Mem: 100040 8380 88244 44 3416 88080 > > (s64lp64) # free > total used free shared buff/cache available > Mem: 91568 11848 75796 44 3924 75952 > > (s64ilp32) # free > total used free shared buff/cache available > Mem: 101952 8528 90004 44 3420 89816 > ^^^^^ > > It's a rough measurement based on the current default config without any > modification, and 32-bit (s32ilp32, s64ilp32) saved more than 16% memory > to 64-bit (s64lp64). But s32ilp32 & s64ilp32 have a similar memory > footprint (about 0.33% difference), meaning s64ilp32 has a big chance to > replace s32ilp32 on the 64-bit machine. I've tried to run the same numbers for the debate about running 32-bit vs 64-bit arm kernels in the past, but focused mostly on slightly larger systems, but I looked mainly at the 512MB case, as that is the most cost-efficient DDR3 memory configuration and fairly common. What I'd like to understand better in your example is where the 14MB of memory went. I assume this is for 128MB of total RAM, so we know that 1MB went into additional 'struct page' objects (32 bytes * 32768 pages). It would be good to know where the dynamic allocations went and if they are reclaimable (e.g. inodes) or non-reclaimable (e.g. kmalloc-128). For the vmlinux size, is this already a minimal config that one would run on a board with 128MB of RAM, or a defconfig that includes a lot of stuff that is only relevant for other platforms but also grows on 64-bit? What do you see in /proc/slabinfo, /proc/meminfo/, and 'size vmlinux' for the s64ilp32 and s64lp64 kernels here? Arnd