Skip to content
  • Uladzislau Rezki (Sony)'s avatar
    mm/vmalloc.c: preload a CPU with one object for split purpose · 82dd23e8
    Uladzislau Rezki (Sony) authored
    Refactor the NE_FIT_TYPE split case when it comes to an allocation of one
    extra object.  We need it in order to build a remaining space.  The
    preload is done per CPU in non-atomic context with GFP_KERNEL flags.
    
    More permissive parameters can be beneficial for systems which are suffer
    from high memory pressure or low memory condition.  For example on my KVM
    system(4xCPUs, no swap, 256MB RAM) i can simulate the failure of page
    allocation with GFP_NOWAIT flags.  Using "stress-ng" tool and starting N
    workers spinning on fork() and exit(), i can trigger below trace:
    
    <snip>
    [  179.815161] stress-ng-fork: page allocation failure: order:0, mode:0x40800(GFP_NOWAIT|__GFP_COMP), nodemask=(null),cpuset=/,mems_allowed=0
    [  179.815168] CPU: 0 PID: 12612 Comm: stress-ng-fork Not tainted 5.2.0-rc3+ #1003
    [  179.815170] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1 04/01/2014
    [  179.815171] Call Trace:
    [  179.815178]  dump_stack+0x5c/0x7b
    [  179.815182]  warn_alloc+0x108/0x190
    [  179.815187]  __alloc_pages_slowpath+0xdc7/0xdf0
    [  179.815191]  __alloc_pages_nodemask+0x2de/0x330
    [  179.815194]  cache_grow_begin+0x77/0x420
    [  179.815197]  fallback_alloc+0x161/0x200
    [  179.815200]  kmem_cache_alloc+0x1c9/0x570
    [  179.815202]  alloc_vmap_area+0x32c/0x990
    [  179.815206]  __get_vm_area_node+0xb0/0x170
    [  179.815208]  __vmalloc_node_range+0x6d/0x230
    [  179.815211]  ? _do_fork+0xce/0x3d0
    [  179.815213]  copy_process.part.46+0x850/0x1b90
    [  179.815215]  ? _do_fork+0xce/0x3d0
    [  179.815219]  _do_fork+0xce/0x3d0
    [  179.815226]  ? __do_page_fault+0x2bf/0x4e0
    [  179.815229]  do_syscall_64+0x55/0x130
    [  179.815231]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
    [  179.815234] RIP: 0033:0x7fedec4c738b
    ...
    [  179.815237] RSP: 002b:00007ffda469d730 EFLAGS: 00000246 ORIG_RAX: 0000000000000038
    [  179.815239] RAX: ffffffffffffffda RBX: 00007ffda469d730 RCX: 00007fedec4c738b
    [  179.815240] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000001200011
    [  179.815241] RBP: 00007ffda469d780 R08: 00007fededd6e300 R09: 00007ffda47f50a0
    [  179.815242] R10: 00007fededd6e5d0 R11: 0000000000000246 R12: 0000000000000000
    [  179.815243] R13: 0000000000000020 R14: 0000000000000000 R15: 0000000000000000
    [  179.815245] Mem-Info:
    [  179.815249] active_anon:12686 inactive_anon:14760 isolated_anon:0
                    active_file:502 inactive_file:61 isolated_file:70
                    unevictable:2 dirty:0 writeback:0 unstable:0
                    slab_reclaimable:2380 slab_unreclaimable:7520
                    mapped:15069 shmem:14813 pagetables:10833 bounce:0
                    free:1922 free_pcp:229 free_cma:0
    <snip>
    
    Link: http://lkml.kernel.org/r/20190606120411.8298-3-urezki@gmail.com
    
    
    Signed-off-by: default avatarUladzislau Rezki (Sony) <urezki@gmail.com>
    Cc: Hillf Danton <hdanton@sina.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Oleksiy Avramchenko <oleksiy.avramchenko@sonymobile.com>
    Cc: Roman Gushchin <guro@fb.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    82dd23e8