gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r3894 - GNUnet/src/util/os


From: grothoff
Subject: [GNUnet-SVN] r3894 - GNUnet/src/util/os
Date: Thu, 7 Dec 2006 01:15:39 -0800 (PST)

Author: grothoff
Date: 2006-12-07 01:15:38 -0800 (Thu, 07 Dec 2006)
New Revision: 3894

Modified:
   GNUnet/src/util/os/statuscalls.c
Log:
fixed major bug in calculation of network load

Modified: GNUnet/src/util/os/statuscalls.c
===================================================================
--- GNUnet/src/util/os/statuscalls.c    2006-12-07 09:01:53 UTC (rev 3893)
+++ GNUnet/src/util/os/statuscalls.c    2006-12-07 09:15:38 UTC (rev 3894)
@@ -378,6 +378,7 @@
   cron_t now;
   unsigned long long maxExpect;
   unsigned long long currentLoadSum;
+  unsigned long long currentTotal;
   int i;
   int ret;
   int weight;
@@ -397,21 +398,21 @@
     updateInterfaceTraffic(monitor);
   }
   if (dir == Upload) {
-    currentLoadSum = monitor->globalTrafficBetweenProc.last_out;
+    currentTotal = monitor->globalTrafficBetweenProc.last_out;
     for (i=0;i<monitor->ifcsSize;i++)
-      currentLoadSum += monitor->ifcs[i].last_out;
+      currentTotal += monitor->ifcs[i].last_out;
   } else {
-    currentLoadSum = monitor->globalTrafficBetweenProc.last_in;
+    currentTotal = monitor->globalTrafficBetweenProc.last_in;
     for (i=0;i<monitor->ifcsSize;i++)
-      currentLoadSum += monitor->ifcs[i].last_in;
+      currentTotal += monitor->ifcs[i].last_in;
   }
-  if ( (di->lastSum > currentLoadSum) ||
+  if ( (di->lastSum > currentTotal) ||
        (di->have_last == 0) ||
        (now < di->lastCall) ) {
     /* integer overflow or first datapoint; since we cannot tell where
        / by how much the overflow happened, all we can do is ignore
        this datapoint.  So we return -1 -- AND reset lastSum / lastCall. */
-    di->lastSum = currentLoadSum;
+    di->lastSum = currentTotal;
     di->lastCall = now;
     di->have_last = 1;
     MUTEX_UNLOCK(monitor->statusMutex);
@@ -430,20 +431,20 @@
     if (maxExpect == 0)
       ret = di->lastValue;
     else
-      ret = (di->lastValue * (100-weight) + weight * (currentLoadSum + 
di->overload - di->lastSum) / maxExpect) / 100;
+      ret = (di->lastValue * (100-weight) + weight * (currentTotal + 
di->overload - di->lastSum) / maxExpect) / 100;
     MUTEX_UNLOCK(monitor->statusMutex);
     return ret;
   }
-  currentLoadSum -= di->lastSum;
-  di->lastSum += currentLoadSum;
-  currentLoadSum += di->overload;
+  
+  currentLoadSum = currentTotal - di->lastSum + di->overload;
+  di->lastSum = currentTotal;
   di->lastCall = now;
   if (currentLoadSum < maxExpect)
     di->overload = 0;
   else
     di->overload = currentLoadSum - maxExpect;
-  di->lastValue = currentLoadSum * 100 / maxExpect;
-  ret = di->lastValue;
+  ret = currentLoadSum * 100 / maxExpect;
+  di->lastValue = ret;
   MUTEX_UNLOCK(monitor->statusMutex);
   return ret;
 }





reply via email to

[Prev in Thread] Current Thread [Next in Thread]