From: VMware, Inc <> Date: Mon, 26 Jul 2010 18:09:20 +0000 (-0700) Subject: lib/lock: improved MXUser acquisition statistics X-Git-Tag: 2010.07.25-280253~102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=772ff235b6563cc258dc61e846f77047ba877186;p=thirdparty%2Fopen-vm-tools.git lib/lock: improved MXUser acquisition statistics We can now see the data from try operations (including timed ones) and semaphores. Signed-off-by: Marcelo Vanzin --- diff --git a/open-vm-tools/lib/lock/ulExcl.c b/open-vm-tools/lib/lock/ulExcl.c index edf8eeb54..6cc68ae3b 100644 --- a/open-vm-tools/lib/lock/ulExcl.c +++ b/open-vm-tools/lib/lock/ulExcl.c @@ -405,11 +405,11 @@ MXUser_TryAcquireExclLock(MXUserExclLock *lock) // IN/OUT: "%s: Acquire on an acquired exclusive lock\n", __FUNCTION__); } + } #if defined(MXUSER_STATS) - MXUserAcquisitionSample(&lock->acquisitionStats, success, FALSE, 0ULL); + MXUserAcquisitionSample(&lock->acquisitionStats, success, !success, 0ULL); #endif - } return success; } diff --git a/open-vm-tools/lib/lock/ulInt.h b/open-vm-tools/lib/lock/ulInt.h index d7a10cd97..083d8e201 100644 --- a/open-vm-tools/lib/lock/ulInt.h +++ b/open-vm-tools/lib/lock/ulInt.h @@ -487,10 +487,11 @@ typedef struct { } MXUserBasicStats; typedef struct { - uint64 numContended; // Number of contended acquires - uint64 timeContended; // Time spent contended on acquires - uint64 numUncontended; // Number of uncontended acquires - uint64 timeUncontended; // Time spent uncontended on acquires + uint64 numAttempts; + uint64 numSuccesses; + uint64 numSuccessesContended; + uint64 successContentionTime; + uint64 totalContentionTime; MXUserBasicStats basicStats; } MXUserAcquisitionStats; diff --git a/open-vm-tools/lib/lock/ulRec.c b/open-vm-tools/lib/lock/ulRec.c index 71c68cfce..9f4406e92 100644 --- a/open-vm-tools/lib/lock/ulRec.c +++ b/open-vm-tools/lib/lock/ulRec.c @@ -431,15 +431,13 @@ MXUser_TryAcquireRecLock(MXUserRecLock *lock) // IN/OUT: success = MXRecLockTryAcquire(&lock->recursiveLock, GetReturnAddress()); if (success) { -#if defined(MXUSER_STATS) - if (MXRecLockCount(&lock->recursiveLock) == 1) { - MXUserAcquisitionSample(&lock->acquisitionStats, success, FALSE, - 0ULL); - } -#endif - MXUserAcquisitionTracking(&lock->header, FALSE); } + +#if defined(MXUSER_STATS) + MXUserAcquisitionSample(&lock->acquisitionStats, success, + !success, 0ULL); +#endif } return success; diff --git a/open-vm-tools/lib/lock/ulSema.c b/open-vm-tools/lib/lock/ulSema.c index edabc98a1..e063a7a15 100644 --- a/open-vm-tools/lib/lock/ulSema.c +++ b/open-vm-tools/lib/lock/ulSema.c @@ -770,6 +770,11 @@ MXUser_TryDownSemaphore(MXUserSemaphore *sema) // IN/OUT: __FUNCTION__, err); } +#if defined(MXUSER_STATS) + MXUserAcquisitionSample(&sema->acquisitionStats, downOccurred, + !downOccurred, 0ULL); +#endif + Atomic_Dec(&sema->activeUserCount); return downOccurred; @@ -782,7 +787,7 @@ MXUser_TryDownSemaphore(MXUserSemaphore *sema) // IN/OUT: * MXUser_UpSemaphore -- * * Perform an up (V; verhogen; "increase") operation on a semaphore. - * + * * Results: * The semaphore count is incremented. Any thread waiting on the * semaphore is awoken.