Re: Git performance on OS X

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Apr 19, 2008, at 5:06 PM, Linus Torvalds wrote:
On Sat, 19 Apr 2008, Roman Shaposhnik wrote:

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?

If it happens on Leopard, DTrace would be a perfect way to query the system:

Well, I'd really like to see a traditional _time_ profile, not system
call counts.

Good point. I just thought your original question was simply about confirming
a hunch of an enormous # of lstat syscalls. Now, if by _time_ profile
you mean how much time gets spent in each syscall than the following
should help (time is in nanoseconds):

$ dtrace -n 'syscall::*:entry /pid==$target/ { self->ts=timestamp; } syscall::*:return /pid==$target/ { @[probefunc]=sum(timestamp-self- >ts); }' -c "echo Hello World"
dtrace: description 'syscall::*:entry ' matched 468 probes
Hello World
dtrace: pid 1400 has exited

  getpid                                                         1392
  sysi86                                                         2799
  getrlimit                                                      2918
  setcontext                                                     4273
  fstat64                                                        6220
  mmap                                                          15419
  munmap                                                        22593
  write                                                         27860
  ioctl                                                         30750

The script can be modified slightly to also profile all of the libc.

On the other hand, if by real system profile you mean a full fledged
sampling of the application itself than I can suggest running Git
under Shark, and not under Instruments. Although I'm extremly
curious about *why* would you need a full fledged *application*
level profile of Git as opposed to a profile of how Git interacts
with an OS.

The system call profile is trivial - it's generally going to be pretty
similar under OS X and Linux (modulo library differences, but git doesn't
really use any really complex libraries that would do system calls).

The problem we've had in the past is that Linux is simply an order of
magnitude faster (sometimes more) at some operations than OS X is, so
issues that show up on OS X don't even show up on Linux.

This was the case for doing lots of small "mmap()/munmap()" calls, for
example, where we literally had a load where OS X was two orders of
magnitude slower. We switched over to reading the files with "pread()"
instead of mmap(), and that fixed that particular issue.

Totally understood!

Thanks,
Roman.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux