Thread (29 messages) flat view 29 messages, 7 authors, 2016-08-11

Re: Git performance on OS X

From: Pieter de Bie <hidden>
Date: 2016-06-15 22:44:30

On 20 apr 2008, at 01:26, Linus Torvalds wrote:
It may be that the problem with OS X is a sucky pathname cache  
mechanism.

The trivial patch cut down the number of stat() calls by a fair  
amount,
but the calls that got removed were all of the "do two 'lstat()'  
calls on
the exact same pathname consecutively" type.

Maybe OS X has some very limited pathname caching that catches that,  
or
even if not, it just ends up being very nice in the D$, so it's not  
a big
deal. And then the real suckiness happens only with bigger workloads.
Yes, I just tested this.

	for (int i = 0; i < 50000; i++) {
		sprintf(s, "/Users/pieter/test/perf/%i", i);
		int ret = lstat(s, a);
	}

This loop needs about 3 seconds to  run. Replacing the i with 10 in  
the sprintf reduces it to 0.24seconds.
quoted
Command                                            Mean     Std
git status .                                       13.970  1.298
/Users/pieter/projects/External/git/git-status .   13.759  0.321
This is the WebKit archive, right?

For me, doing a "time git status ." on the WebKit thing I just  
cloned from
git://git.webkit.org/WebKit.git is much faster: 1.264s (and it goes  
down
by maybe 5-10% with my lstat-avoidance patch).

Is there any system-level profiler for OS X to get a clue where that  
cost
is, in case it's not the lstat() at all?
Yes, that was the webkit repo (the test above was in a dir with 50k  
files).

Alas, I tried to create a nice profiling for the "git status .". In  
the Instruments application I can create a sampler, but I see no way  
to export it. The option to export the script as a dtrace script is  
greyed out in the menu.

 From the sampler, it appears that the lstat calls still account for  
most of the time. I have uploaded a screenshot to http://ss.frim.nl/==759.png 
. It actually shows quite nicely when the lstats are being done --  
it's when the CPU is idle. Next to the lstats, the read_tree_recursive  
is also called often.

- Pieter
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help