From: Shawn Pearce <spearce@spearce.org>
To: Theodore Tso <tytso@mit.edu>
Cc: Nicolas Pitre <nico@cam.org>, Linus Torvalds <torvalds@osdl.org>,
"Randal L. Schwartz" <merlyn@stonehenge.com>,
git@vger.kernel.org
Subject: Re: cloning the kernel - why long time in "Resolving 313037 deltas"
Date: Tue, 19 Dec 2006 01:39:30 -0500 [thread overview]
Message-ID: <20061219063930.GA2511@spearce.org> (raw)
In-Reply-To: <20061219051108.GA29405@thunk.org>
Theodore Tso <tytso@mit.edu> wrote:
> On Mon, Dec 18, 2006 at 07:13:40PM -0500, Nicolas Pitre wrote:
> > Maybe. However the mmap() may occur on section of the pack file which
> > has just been written to in order to write even more, always to the same
> > file. On Linux this is fast because the mmap'd data is likely to still
> > be in the cache.
> >
> > I guess this could be turned into a malloc()/read()/free() with no
> > trouble.
>
> Actually, depending on the size of the chunk, even on Linux
> malloc/read/free can be faster than the mmap/munmap, because
> mmap/munmap calls involve page table manipulations, and even on Linux
> that is often slower or dead even with the memory copy involved with
> using malloc/read. Even when reading huge chunks of Canon Raw File
> data at a time, I found (experimentally) that it was no faster to use
> mmap() compared to read(). And for small chunks of data, malloc/read
> will definitely win out over mmap(), since the page table operations
> and resulting page faults completely trump the cost of copying the
> bytes from the page cache to the read() buffer.
This is why git-fast-import mmaps 128 MiB blocks from the file at
a time. The mmap region is usually much larger than the file itself;
the application appends to the file via write() then goes back
and rereads data when necessary via the already established mmap.
Its rare for the application to need to unmap/remap a different block
so there really isn't very much page table manipulation overhead.
Why isn't git-index-pack doing the same? Is there some hidden glitch
in some OS somewhere that has a problem with overmapping a file and
appending into it via write()? I've done that on Mac OS X, Linux,
BSDi, Solaris... never had a problem.
--
next prev parent reply other threads:[~2006-12-19 6:40 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <86y7p57y05.fsf@blue.stonehenge.com>
[not found] ` <Pine.LNX.4.63.0612182154170.19693@wbgn013.biozentrum.uni-wuerzburg.de>
[not found] ` <Pine.LNX.4.63.0612182213020.19693@wbgn013.biozentrum.uni-wuerzburg.de>
[not found] ` <Pine.LNX.4.64.0612181638220.18171@xanadu.home>
2006-12-18 21:55 ` [PATCH] fetch-pack: avoid fixing thin packs when unnecessary Johannes Schindelin
2006-12-18 22:17 ` Nicolas Pitre
[not found] ` <Pine.LNX.4.64.0612181251020.3479@woody.osdl.org>
[not found] ` <86r6uw9azn.fsf@blue.stonehenge.com>
[not found] ` <Pine.LNX.4.64.0612181625140.18171@xanadu.home>
2006-12-18 22:01 ` cloning the kernel - why long time in "Resolving 313037 deltas" Randal L. Schwartz
2006-12-18 22:09 ` Nicolas Pitre
2006-12-18 22:21 ` Randal L. Schwartz
2006-12-18 22:50 ` Nicolas Pitre
2006-12-18 22:22 ` Linus Torvalds
2006-12-18 22:26 ` Randal L. Schwartz
2006-12-18 23:02 ` Martin Langhoff
2006-12-22 1:44 ` Kyle Moffett
2006-12-22 1:56 ` Shawn Pearce
2006-12-22 8:04 ` Marco Roeland
2007-01-03 13:55 ` Andreas Ericsson
2006-12-18 23:28 ` Linus Torvalds
2006-12-19 0:13 ` Nicolas Pitre
2006-12-19 5:11 ` Theodore Tso
2006-12-19 6:39 ` Shawn Pearce [this message]
2006-12-19 6:51 ` Linus Torvalds
2006-12-19 7:26 ` Shawn Pearce
2006-12-19 7:52 ` Marco Roeland
2006-12-19 7:58 ` Shawn Pearce
2006-12-19 8:32 ` Shawn Pearce
2006-12-19 8:40 ` Marco Roeland
2006-12-19 8:49 ` Shawn Pearce
2006-12-19 9:13 ` Marco Roeland
2006-12-19 20:28 ` Alex Riesen
2006-12-21 20:35 ` Juergen Ruehle
2006-12-19 16:19 ` Theodore Tso
2006-12-19 16:57 ` Linus Torvalds
2006-12-20 1:54 ` Shawn Pearce
2006-12-20 1:58 ` Shawn Pearce
2006-12-19 6:47 ` Linus Torvalds
2006-12-19 8:32 ` Johannes Schindelin
2006-12-19 9:10 ` Junio C Hamano
2006-12-19 9:47 ` Jeff King
2006-12-19 10:24 ` Andy Whitcroft
2006-12-19 15:53 ` [PATCH] index-pack usage of mmap() is unacceptably slower on many OSes other than Linux Nicolas Pitre
2006-12-19 19:00 ` Junio C Hamano
2006-12-19 19:14 ` Nicolas Pitre
2006-12-19 19:55 ` Linus Torvalds
2006-12-19 19:57 ` Randal L. Schwartz
2006-12-19 20:03 ` Randal L. Schwartz
2006-12-19 20:02 ` Jeff Garzik
2006-12-20 0:30 ` Junio C Hamano
2006-12-20 0:40 ` Linus Torvalds
2006-12-20 0:50 ` Jeff Garzik
2006-12-20 1:12 ` Junio C Hamano
2006-12-20 20:17 ` Junio C Hamano
2006-12-20 20:53 ` Linus Torvalds
2006-12-20 21:52 ` Junio C Hamano
2006-12-20 22:13 ` Nikolai Weibull
2006-12-21 8:41 cloning the kernel - why long time in "Resolving 313037 deltas" linux
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=20061219063930.GA2511@spearce.org \
--to=spearce@spearce.org \
--cc=git@vger.kernel.org \
--cc=merlyn@stonehenge.com \
--cc=nico@cam.org \
--cc=torvalds@osdl.org \
--cc=tytso@mit.edu \
/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).