On Mon, Mar 23, 2020 at 05:05:00PM +0900, Jaewon Kim wrote: > /proc/meminfo or show_free_areas does not show full system wide memory > usage status because memory stats do not track all memory allocations. > There seems to be huge hidden memory especially on embedded system. It > is because some HW IPs in the system use common DRAM memory instead of > internal memory. Device drivers directly request huge pages from the > page allocator with alloc_pages. > > In Android system, most of those hidden memory seems to be vmalloc > pages, ion system heap memory, graphics memory, and memory for DRAM > based compressed swap storage. They may be shown in other node but it > seems to be useful if /proc/meminfo_extra shows all those extra memory > information. And show_mem also need to print the info in oom situation. > > Fortunately vmalloc pages is already shown by commit 97105f0ab7b8 > ("mm: vmalloc: show number of vmalloc pages in /proc/meminfo"). Swap > memory using zsmalloc can be seen through vmstat by commit 91537fee0013 > ("mm: add NR_ZSMALLOC to vmstat") but not on /proc/meminfo. > > Memory usage of specific driver can be various so that showing the usage > through upstream meminfo.c is not easy. To print the extra memory usage > of a driver, introduce following APIs. Each driver needs to count as > atomic_long_t. > > int register_meminfo_extra(atomic_long_t *val, int shift, > const char *name); > int unregister_meminfo_extra(atomic_long_t *val); > > Currently register ION system heap allocator and zsmalloc pages. > Additionally tested on local graphics driver. > > i.e) cat /proc/meminfo_extra | tail -3 > IonSystemHeap: 242620 kB > ZsPages: 203860 kB > GraphicDriver: 196576 kB In that case definitely delete ':', spaces and KB. They only slowdown generation and parsing in userspace. Values should be printed /proc/vmstat does it, maybe with tab instead of space. foo 1234 bar 0 zot 111