The attached patch-in-progress removes the per-cpu statistics from struct kernel_stat and puts them in a cpu_stat structure, one per cpu, cacheline padded. The data is still coolated and presented through /proc/stat, but another file /proc/cpustat is also added. The locking is as nonexistant as it was with kernel_stat, but who cares, they're just fuzzy stats to be eyeballed by system tuners :). A tool for printing the cpu stats specifically can be found near: http://www.osdlab.org/sw_resources/cpustat/index.shtml Its output is almost identical to solaris' mpstat. I'm not sure I like the macro use, but it shields the callers from the union garbage. We can easily also make a THIS_CPU_STAT_ADD() interface, as some have hinted would be nice :) Currently its mostly ( :) ) only collecting the stats that were collected in kernel_stat. I'd like to add more stats -- page faults, syscalls, cross-cpu calls, etc. I understand people not wanting more live cachelines in the fast paths. I can make CPU_CRITICAL_STAT defines that are config-ed out.. comments? If its ok I can whip up a patch that updates all the ports use of ->irqs[] as well. - z [ heading out for lunch :) ]