rx: Use atomics for rxi_AllocSize and rxi_AllocCnt
authorSimon Wilkinson <sxw@your-file-system.com>
Tue, 28 Sep 2010 23:15:37 +0000 (00:15 +0100)
committerJeffrey Altman <jaltman@openafs.org>
Thu, 30 Sep 2010 13:09:47 +0000 (06:09 -0700)
More atomics for RX statistics counters. Less lock contention.

Change-Id: I55202d2d54323448f7bc191aab03ace976fac962
Reviewed-on: http://gerrit.openafs.org/2861
Reviewed-by: Jeffrey Altman <jaltman@openafs.org>
Tested-by: Jeffrey Altman <jaltman@openafs.org>

src/rx/rx.c

index 66f88d9..68ca46d 100644 (file)
@@ -2436,14 +2436,18 @@ rxi_FreeCall(struct rx_call *call)
     }
 }
 
-afs_int32 rxi_Alloccnt = 0, rxi_Allocsize = 0;
+rx_atomic_t rxi_Allocsize = RX_ATOMIC_INIT(0);
+rx_atomic_t rxi_Alloccnt = RX_ATOMIC_INIT(0);
+
 void *
 rxi_Alloc(size_t size)
 {
     char *p;
 
-    if (rx_stats_active)
-        rx_MutexAdd1Increment2(rxi_Allocsize, (afs_int32)size, rxi_Alloccnt, rx_stats_mutex);
+    if (rx_stats_active) {
+       rx_atomic_add(&rxi_Allocsize, (int) size);
+       rx_atomic_inc(&rxi_Alloccnt);
+    }
 
 p = (char *)
 #if defined(KERNEL) && !defined(UKERNEL) && defined(AFS_FBSD80_ENV)
@@ -2460,8 +2464,10 @@ p = (char *)
 void
 rxi_Free(void *addr, size_t size)
 {
-    if (rx_stats_active)
-        rx_MutexAdd1Decrement2(rxi_Allocsize, -(afs_int32)size, rxi_Alloccnt, rx_stats_mutex);
+    if (rx_stats_active) {
+       rx_atomic_sub(&rxi_Allocsize, (int) size);
+        rx_atomic_dec(&rxi_Alloccnt);
+    }
     osi_Free(addr, size);
 }