• Johannes Weiner's avatar
    mm: memcontrol: dump memory.stat during cgroup OOM · c8713d0b
    Johannes Weiner authored
    The current cgroup OOM memory info dump doesn't include all the memory
    we are tracking, nor does it give insight into what the VM tried to do
    leading up to the OOM. All that useful info is in memory.stat.
    
    Furthermore, the recursive printing for every child cgroup can
    generate absurd amounts of data on the console for larger cgroup
    trees, and it's not like we provide a per-cgroup breakdown during
    global OOM kills.
    
    When an OOM kill is triggered, print one set of recursive memory.stat
    items at the level whose limit triggered the OOM condition.
    
    Example output:
    
        stress invoked oom-killer: gfp_mask=0x100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
        CPU: 2 PID: 210 Comm: stress Not tainted 5.2.0-rc2-mm1-00247-g47d49835983c #135
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-20181126_142135-anatol 04/01/2014
        Call Trace:
         dump_stack+0x46/0x60
         dump_header+0x4c/0x2d0
         oom_kill_process.cold.10+0xb/0x10
         out_of_memory+0x200/0x270
         ? try_to_free_mem_cgroup_pages+0xdf/0x130
         mem_cgroup_out_of_memory+0xb7/0xc0
         try_charge+0x680/0x6f0
         mem_cgroup_try_charge+0xb5/0x160
         __add_to_page_cache_locked+0xc6/0x300
         ? list_lru_destroy+0x80/0x80
         add_to_page_cache_lru+0x45/0xc0
         pagecache_get_page+0x11b/0x290
         filemap_fault+0x458/0x6d0
         ext4_filemap_fault+0x27/0x36
         __do_fault+0x2f/0xb0
         __handle_mm_fault+0x9c5/0x1140
         ? apic_timer_interrupt+0xa/0x20
         handle_mm_fault+0xc5/0x180
         __do_page_fault+0x1ab/0x440
         ? page_fault+0x8/0x30
         page_fault+0x1e/0x30
        RIP: 0033:0x55c32167fc10
        Code: Bad RIP value.
        RSP: 002b:00007fff1d031c50 EFLAGS: 00010206
        RAX: 000000000dc00000 RBX: 00007fd2db000010 RCX: 00007fd2db000010
        RDX: 0000000000000000 RSI: 0000000010001000 RDI: 0000000000000000
        RBP: 000055c321680a54 R08: 00000000ffffffff R09: 0000000000000000
        R10: 0000000000000022 R11: 0000000000000246 R12: ffffffffffffffff
        R13: 0000000000000002 R14: 0000000000001000 R15: 0000000010000000
        memory: usage 1024kB, limit 1024kB, failcnt 75131
        swap: usage 0kB, limit 9007199254740988kB, failcnt 0
        Memory cgroup stats for /foo:
        anon 0
        file 0
        kernel_stack 36864
        slab 274432
        sock 0
        shmem 0
        file_mapped 0
        file_dirty 0
        file_writeback 0
        anon_thp 0
        inactive_anon 126976
        active_anon 0
        inactive_file 0
        active_file 0
        unevictable 0
        slab_reclaimable 0
        slab_unreclaimable 274432
        pgfault 59466
        pgmajfault 1617
        workingset_refault 2145
        workingset_activate 0
        workingset_nodereclaim 0
        pgrefill 98952
        pgscan 200060
        pgsteal 59340
        pgactivate 40095
        pgdeactivate 96787
        pglazyfree 0
        pglazyfreed 0
        thp_fault_alloc 0
        thp_collapse_alloc 0
        Tasks state (memory values in pages):
        [  pid  ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj name
        [    200]     0   200     1121      884    53248       29             0 bash
        [    209]     0   209      905      246    45056       19             0 stress
        [    210]     0   210    66442       56   499712    56349             0 stress
        oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),oom_memcg=/foo,task_memcg=/foo,task=stress,pid=210,uid=0
        Memory cgroup out of memory: Killed process 210 (stress) total-vm:265768kB, anon-rss:0kB, file-rss:224kB, shmem-rss:0kB
        oom_reaper: reaped process 210 (stress), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
    
    [hannes@cmpxchg.org: s/kvmalloc/kmalloc/ per Michal]
      Link: http://lkml.kernel.org/r/20190605161133.GA12453@cmpxchg.org
    Link: http://lkml.kernel.org/r/20190604210509.9744-1-hannes@cmpxchg.orgSigned-off-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    c8713d0b
memcontrol.c 174 KB