diff options
| -rw-r--r-- | drivers/base/node.c | 14 | ||||
| -rw-r--r-- | include/linux/vmstat.h | 4 | ||||
| -rw-r--r-- | mm/vmstat.c | 261 | 
3 files changed, 144 insertions, 135 deletions
diff --git a/drivers/base/node.c b/drivers/base/node.c index b3b72d64e805..793f796c4da3 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -7,6 +7,7 @@  #include <linux/init.h>  #include <linux/mm.h>  #include <linux/memory.h> +#include <linux/vmstat.h>  #include <linux/node.h>  #include <linux/hugetlb.h>  #include <linux/compaction.h> @@ -179,11 +180,14 @@ static ssize_t node_read_vmstat(struct sys_device *dev,  				struct sysdev_attribute *attr, char *buf)  {  	int nid = dev->id; -	return sprintf(buf, -		"nr_written %lu\n" -		"nr_dirtied %lu\n", -		node_page_state(nid, NR_WRITTEN), -		node_page_state(nid, NR_DIRTIED)); +	int i; +	int n = 0; + +	for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++) +		n += sprintf(buf+n, "%s %lu\n", vmstat_text[i], +			     node_page_state(nid, i)); + +	return n;  }  static SYSDEV_ATTR(vmstat, S_IRUGO, node_read_vmstat, NULL); diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h index 2b3831b58aa4..e73d1030f2f7 100644 --- a/include/linux/vmstat.h +++ b/include/linux/vmstat.h @@ -313,6 +313,8 @@ static inline void __dec_zone_page_state(struct page *page,  #define set_pgdat_percpu_threshold(pgdat, callback) { }  static inline void refresh_cpu_vm_stats(int cpu) { } -#endif +#endif		/* CONFIG_SMP */ + +extern const char * const vmstat_text[];  #endif /* _LINUX_VMSTAT_H */ diff --git a/mm/vmstat.c b/mm/vmstat.c index 897ea9e88238..209546a8bdd5 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -659,6 +659,138 @@ static void walk_zones_in_node(struct seq_file *m, pg_data_t *pgdat,  }  #endif +#if defined(CONFIG_PROC_FS) || defined(CONFIG_SYSFS) +#ifdef CONFIG_ZONE_DMA +#define TEXT_FOR_DMA(xx) xx "_dma", +#else +#define TEXT_FOR_DMA(xx) +#endif + +#ifdef CONFIG_ZONE_DMA32 +#define TEXT_FOR_DMA32(xx) xx "_dma32", +#else +#define TEXT_FOR_DMA32(xx) +#endif + +#ifdef CONFIG_HIGHMEM +#define TEXT_FOR_HIGHMEM(xx) xx "_high", +#else +#define TEXT_FOR_HIGHMEM(xx) +#endif + +#define TEXTS_FOR_ZONES(xx) TEXT_FOR_DMA(xx) TEXT_FOR_DMA32(xx) xx "_normal", \ +					TEXT_FOR_HIGHMEM(xx) xx "_movable", + +const char * const vmstat_text[] = { +	/* Zoned VM counters */ +	"nr_free_pages", +	"nr_inactive_anon", +	"nr_active_anon", +	"nr_inactive_file", +	"nr_active_file", +	"nr_unevictable", +	"nr_mlock", +	"nr_anon_pages", +	"nr_mapped", +	"nr_file_pages", +	"nr_dirty", +	"nr_writeback", +	"nr_slab_reclaimable", +	"nr_slab_unreclaimable", +	"nr_page_table_pages", +	"nr_kernel_stack", +	"nr_unstable", +	"nr_bounce", +	"nr_vmscan_write", +	"nr_writeback_temp", +	"nr_isolated_anon", +	"nr_isolated_file", +	"nr_shmem", +	"nr_dirtied", +	"nr_written", + +#ifdef CONFIG_NUMA +	"numa_hit", +	"numa_miss", +	"numa_foreign", +	"numa_interleave", +	"numa_local", +	"numa_other", +#endif +	"nr_anon_transparent_hugepages", +	"nr_dirty_threshold", +	"nr_dirty_background_threshold", + +#ifdef CONFIG_VM_EVENT_COUNTERS +	"pgpgin", +	"pgpgout", +	"pswpin", +	"pswpout", + +	TEXTS_FOR_ZONES("pgalloc") + +	"pgfree", +	"pgactivate", +	"pgdeactivate", + +	"pgfault", +	"pgmajfault", + +	TEXTS_FOR_ZONES("pgrefill") +	TEXTS_FOR_ZONES("pgsteal") +	TEXTS_FOR_ZONES("pgscan_kswapd") +	TEXTS_FOR_ZONES("pgscan_direct") + +#ifdef CONFIG_NUMA +	"zone_reclaim_failed", +#endif +	"pginodesteal", +	"slabs_scanned", +	"kswapd_steal", +	"kswapd_inodesteal", +	"kswapd_low_wmark_hit_quickly", +	"kswapd_high_wmark_hit_quickly", +	"kswapd_skip_congestion_wait", +	"pageoutrun", +	"allocstall", + +	"pgrotated", + +#ifdef CONFIG_COMPACTION +	"compact_blocks_moved", +	"compact_pages_moved", +	"compact_pagemigrate_failed", +	"compact_stall", +	"compact_fail", +	"compact_success", +#endif + +#ifdef CONFIG_HUGETLB_PAGE +	"htlb_buddy_alloc_success", +	"htlb_buddy_alloc_fail", +#endif +	"unevictable_pgs_culled", +	"unevictable_pgs_scanned", +	"unevictable_pgs_rescued", +	"unevictable_pgs_mlocked", +	"unevictable_pgs_munlocked", +	"unevictable_pgs_cleared", +	"unevictable_pgs_stranded", +	"unevictable_pgs_mlockfreed", + +#ifdef CONFIG_TRANSPARENT_HUGEPAGE +	"thp_fault_alloc", +	"thp_fault_fallback", +	"thp_collapse_alloc", +	"thp_collapse_alloc_failed", +	"thp_split", +#endif + +#endif /* CONFIG_VM_EVENTS_COUNTERS */ +}; +#endif /* CONFIG_PROC_FS || CONFIG_SYSFS */ + +  #ifdef CONFIG_PROC_FS  static void frag_show_print(struct seq_file *m, pg_data_t *pgdat,  						struct zone *zone) @@ -831,135 +963,6 @@ static const struct file_operations pagetypeinfo_file_ops = {  	.release	= seq_release,  }; -#ifdef CONFIG_ZONE_DMA -#define TEXT_FOR_DMA(xx) xx "_dma", -#else -#define TEXT_FOR_DMA(xx) -#endif - -#ifdef CONFIG_ZONE_DMA32 -#define TEXT_FOR_DMA32(xx) xx "_dma32", -#else -#define TEXT_FOR_DMA32(xx) -#endif - -#ifdef CONFIG_HIGHMEM -#define TEXT_FOR_HIGHMEM(xx) xx "_high", -#else -#define TEXT_FOR_HIGHMEM(xx) -#endif - -#define TEXTS_FOR_ZONES(xx) TEXT_FOR_DMA(xx) TEXT_FOR_DMA32(xx) xx "_normal", \ -					TEXT_FOR_HIGHMEM(xx) xx "_movable", - -static const char * const vmstat_text[] = { -	/* Zoned VM counters */ -	"nr_free_pages", -	"nr_inactive_anon", -	"nr_active_anon", -	"nr_inactive_file", -	"nr_active_file", -	"nr_unevictable", -	"nr_mlock", -	"nr_anon_pages", -	"nr_mapped", -	"nr_file_pages", -	"nr_dirty", -	"nr_writeback", -	"nr_slab_reclaimable", -	"nr_slab_unreclaimable", -	"nr_page_table_pages", -	"nr_kernel_stack", -	"nr_unstable", -	"nr_bounce", -	"nr_vmscan_write", -	"nr_writeback_temp", -	"nr_isolated_anon", -	"nr_isolated_file", -	"nr_shmem", -	"nr_dirtied", -	"nr_written", - -#ifdef CONFIG_NUMA -	"numa_hit", -	"numa_miss", -	"numa_foreign", -	"numa_interleave", -	"numa_local", -	"numa_other", -#endif -	"nr_anon_transparent_hugepages", -	"nr_dirty_threshold", -	"nr_dirty_background_threshold", - -#ifdef CONFIG_VM_EVENT_COUNTERS -	"pgpgin", -	"pgpgout", -	"pswpin", -	"pswpout", - -	TEXTS_FOR_ZONES("pgalloc") - -	"pgfree", -	"pgactivate", -	"pgdeactivate", - -	"pgfault", -	"pgmajfault", - -	TEXTS_FOR_ZONES("pgrefill") -	TEXTS_FOR_ZONES("pgsteal") -	TEXTS_FOR_ZONES("pgscan_kswapd") -	TEXTS_FOR_ZONES("pgscan_direct") - -#ifdef CONFIG_NUMA -	"zone_reclaim_failed", -#endif -	"pginodesteal", -	"slabs_scanned", -	"kswapd_steal", -	"kswapd_inodesteal", -	"kswapd_low_wmark_hit_quickly", -	"kswapd_high_wmark_hit_quickly", -	"kswapd_skip_congestion_wait", -	"pageoutrun", -	"allocstall", - -	"pgrotated", - -#ifdef CONFIG_COMPACTION -	"compact_blocks_moved", -	"compact_pages_moved", -	"compact_pagemigrate_failed", -	"compact_stall", -	"compact_fail", -	"compact_success", -#endif - -#ifdef CONFIG_HUGETLB_PAGE -	"htlb_buddy_alloc_success", -	"htlb_buddy_alloc_fail", -#endif -	"unevictable_pgs_culled", -	"unevictable_pgs_scanned", -	"unevictable_pgs_rescued", -	"unevictable_pgs_mlocked", -	"unevictable_pgs_munlocked", -	"unevictable_pgs_cleared", -	"unevictable_pgs_stranded", -	"unevictable_pgs_mlockfreed", - -#ifdef CONFIG_TRANSPARENT_HUGEPAGE -	"thp_fault_alloc", -	"thp_fault_fallback", -	"thp_collapse_alloc", -	"thp_collapse_alloc_failed", -	"thp_split", -#endif - -#endif /* CONFIG_VM_EVENTS_COUNTERS */ -}; -  static void zoneinfo_show_print(struct seq_file *m, pg_data_t *pgdat,  							struct zone *zone)  {  | 
