lkml.org 
[lkml]   [2015]   [Nov]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: Re: [PATCH v3] zram: try vmalloc() after kmalloc()
    From
    Date
    Hello Andrew,
    On 2015-11-24 오전 7:52, Andrew Morton wrote:
    > On Mon, 23 Nov 2015 15:21:15 +0900 Kyeongdon Kim <kyeongdon.kim@lge.com>
    > wrote:
    >
    >> When we're using LZ4 multi compression streams for zram swap,
    >> we found out page allocation failure message in system running test.
    >> That was not only once, but a few(2 - 5 times per test).
    >> Also, some failure cases were continually occurring to try allocation
    >> order 3.
    >>
    >> In order to make parallel compression private data, we should call
    >> kzalloc() with order 2/3 in runtime(lzo/lz4). But if there is no order
    >> 2/3 size memory to allocate in that time, page allocation fails.
    >> This patch makes to use vmalloc() as fallback of kmalloc(), this
    >> prevents page alloc failure warning.
    >>
    >> After using this, we never found warning message in running test, also
    >> It could reduce process startup latency about 60-120ms in each case.
    >>
    >> ...
    >>
    >> --- a/drivers/block/zram/zcomp_lz4.c
    >> +++ b/drivers/block/zram/zcomp_lz4.c
    >> @@ -10,17 +10,25 @@
    >> #include <linux/kernel.h>
    >> #include <linux/slab.h>
    >> #include <linux/lz4.h>
    >> +#include <linux/vmalloc.h>
    >> +#include <linux/mm.h>
    >>
    >> #include "zcomp_lz4.h"
    >>
    >> static void *zcomp_lz4_create(void)
    >> {
    >> - return kzalloc(LZ4_MEM_COMPRESS, GFP_KERNEL);
    >> + void *ret;
    >> +
    >> + ret = kzalloc(LZ4_MEM_COMPRESS,
    >> + __GFP_NORETRY|__GFP_NOWARN|__GFP_NOMEMALLOC);
    >> + if (!ret)
    >> + ret = vzalloc(LZ4_MEM_COMPRESS);
    >> + return ret;
    >> }
    >
    > What's the reasoning behind the modification to the gfp flags?
    >
    > It clears __GFP_FS, __GFP_IO and even __GFP_WAIT. I suspect the latter
    > two (at least) can be retained. And given that vmalloc() uses
    > GFP_KERNEL, what's the point in clearing those flags for the kmalloc()
    > case?
    >
    > If this change (or something like it) remains in place, it should have
    > a comment which fully explains the reasons, please.

    Sorry for the delay in replying,
    I just tried to remove that warning message. If there are more rightable
    gfp flags(like a code in Minchan's patch), we can use it.

    Thanks,


    \
     
     \ /
      Last update: 2015-11-24 09:21    [W:4.412 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site