From: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
To: "kyeongdon.kim" <kyeongdon.kim@lge.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
minchan@kernel.org, Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, sergey.senozhatsky@gmail.com
Subject: Re: [PATCH] zram: Prevent page allocation failure during zcomp_strm_alloc
Date: Fri, 20 Nov 2015 09:49:04 +0900 [thread overview]
Message-ID: <20151120004904.GA4262@swordfish> (raw)
In-Reply-To: <564DD354.1090006@lge.com>
Hello,
On (11/19/15 22:49), kyeongdon.kim wrote:
[..]
> I know what you mean (streams are not free).
> First of all, I'm sorry I would have to tell you why I try this patch.
nothing to be sorry about.
> When we're using LZ4 multi stream for zram swap, I found out this
> allocation failure message in system running test,
> That was not only once, but a few. Also, some failure cases were
> continually occurring to try allocation order 3.
> I believed that status makes time delay issue to process launch.
ahhh, I see. repetitive allocation failures during heavy I/O and low
memory conditions. hm... does it actually make any sense to make
something like this (*just an idea*)
---
diff --git a/drivers/block/zram/zcomp.c b/drivers/block/zram/zcomp.c
index 5cb13ca..049ae6b 100644
--- a/drivers/block/zram/zcomp.c
+++ b/drivers/block/zram/zcomp.c
@@ -124,6 +124,19 @@ static struct zcomp_strm *zcomp_strm_multi_find(struct zcomp *comp)
zstrm = zcomp_strm_alloc(comp);
if (!zstrm) {
spin_lock(&zs->strm_lock);
+ /*
+ * If current IO path has failed to allocate a new
+ * stream then most likely lots of subsequent IO
+ * requests will do the same, wasting time attempting
+ * to reclaim pages, printing warning, etc. Reduce
+ * the number of max_stream and print an error.
+ */
+ if (zs->max_strm > 1) {
+ zs->max_strm--;
+ pr_err("%s: reduce max_comp_streams to %d\n",
+ "Low memory",
+ zs->max_strm);
+ }
zs->avail_strm--;
spin_unlock(&zs->strm_lock);
wait_event(zs->strm_wait, !list_empty(&zs->idle_strm));
---
A 'broken English' comment can shed some light on the idea.
Hopefully, by the time we reduce ->max_strm there are N (>1)
streams already. In the worst case we go down to a single stream,
but that is something what would have happened anyway -- we don't
have memory for N streams. We don't rollback the max_stream value
(at least not in this version); we basically don't know when the
low memory condition goes away -- may be never.
> So I tried to modify this by pre-allocating and solved it, even if there
> was small memory using in advance.
>
> But because of this patch, if there is an unneeded memory using.
> I want to try new patch from another angle.
> Firstly, we can change 'vmalloc()' instead of 'kzalloc()' for the
> 'zstrm->private".
Yes, we can try this, I guess.
> Secondly, we can use GFP_NOWAIT flag to avoid this warning after 2nd
> stream allocation.
GFP_NOWAIT. hm... no, I don't think so.
-ss
next prev parent reply other threads:[~2015-11-20 0:48 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1447916068-28385-1-git-send-email-kyeongdon.kim@lge.com>
2015-11-19 9:45 ` [PATCH] zram: Prevent page allocation failure during zcomp_strm_alloc Sergey Senozhatsky
2015-11-19 13:49 ` kyeongdon.kim
2015-11-20 0:49 ` Sergey Senozhatsky [this message]
[not found] ` <20151119160036.GE15540@bbox>
2015-11-20 0:51 ` Sergey Senozhatsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151120004904.GA4262@swordfish \
--to=sergey.senozhatsky.work@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=kyeongdon.kim@lge.com \
--cc=linux-kernel@vger.kernel.org \
--cc=minchan@kernel.org \
--cc=sergey.senozhatsky@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox