linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Dan Magenheimer <dan.magenheimer@oracle.com>
To: Seth Jennings <sjenning@linux.vnet.ibm.com>
Cc: Nitin Gupta <ngupta@vflare.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Minchan Kim <minchan@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Tejun Heo <tj@kernel.org>,
	David Howells <dhowells@redhat.com>,
	x86@kernel.org, Nick Piggin <npiggin@gmail.com>,
	Konrad Rzeszutek Wilk <konrad@darnok.org>
Subject: RE: [PATCH v2 3/3] x86: Support local_flush_tlb_kernel_range
Date: Fri, 15 Jun 2012 12:39:13 -0700 (PDT)	[thread overview]
Message-ID: <9c6c8ae0-0212-402d-a906-0d0c61e5e058@default> (raw)
In-Reply-To: <4FDB8808.9010508@linux.vnet.ibm.com>

> From: Seth Jennings [mailto:sjenning@linux.vnet.ibm.com]
> > The compression code already compresses to a per-cpu page-pair
> > already and then that "zpage" is copied into the space allocated
> > for it by zsmalloc.  For that final copy, if the copy code knows
> > the target may cross a page boundary, has both target pages
> > kmap'ed, and is smart about doing the copy, the "pair mapping"
> > can be avoided for compression.
> 
> The problem is that by "smart" you mean "has access to zsmalloc
> internals".  zcache, or any user, would need the know the kmapped
> address of the first page, the offset to start at within that page, and
> the kmapped address of the second page in order to do the smart copy
> you're talking about.  Then the complexity to do the smart copy that
> would have to be implemented in each user.

Or simply add a zsmalloc_copy in zsmalloc and require that
it be used by the caller (instead of a memcpy).

> > The decompression path calls lzo1x directly and it would be
> > a huge pain to make lzo1x smart about page boundaries.  BUT
> > since we know that the decompressed result will always fit
> > into a page (actually exactly a page), you COULD do an extra
> > copy to the end of the target page (using the same smart-
> > about-page-boundaries copying code from above) and then do
> > in-place decompression, knowing that the decompression will
> > not cross a page boundary.  So, with the extra copy, the "pair
> > mapping" can be avoided for decompression as well.
> 
> This is an interesting thought.
> 
> But this does result in a copy in the decompression (i.e. page fault)
> path, where right now, it is copy free.  The compressed data is
> decompressed directly from its zsmalloc allocation to the page allocated
> in the fault path.

The page fault occurs as soon as the lzo1x compression code starts anyway,
as do all the cache faults... both just occur earlier, so the only
additional cost is the actual cpu instructions to move the sequence of
(compressed) bytes from the zsmalloc-allocated area to the end
of the target page.

TLB operations can be very expensive, not to mention (as the
subject of this thread attests) non-portable.
 
> Doing this smart copy stuff would move most of the complexity out of
> zsmalloc into the user which defeats the purpose of abstracting the
> functionality out in the first place: so the each user that wants to do
> something like this doesn't have to reinvent the wheel.

See above.  It can be buried in zsmalloc.

Again, this is all just a suggestion, admittedly from someone who
doesn't like pure abstractions in kernel code ;-)

Dan

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2012-06-15 19:40 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-16  2:05 [PATCH v2 1/3] zsmalloc: support zsmalloc to ARM, MIPS, SUPERH Minchan Kim
2012-05-16  2:05 ` [PATCH v2 2/3] remove dependency with x86 Minchan Kim
2012-05-16 17:11   ` Seth Jennings
2012-05-17  8:06     ` Minchan Kim
2012-05-16  2:05 ` [PATCH v2 3/3] x86: Support local_flush_tlb_kernel_range Minchan Kim
2012-05-17  8:11   ` Minchan Kim
2012-05-17 14:46     ` Greg Kroah-Hartman
2012-05-18  8:35       ` Minchan Kim
2012-05-17 14:51     ` Peter Zijlstra
2012-05-17 15:08       ` Peter Zijlstra
2012-05-19  0:13         ` Alex Shi
2012-05-18  8:36       ` Minchan Kim
2012-06-15 15:13       ` Seth Jennings
2012-06-15 16:35         ` Dan Magenheimer
2012-06-15 16:45           ` Nitin Gupta
2012-06-15 17:29             ` Dan Magenheimer
2012-06-15 19:07               ` Seth Jennings
2012-06-15 19:39                 ` Dan Magenheimer [this message]
2012-06-15 19:53                   ` Nitin Gupta
2012-06-15 20:13                     ` Dan Magenheimer
2012-06-15 21:23                       ` Nitin Gupta
2012-06-15 23:26                         ` Seth Jennings
2012-06-15 16:48           ` Seth Jennings
2012-05-16  7:28 ` [PATCH v2 1/3] zsmalloc: support zsmalloc to ARM, MIPS, SUPERH Guan Xuetao
2012-05-17  0:07   ` Minchan Kim
2012-05-17  0:56     ` Guan Xuetao
2012-05-17  8:04       ` Minchan Kim
2012-05-18  1:45         ` Guan Xuetao
2012-05-18  8:38           ` Minchan Kim
2012-05-17  8:32 ` Paul Mundt
2012-05-17  9:06   ` Minchan Kim
2012-05-17  9:19     ` Paul Mundt
2012-05-17  9:08   ` Minchan Kim
2012-05-23 20:51 ` Seth Jennings

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=9c6c8ae0-0212-402d-a906-0d0c61e5e058@default \
    --to=dan.magenheimer@oracle.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=dhowells@redhat.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=konrad@darnok.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=minchan@kernel.org \
    --cc=mingo@redhat.com \
    --cc=ngupta@vflare.org \
    --cc=npiggin@gmail.com \
    --cc=sjenning@linux.vnet.ibm.com \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=x86@kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).