Hi Michal Thanks for your kindly support. I got a device, and dump the /proc/meminfo and /proc/vmstat files, they are the Linux standard proc files. I found that: Cached = 339880 KB, but nr_free_pages=14675*4 = 58700KB and nr_shmem = 508*4=2032KB nr_shmem is just a little memory, and nr free pages + nr_shmem is largely less than Cached. So why nr_free_pages is largely less than Cached? Thank you. $ adb shell cat /proc/meminfo MemTotal: 1366904 kB MemFree: 59040 kB Buffers: 54600 kB Cached: 339880 kB $ adb shell cat /proc/vmstat nr_free_pages 14675 nr_inactive_anon 73520 nr_shmem 508 Thanks Zhiyuan zhu -----邮件原件----- 发件人: Michal Hocko [mailto:mhocko@suse.cz] 发送时间: 2014年11月20日 17:58 收件人: Zhiyuan Zhu(朱志遠) 抄送: hannes@cmpxchg.org; Future Zhou(周未來); Rachel Zhang(張瑩); bsingharora@gmail.com; kamezawa.hiroyu@jp.fujitsu.com; cgroups@vger.kernel.org; linux-mm@kvack.org; Greg KH 主题: Re: low memory killer [Adding Greg to CC as the current maintainer of the staging and dropping majordomo] I am not Johannes but, On Thu 20-11-14 09:26:05, zhiyuan_zhu@htc.com wrote: > hi Johannes > > My name is Zhiyuan zhu, an android development engineer in htc. > We encounter a lowmemorykiller’s problem. > Coluld you help to kindly support? Thank you. Please note that lowmemory killer is not part of Memory cgroup resource controller. It is a staging driver which is supposed to be supported by support by Android people. I am not sure about the current state but the implementation and some concepts used to be broken in many ways. Anyway I think the driver should be dropped from the tree or try to get promoted to the regular tree _after_ it passes a proper review. > Problem describtion: > We noticed that gap of dumping cached value from “lowmemorykiller” > and “/proc/meminfo/” are different apparently. Like example below, > lowmemorykiller showed cache only has 72460kB while launcher was > killed, but /proc/meminfo showed cached still has 142448kB. Please > check why the gap of cache value between lowmemorykill and > /proc/meminfo are huge. lowmem_scan prints: other_file = global_page_state(NR_FILE_PAGES) - global_page_state(NR_SHMEM) - total_swapcache_pages(); as per meminfo_proc_show(), Cached value corresponds to: cached = global_page_state(NR_FILE_PAGES) - total_swapcache_pages() - i.bufferram; So those two values are quite different. E.g. lowmem killer ignores shmem pages. This can be considerable amount of memory. > kernel_e0058_0001_20141107_204711_LC4ABYA00200_htc_a31ul_0.54.999.1.txt at LC4ABYA00200 > 6 161030.084144 2014-11-07 21:44:53.304 lowmemorykiller: Killing 'om.htc.launcher' (4486), adj 294, > 6 161030.084144 2014-11-07 21:44:53.304 to free 47856kB on behalf of 'kworker/u8:14' (20594) because > 6 161030.084144 2014-11-07 21:44:53.304 cache 72460kB is below limit 73728kB for oom_score_adj 235 > 6 161030.084144 2014-11-07 21:44:53.304 Free memory is 51304kB above reserved > 4 161030.084797 2014-11-07 21:44:53.304 MemFree: 55676 kB > 4 161030.084797 2014-11-07 21:44:53.304 Buffers: 1240 kB > 4 161030.084797 2014-11-07 21:44:53.304 Cached: 142448 kB I do not see any code in drivers/staging/android/lowmemorykiller.c that would print such an information in the current tree. > Lowmemorykiller calculated cache value is 72460kB, but the > /proc/meminfo’s cached is 142448 kB > > After checked the code, I found that: > Lowmemorykiller’s memory information is comes from /proc/zoneinfo > file’s nr_file_pages So I want to know how different the > /proc/zoneinfo file’s nr_file_pages and /proc/meminfo file’s Cached ? See the above. -- Michal Hocko SUSE Labs