From: linux@horizon.com
To: jonsmirl@gmail.com
Cc: git@vger.kernel.org, linux@horizon.com, paulus@samba.org,
torvalds@osdl.org
Subject: Re: Change set based shallow clone
Date: 10 Sep 2006 12:10:07 -0400 [thread overview]
Message-ID: <20060910161007.8846.qmail@science.horizon.com> (raw)
In-Reply-To: <9e4733910609100756r1ece1e22m38054536a2909dd4@mail.gmail.com>
> You noticed too that forks of small apps are relatively slow. The
> first pass of the import tools used fork for everything and took a
> week to run with 60% of the time spent in the kernel. There may be
> some work to do on fork in the kernel. Does mapping the kernel into
> the top 1G slow down fork of these small apps? Or are they dynamically
> linked to something that is bringing in millions of pages? When I was
> doing oprofile all of the time was in the actual fork call and page
> table copying.
Actually, Linux has one of the fastest forks around, 100-200 us on
modern x86. For large executables, the shared page tables patch (is it
merged yet?) might help.
No, mapping the kernel does NOT slow anything down. Those page tables are
shared between all processes, and use the x86's global bit to avoid being
forced out of the TLB during context switch. Attempting to make the
kernel mapping vary between processes would slow things down enormously!
I'm not finding reasonably recent Linux/FreeBSD comparisons. There are
plenty of Max OS X comparisons, but it appears to particularly suck,
so that's a bit of a straw man. See, e.g.
http://www.anandtech.com/mac/showdoc.aspx?i=2520&p=7
or some figures from 2002:
http://lists.apple.com/archives/darwin-kernel/2002/Oct/msg00009.html
----------------------------------------------------------------
Host OS Mhz null null open selct sig sig fork exec sh
call I/O stat clos TCP inst hndl proc proc proc
--------- ------------- ---- ---- ---- ---- ---- ----- ---- ---- ---- ---- ----
g4 Darwin 1.4 799 2.21 3.19 12.6 16.4 30.4 3.78 9.88 1576 4095 13.K
g4 Darwin 5.5 797 2.26 3.15 14.5 17.8 30.4 3.82 10.2 5685 12.K 40.K
g4.local. Darwin 6.0 797 1.47 2.73 17.2 20.7 27.2 3.00 10.5 7517 17.K 41.K
g4.local. Darwin 6.0 (after misconfiguration fixed) 1575
g4 Linux 2.4.18- 799 0.42 0.69 2.52 3.79 33.6 1.23 3.08 659. 2642 12.K
--------- ------------- ---- ---- ---- ---- ---- ----- ---- ---- ---- ---- ----
jim Darwin 1.4 448 2.85 4.23 9.53 17 4.83 14 2402 6817 19K
jim.local Darwin 6.1 448 1.89 3.71 21 29 43 3.85 15 2832 8955 19K
For small processes such as lmbench uses, you can see from the above that
exec is much more expensive than fork. Also
http://www.opersys.com/lrtbf/index.html
http://marc.theaimsgroup.com/?l=linux-kernel&m=112086443319815
http://www.opensourcetutorials.com/tutorials/Server-Side-Coding/Administration/hyper-threading-linux/page4.html
As for small apps and dynamic linking, glibc isn't tiny (prelink can
help), but that's post-exec. If it's in the fork() call, then it's just
a case that your app's memory space is big and even copying all of its
page tables is expensive.
If you're invoking one of the git programs that's a shell script, that
adds its own startup overhead, of course.
next prev parent reply other threads:[~2006-09-10 16:10 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-07 19:52 Change set based shallow clone Jon Smirl
2006-09-07 20:21 ` Jakub Narebski
2006-09-07 20:41 ` Jon Smirl
2006-09-07 21:33 ` Jeff King
2006-09-07 21:51 ` Jakub Narebski
2006-09-07 21:37 ` Jakub Narebski
2006-09-07 22:14 ` Junio C Hamano
2006-09-07 23:09 ` Jon Smirl
2006-09-10 23:20 ` Anand Kumria
2006-09-08 8:48 ` Andreas Ericsson
2006-09-07 22:07 ` Junio C Hamano
2006-09-07 22:40 ` Jakub Narebski
2006-09-08 3:54 ` Martin Langhoff
2006-09-08 5:30 ` Junio C Hamano
2006-09-08 7:15 ` Martin Langhoff
2006-09-08 8:33 ` Junio C Hamano
2006-09-08 17:18 ` A Large Angry SCM
2006-09-08 14:20 ` Jon Smirl
2006-09-08 15:50 ` Jakub Narebski
2006-09-09 3:13 ` Petr Baudis
2006-09-09 8:39 ` Jakub Narebski
2006-09-08 5:05 ` Aneesh Kumar K.V
2006-09-08 1:01 ` linux
2006-09-08 2:23 ` Jon Smirl
2006-09-08 8:36 ` Jakub Narebski
2006-09-08 8:39 ` Junio C Hamano
2006-09-08 18:42 ` linux
2006-09-08 21:13 ` Jon Smirl
2006-09-08 22:27 ` Jakub Narebski
2006-09-08 23:09 ` Linus Torvalds
2006-09-08 23:28 ` Jon Smirl
2006-09-08 23:45 ` Paul Mackerras
2006-09-09 1:45 ` Jon Smirl
2006-09-10 12:41 ` Paul Mackerras
2006-09-10 14:56 ` Jon Smirl
2006-09-10 16:10 ` linux [this message]
2006-09-10 18:00 ` Jon Smirl
2006-09-10 19:03 ` linux
2006-09-10 20:00 ` Linus Torvalds
2006-09-10 21:00 ` Jon Smirl
2006-09-11 2:49 ` Linus Torvalds
2006-09-10 22:41 ` Paul Mackerras
2006-09-11 2:55 ` Linus Torvalds
2006-09-11 3:18 ` Linus Torvalds
2006-09-11 6:35 ` Junio C Hamano
2006-09-11 18:54 ` Junio C Hamano
2006-09-11 8:36 ` Paul Mackerras
2006-09-11 14:26 ` linux
2006-09-11 15:01 ` Jon Smirl
2006-09-11 16:47 ` Junio C Hamano
2006-09-11 21:52 ` Paul Mackerras
2006-09-11 23:47 ` Junio C Hamano
2006-09-12 0:06 ` Jakub Narebski
2006-09-12 0:18 ` Junio C Hamano
2006-09-12 0:25 ` Jakub Narebski
2006-09-11 9:04 ` Jakub Narebski
2006-09-10 18:51 ` Junio C Hamano
2006-09-11 0:04 ` Shawn Pearce
2006-09-11 0:42 ` Junio C Hamano
2006-09-11 0:03 ` Shawn Pearce
2006-09-11 0:41 ` Junio C Hamano
2006-09-11 1:04 ` Jakub Narebski
2006-09-11 2:44 ` Shawn Pearce
2006-09-11 5:27 ` Junio C Hamano
2006-09-11 6:08 ` Shawn Pearce
2006-09-11 7:11 ` Junio C Hamano
2006-09-11 17:52 ` Shawn Pearce
2006-09-11 2:11 ` Jon Smirl
2006-09-09 1:05 ` Paul Mackerras
2006-09-09 2:56 ` Linus Torvalds
2006-09-09 3:23 ` Junio C Hamano
2006-09-09 3:31 ` Paul Mackerras
2006-09-09 4:04 ` Linus Torvalds
2006-09-09 8:47 ` Marco Costalba
2006-09-09 17:33 ` Linus Torvalds
2006-09-09 18:04 ` Marco Costalba
2006-09-09 18:44 ` linux
2006-09-09 19:17 ` Marco Costalba
2006-09-09 20:05 ` Linus Torvalds
2006-09-09 20:43 ` Jeff King
2006-09-09 21:11 ` Junio C Hamano
2006-09-09 21:14 ` Jeff King
2006-09-09 21:40 ` Linus Torvalds
2006-09-09 22:54 ` Jon Smirl
2006-09-10 0:18 ` Linus Torvalds
2006-09-10 1:22 ` Junio C Hamano
2006-09-10 3:49 ` Marco Costalba
2006-09-10 4:13 ` Junio C Hamano
2006-09-10 4:23 ` Marco Costalba
2006-09-10 4:46 ` Marco Costalba
2006-09-10 4:54 ` Junio C Hamano
2006-09-10 5:14 ` Marco Costalba
2006-09-10 5:46 ` Junio C Hamano
2006-09-10 15:21 ` linux
2006-09-10 18:32 ` Marco Costalba
2006-09-11 9:56 ` Paul Mackerras
2006-09-11 12:39 ` linux
2006-09-10 9:49 ` Jakub Narebski
2006-09-10 10:28 ` Josef Weidendorfer
-- strict thread matches above, loose matches on Subject: below --
2006-09-09 10:31 linux
2006-09-09 13:00 ` Marco Costalba
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=20060910161007.8846.qmail@science.horizon.com \
--to=linux@horizon.com \
--cc=git@vger.kernel.org \
--cc=jonsmirl@gmail.com \
--cc=paulus@samba.org \
--cc=torvalds@osdl.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).