From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752388AbbKXA33 (ORCPT ); Mon, 23 Nov 2015 19:29:29 -0500 Received: from mail-pa0-f42.google.com ([209.85.220.42]:33317 "EHLO mail-pa0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751843AbbKXA32 (ORCPT ); Mon, 23 Nov 2015 19:29:28 -0500 Date: Tue, 24 Nov 2015 09:30:27 +0900 From: Sergey Senozhatsky To: Andrew Morton Cc: Sergey Senozhatsky , Minchan Kim , linux-kernel@vger.kernel.org, sergey.senozhatsky.work@gmail.com Subject: Re: [PATCH] zram/zcomp: use GFP_NOIO to allocate streams Message-ID: <20151124003027.GA705@swordfish> References: <1448285279-4013-1-git-send-email-sergey.senozhatsky@gmail.com> <20151123151812.a335f9a52abd74d7017ecd85@linux-foundation.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20151123151812.a335f9a52abd74d7017ecd85@linux-foundation.org> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On (11/23/15 15:18), Andrew Morton wrote: [..] > > --- a/drivers/block/zram/zcomp_lz4.c > > +++ b/drivers/block/zram/zcomp_lz4.c > > @@ -20,10 +20,13 @@ static void *zcomp_lz4_create(void) > > void *ret; > > > > ret = kzalloc(LZ4_MEM_COMPRESS, > > - __GFP_NORETRY|__GFP_NOWARN|__GFP_NOMEMALLOC); > > - if (!ret) > > - ret = vzalloc(LZ4_MEM_COMPRESS); > > - return ret; > > + __GFP_NORETRY | __GFP_NOWARN | __GFP_NOMEMALLOC); > > But here we've still lost __GFP_RECLAIM, unnecessarily. And it's quite > unclear why __GFP_NORETRY and __GFP_NOMEMALLOC are being used. __GFP_NORETRY we are guaranteed to have at least one compression stream, so sooner or later every IO operation will be served. any IO that has failed in zcomp_lz4_create() or zcomp_lzo_create() will simply wait for already available compression stream to become idle. so this allocation is not so dramatically important - we just increase the level of parallelism (N idle streams let N IO operations to execute concurrently). apart from that we are in a low memory condition (or whatever was the reason the kernel failed to allocate LZ4_MEM_COMPRESS or LZO1X_MEM_COMPRESS) and we can avoid pressuring the kernel furher. for the same reason __GFP_NOMEMALLOC is used -- we don't want to waste an emergency memory for compression streams. I agree on __GFP_RECLAIM. Thanks. > IOW, why not simply use (GFP_NOIO|__GFP_NOWARN)? GFP_NOIO | __GFP_NORETRY | __GFP_NOWARN | __GFP_NOMEMALLOC ? -ss