Cygwin multithreading performance
Corinna Vinschen
corinna-cygwin@cygwin.com
Wed Dec 9 09:20:00 GMT 2015
On Dec 8 22:10, Mark Geisert wrote:
> I'll give the snapshot a try, thanks, but it's hard for me to see :) how
> eliminating a few hundred locks and unlocks that are 75% under 1 usec anyway
> will help much. I may have unduly influenced anybody following this by only
> showing detailed stats for the last two locks that I picked at random.
>
> What I'm more focused on are the locks being heavily used by git and heavily
> contended by the four git threads in OP's testcase. Here are the caller
> stats for this set of locks...
>
> lock latency buckets: <=1 <=10 <=100 <=1000 >1000
> mtx 4908/06002A00F0 lks 155066, ulks 155066, 66359 4395 78895 4742 675
> caller 0x0100454FAD, count 154792, L, /usr/src/git/builtin/pack-objects.c:1758
> caller 0x0100454FFC, count 154777, U, /usr/src/git/builtin/pack-objects.c:1769
> [...]
>
> mtx 4908/0600FA6860 lks 154745, ulks 154745, 56092 3217 64883 25435 5118
> caller 0x0100455659, count 1011, L, /usr/src/git/builtin/pack-objects.c:1640
> caller 0x0100455687, count 1011, U, /usr/src/git/builtin/pack-objects.c:1642
> caller 0x01004556E0, count 153734, L, /usr/src/git/builtin/pack-objects.c:1628
> caller 0x010045570E, count 153734, U, /usr/src/git/builtin/pack-objects.c:1630
>
> mtx 4908/0603498600 lks 316825, ulks 316825, 146254 4986 155345 9686 554
> caller 0x0100455269, count 196769, L, /usr/src/git/builtin/pack-objects.c:1695
> caller 0x01004552C4, count 15148, U, /usr/src/git/builtin/pack-objects.c:1705
> caller 0x0100455478, count 181621, U, /usr/src/git/builtin/pack-objects.c:1702
> caller 0x010045554C, count 120056, L, /usr/src/git/builtin/pack-objects.c:1834
> caller 0x010045556E, count 120056, U, /usr/src/git/builtin/pack-objects.c:1837
>
> If you look at the ">1000" column, you see that these 3 locks account for
> 675+5118+554 = 6347ms = 6.347sec spent waiting for these locks, best case
> for just this 1000+ usec latency bucket. The next column to the left (a
> faster bucket for latencies 101us up to 1000us) has 4742+25435+9686 = 39863,
> times 101us best case for this bucket, giving 4.026sec spent waiting for
> these locks.
>
> I probably need to modify my stats gathering program to display the total
> time spent waiting to make it more clear how things add up for each mutex
> across the whole testcase. Again, these stats are not timing how long locks
> are being held, but rather how long it takes just to acquire the lock.
But acquiring a lock includes the time it actually has to wait for
another thread holding the lock so you're measuring *also* the time
locks are hold, just by another thread. locking and unlocking a
pthread_mutex in Cygwin might be slower than using a critical section,
but it's not *that* slow.
The underlying point is, mutexes are not used as an end in itself. They
guard a shared resource. What we ultimately need to know here is
1. What resource is it the pthread_mutexes are guarding?
2. Why does accessing the resource take so long that threads have to wait
so long?
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Maintainer cygwin AT cygwin DOT com
Red Hat
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://cygwin.com/pipermail/cygwin-developers/attachments/20151209/f4706f15/attachment.sig>
More information about the Cygwin-developers
mailing list