From: Dan Magenheimer <dan.magenheimer@oracle.com>
To: Seth Jennings <sjenning@linux.vnet.ibm.com>
Cc: Nebojsa Trpkovic <trx.lists@gmail.com>,
linux-kernel@vger.kernel.org,
Konrad Wilk <konrad.wilk@oracle.com>,
Andrew Morton <akpm@linux-foundation.org>,
Nitin Gupta <ngupta@vflare.org>
Subject: RE: cleancache can lead to serious performance degradation
Date: Fri, 26 Aug 2011 07:42:32 -0700 (PDT) [thread overview]
Message-ID: <16da6dde-3c17-40bf-8d84-82167b96c1ae@default> (raw)
In-Reply-To: <4E579E9F.9090906@linux.vnet.ibm.com>
> From: Seth Jennings [mailto:sjenning@linux.vnet.ibm.com]
>
> On 08/25/2011 11:56 AM, Dan Magenheimer wrote:
>
> > Third, zcache is relatively new and can certainly benefit from
> > the input of other developers. The lzo1x compression in the kernel
> > is fairly slow; Seth Jennings (cc'ed) is looking into alternate
> > compression technologies. Perhaps there is a better compression
> > choice more suitable for older-slower processors, probably with a
> > poorer compression ratio. Further, zcache currently does compression
> > and decompression with interrupts disabled, which may be a
> > significant factor in the slowdowns you've observed. This should
> > be fixable.
>
> This was something I've meaning to ask about. Why are compression
> and decompression done with interrupts disabled?
The "hb->lock" is held during most tmem operations. If a tmem
operation (or the callback to zcache) is interrupted and the
current cpu is scheduled to run another task, and the new task
calls into tmem, deadlock could occur.
In some cases, I think disabling preemption or bottom-halves instead
of disabling interrupts may be sufficient, but I ran into problems
when I tried that and never got back to it. Note though that
interrupts are already disabled in some cases when cleancache is
called, so that would only solve part of the problem.
> What would need to change so that we don't have to disable interrupts?
Not easy, but not terribly hard I think:
1) On put, copy the page into tmem uncompressed, and keep a list
of not-yet-compressed pages. (The copy would still need to be
done with interrupts disabled but copying a page is presumable
one-to-three orders of magnitude faster than compress/decompress.)
2) An independent lower-priority thread would be launched periodically
to compress one or more pages on the uncompressed list and
atomically replace the uncompressed page with the compressed version,
and change all pointers. Then the uncompressed page could be freed.
There are likely some ugly race conditions in here.
3) On get, ensure not-yet-compressed pages are properly handled.
Dan
P.S. On vacation today, no more email until next week.
next prev parent reply other threads:[~2011-08-26 14:42 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-08-17 21:57 Nebojsa Trpkovic
2011-08-25 4:12 ` Konrad Rzeszutek Wilk
2011-08-25 16:56 ` Dan Magenheimer
2011-08-26 13:24 ` Seth Jennings
2011-08-26 14:42 ` Dan Magenheimer [this message]
2011-08-29 0:45 ` Nebojsa Trpkovic
2011-08-29 15:08 ` Dan Magenheimer
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=16da6dde-3c17-40bf-8d84-82167b96c1ae@default \
--to=dan.magenheimer@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=ngupta@vflare.org \
--cc=sjenning@linux.vnet.ibm.com \
--cc=trx.lists@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
all inboxes | Powered by JetHome®