In a 4 socket 64 CPU system, zone_nr_free_pages() takes about 5% ~ 10% cpu time according to perf when memory pressure is high. The workload does something like: for i in `seq 1 $nr_cpu` do create_sparse_file $SPARSE_FILE-$i $((10 * mem / nr_cpu)) $USEMEM -f $SPARSE_FILE-$i -j 4096 --readonly $((10 * mem / nr_cpu)) & done this simply reads a sparse file for each CPU. Apparently the zone->percpu_drift_mark is too big, and guess zone_page_state_snapshot() makes a lot of cache bounce for ->vm_stat_diff[]. below is the zoneinfo for reference. Is there any way to reduce the overhead? Node 3, zone Normal pages free 2055926 min 1441 low 1801 high 2161 scanned 0 spanned 2097152 present 2068480 vm stats threshold: 98 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>