Brian Degenhardt <bmd@mp3.com>
Brian Denehy <B-Denehy@adfa.oz.au>
Bruce Murphy <pack-squid@rattus.net>
+ Carl Vuosalo <cvuosalo@cern.ch>
Carson Gaspar <carson@cs.columbia.edu>
Carson Gaspar <carson@lehman.com>
Carsten Grzemba <cgrzemba@opencsw.org>
const size_t pageSize = Ipc::Mem::PageSize();
stats.mem.shared = true;
+
+ // In SMP mode, only the first worker reports shared memory stats to avoid
+ // adding up same-cache positive stats (reported by multiple worker
+ // processes) when Coordinator aggregates worker-reported stats.
+ // See also: Store::Disk::doReportStat().
+ if (UsingSmp() && KidIdentifier != 1)
+ return;
+
stats.mem.capacity =
Ipc::Mem::PageLimit(Ipc::Mem::PageId::cachePage) * pageSize;
stats.mem.size =
// Assume that either all workers use shared memory cache or none do.
// It is possible but difficult to report correct stats for an arbitrary
// mix, and only rather unusual deployments can benefit from mixing.
-
- // If workers share memory, we will get shared stats from those workers
- // and non-shared stats from other processes. Ignore order and also
- // ignore other processes stats because they are zero in most setups.
- if (stats.mem.shared) { // workers share memory
- // use the latest reported stats, they all should be about the same
- mem.shared = true;
- mem.size = stats.mem.size;
- mem.capacity = stats.mem.capacity;
- mem.count = stats.mem.count;
- } else if (!mem.shared) { // do not corrupt shared stats, if any
- // workers do not share so we must add everything up
- mem.size += stats.mem.size;
- mem.capacity += stats.mem.capacity;
- mem.count += stats.mem.count;
- }
+ mem.shared = mem.shared || stats.mem.shared; // TODO: Remove mem.shared as effectively unused?
+ mem.size += stats.mem.size;
+ mem.capacity += stats.mem.capacity;
+ mem.count += stats.mem.count;
store_entry_count += stats.store_entry_count;
mem_object_count += stats.mem_object_count;
#include "StatCounters.h"
#include "StatHist.h"
#include "Store.h"
+#include "store/Controller.h"
+#include "StoreStats.h"
#include "tools.h"
#include "util.h"
SMI_GAUGE32);
break;
- case PERF_SYS_NUMOBJCNT:
+ case PERF_SYS_NUMOBJCNT: {
+ StoreInfoStats stats;
+ Store::Root().getStats(stats);
Answer = snmp_var_new_integer(Var->name, Var->name_length,
- (snint) StoreEntry::inUseCount(),
+ (snint) (stats.mem.count + stats.swap.count),
SMI_GAUGE32);
break;
+ }
default:
*ErrP = SNMP_ERR_NOSUCHNAME;