• K
    memcg: allocate all page_cgroup at boot · 52d4b9ac
    KAMEZAWA Hiroyuki 提交于
    Allocate all page_cgroup at boot and remove page_cgroup poitner from
    struct page.  This patch adds an interface as
    
     struct page_cgroup *lookup_page_cgroup(struct page*)
    
    All FLATMEM/DISCONTIGMEM/SPARSEMEM  and MEMORY_HOTPLUG is supported.
    
    Remove page_cgroup pointer reduces the amount of memory by
     - 4 bytes per PAGE_SIZE.
     - 8 bytes per PAGE_SIZE
    if memory controller is disabled. (even if configured.)
    
    On usual 8GB x86-32 server, this saves 8MB of NORMAL_ZONE memory.
    On my x86-64 server with 48GB of memory, this saves 96MB of memory.
    I think this reduction makes sense.
    
    By pre-allocation, kmalloc/kfree in charge/uncharge are removed.
    This means
      - we're not necessary to be afraid of kmalloc faiulre.
        (this can happen because of gfp_mask type.)
      - we can avoid calling kmalloc/kfree.
      - we can avoid allocating tons of small objects which can be fragmented.
      - we can know what amount of memory will be used for this extra-lru handling.
    
    I added printk message as
    
    	"allocated %ld bytes of page_cgroup"
            "please try cgroup_disable=memory option if you don't want"
    
    maybe enough informative for users.
    Signed-off-by: NKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Reviewed-by: NBalbir Singh <balbir@linux.vnet.ibm.com>
    Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    52d4b9ac
page_alloc.c 130.1 KB