diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/proc/Makefile | 1 | ||||
-rw-r--r-- | fs/proc/meminfo.c | 168 | ||||
-rw-r--r-- | fs/proc/proc_misc.c | 137 |
3 files changed, 169 insertions, 137 deletions
diff --git a/fs/proc/Makefile b/fs/proc/Makefile index 27efa14963b1..70607a03839d 100644 --- a/fs/proc/Makefile +++ b/fs/proc/Makefile | |||
@@ -10,6 +10,7 @@ proc-$(CONFIG_MMU) := mmu.o task_mmu.o | |||
10 | proc-y += inode.o root.o base.o generic.o array.o \ | 10 | proc-y += inode.o root.o base.o generic.o array.o \ |
11 | proc_tty.o proc_misc.o | 11 | proc_tty.o proc_misc.o |
12 | proc-y += loadavg.o | 12 | proc-y += loadavg.o |
13 | proc-y += meminfo.o | ||
13 | proc-y += uptime.o | 14 | proc-y += uptime.o |
14 | proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o | 15 | proc-$(CONFIG_PROC_SYSCTL) += proc_sysctl.o |
15 | proc-$(CONFIG_NET) += proc_net.o | 16 | proc-$(CONFIG_NET) += proc_net.o |
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c new file mode 100644 index 000000000000..b1675c4e66da --- /dev/null +++ b/fs/proc/meminfo.c | |||
@@ -0,0 +1,168 @@ | |||
1 | #include <linux/fs.h> | ||
2 | #include <linux/hugetlb.h> | ||
3 | #include <linux/init.h> | ||
4 | #include <linux/kernel.h> | ||
5 | #include <linux/mm.h> | ||
6 | #include <linux/mman.h> | ||
7 | #include <linux/mmzone.h> | ||
8 | #include <linux/proc_fs.h> | ||
9 | #include <linux/quicklist.h> | ||
10 | #include <linux/seq_file.h> | ||
11 | #include <linux/swap.h> | ||
12 | #include <linux/vmstat.h> | ||
13 | #include <asm/atomic.h> | ||
14 | #include <asm/page.h> | ||
15 | #include <asm/pgtable.h> | ||
16 | #include "internal.h" | ||
17 | |||
18 | void __attribute__((weak)) arch_report_meminfo(struct seq_file *m) | ||
19 | { | ||
20 | } | ||
21 | |||
22 | static int meminfo_proc_show(struct seq_file *m, void *v) | ||
23 | { | ||
24 | struct sysinfo i; | ||
25 | unsigned long committed; | ||
26 | unsigned long allowed; | ||
27 | struct vmalloc_info vmi; | ||
28 | long cached; | ||
29 | unsigned long pages[NR_LRU_LISTS]; | ||
30 | int lru; | ||
31 | |||
32 | /* | ||
33 | * display in kilobytes. | ||
34 | */ | ||
35 | #define K(x) ((x) << (PAGE_SHIFT - 10)) | ||
36 | si_meminfo(&i); | ||
37 | si_swapinfo(&i); | ||
38 | committed = atomic_long_read(&vm_committed_space); | ||
39 | allowed = ((totalram_pages - hugetlb_total_pages()) | ||
40 | * sysctl_overcommit_ratio / 100) + total_swap_pages; | ||
41 | |||
42 | cached = global_page_state(NR_FILE_PAGES) - | ||
43 | total_swapcache_pages - i.bufferram; | ||
44 | if (cached < 0) | ||
45 | cached = 0; | ||
46 | |||
47 | get_vmalloc_info(&vmi); | ||
48 | |||
49 | for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++) | ||
50 | pages[lru] = global_page_state(NR_LRU_BASE + lru); | ||
51 | |||
52 | /* | ||
53 | * Tagged format, for easy grepping and expansion. | ||
54 | */ | ||
55 | seq_printf(m, | ||
56 | "MemTotal: %8lu kB\n" | ||
57 | "MemFree: %8lu kB\n" | ||
58 | "Buffers: %8lu kB\n" | ||
59 | "Cached: %8lu kB\n" | ||
60 | "SwapCached: %8lu kB\n" | ||
61 | "Active: %8lu kB\n" | ||
62 | "Inactive: %8lu kB\n" | ||
63 | "Active(anon): %8lu kB\n" | ||
64 | "Inactive(anon): %8lu kB\n" | ||
65 | "Active(file): %8lu kB\n" | ||
66 | "Inactive(file): %8lu kB\n" | ||
67 | #ifdef CONFIG_UNEVICTABLE_LRU | ||
68 | "Unevictable: %8lu kB\n" | ||
69 | "Mlocked: %8lu kB\n" | ||
70 | #endif | ||
71 | #ifdef CONFIG_HIGHMEM | ||
72 | "HighTotal: %8lu kB\n" | ||
73 | "HighFree: %8lu kB\n" | ||
74 | "LowTotal: %8lu kB\n" | ||
75 | "LowFree: %8lu kB\n" | ||
76 | #endif | ||
77 | "SwapTotal: %8lu kB\n" | ||
78 | "SwapFree: %8lu kB\n" | ||
79 | "Dirty: %8lu kB\n" | ||
80 | "Writeback: %8lu kB\n" | ||
81 | "AnonPages: %8lu kB\n" | ||
82 | "Mapped: %8lu kB\n" | ||
83 | "Slab: %8lu kB\n" | ||
84 | "SReclaimable: %8lu kB\n" | ||
85 | "SUnreclaim: %8lu kB\n" | ||
86 | "PageTables: %8lu kB\n" | ||
87 | #ifdef CONFIG_QUICKLIST | ||
88 | "Quicklists: %8lu kB\n" | ||
89 | #endif | ||
90 | "NFS_Unstable: %8lu kB\n" | ||
91 | "Bounce: %8lu kB\n" | ||
92 | "WritebackTmp: %8lu kB\n" | ||
93 | "CommitLimit: %8lu kB\n" | ||
94 | "Committed_AS: %8lu kB\n" | ||
95 | "VmallocTotal: %8lu kB\n" | ||
96 | "VmallocUsed: %8lu kB\n" | ||
97 | "VmallocChunk: %8lu kB\n", | ||
98 | K(i.totalram), | ||
99 | K(i.freeram), | ||
100 | K(i.bufferram), | ||
101 | K(cached), | ||
102 | K(total_swapcache_pages), | ||
103 | K(pages[LRU_ACTIVE_ANON] + pages[LRU_ACTIVE_FILE]), | ||
104 | K(pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE]), | ||
105 | K(pages[LRU_ACTIVE_ANON]), | ||
106 | K(pages[LRU_INACTIVE_ANON]), | ||
107 | K(pages[LRU_ACTIVE_FILE]), | ||
108 | K(pages[LRU_INACTIVE_FILE]), | ||
109 | #ifdef CONFIG_UNEVICTABLE_LRU | ||
110 | K(pages[LRU_UNEVICTABLE]), | ||
111 | K(global_page_state(NR_MLOCK)), | ||
112 | #endif | ||
113 | #ifdef CONFIG_HIGHMEM | ||
114 | K(i.totalhigh), | ||
115 | K(i.freehigh), | ||
116 | K(i.totalram-i.totalhigh), | ||
117 | K(i.freeram-i.freehigh), | ||
118 | #endif | ||
119 | K(i.totalswap), | ||
120 | K(i.freeswap), | ||
121 | K(global_page_state(NR_FILE_DIRTY)), | ||
122 | K(global_page_state(NR_WRITEBACK)), | ||
123 | K(global_page_state(NR_ANON_PAGES)), | ||
124 | K(global_page_state(NR_FILE_MAPPED)), | ||
125 | K(global_page_state(NR_SLAB_RECLAIMABLE) + | ||
126 | global_page_state(NR_SLAB_UNRECLAIMABLE)), | ||
127 | K(global_page_state(NR_SLAB_RECLAIMABLE)), | ||
128 | K(global_page_state(NR_SLAB_UNRECLAIMABLE)), | ||
129 | K(global_page_state(NR_PAGETABLE)), | ||
130 | #ifdef CONFIG_QUICKLIST | ||
131 | K(quicklist_total_size()), | ||
132 | #endif | ||
133 | K(global_page_state(NR_UNSTABLE_NFS)), | ||
134 | K(global_page_state(NR_BOUNCE)), | ||
135 | K(global_page_state(NR_WRITEBACK_TEMP)), | ||
136 | K(allowed), | ||
137 | K(committed), | ||
138 | (unsigned long)VMALLOC_TOTAL >> 10, | ||
139 | vmi.used >> 10, | ||
140 | vmi.largest_chunk >> 10 | ||
141 | ); | ||
142 | |||
143 | hugetlb_report_meminfo(m); | ||
144 | |||
145 | arch_report_meminfo(m); | ||
146 | |||
147 | return 0; | ||
148 | #undef K | ||
149 | } | ||
150 | |||
151 | static int meminfo_proc_open(struct inode *inode, struct file *file) | ||
152 | { | ||
153 | return single_open(file, meminfo_proc_show, NULL); | ||
154 | } | ||
155 | |||
156 | static const struct file_operations meminfo_proc_fops = { | ||
157 | .open = meminfo_proc_open, | ||
158 | .read = seq_read, | ||
159 | .llseek = seq_lseek, | ||
160 | .release = single_release, | ||
161 | }; | ||
162 | |||
163 | static int __init proc_meminfo_init(void) | ||
164 | { | ||
165 | proc_create("meminfo", 0, NULL, &meminfo_proc_fops); | ||
166 | return 0; | ||
167 | } | ||
168 | module_init(proc_meminfo_init); | ||
diff --git a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c index 484b6011bf0b..1aba51b0a0c4 100644 --- a/fs/proc/proc_misc.c +++ b/fs/proc/proc_misc.c | |||
@@ -78,142 +78,6 @@ static int proc_calc_metrics(char *page, char **start, off_t off, | |||
78 | return len; | 78 | return len; |
79 | } | 79 | } |
80 | 80 | ||
81 | int __attribute__((weak)) arch_report_meminfo(char *page) | ||
82 | { | ||
83 | return 0; | ||
84 | } | ||
85 | |||
86 | static int meminfo_read_proc(char *page, char **start, off_t off, | ||
87 | int count, int *eof, void *data) | ||
88 | { | ||
89 | struct sysinfo i; | ||
90 | int len; | ||
91 | unsigned long committed; | ||
92 | unsigned long allowed; | ||
93 | struct vmalloc_info vmi; | ||
94 | long cached; | ||
95 | unsigned long pages[NR_LRU_LISTS]; | ||
96 | int lru; | ||
97 | |||
98 | /* | ||
99 | * display in kilobytes. | ||
100 | */ | ||
101 | #define K(x) ((x) << (PAGE_SHIFT - 10)) | ||
102 | si_meminfo(&i); | ||
103 | si_swapinfo(&i); | ||
104 | committed = atomic_long_read(&vm_committed_space); | ||
105 | allowed = ((totalram_pages - hugetlb_total_pages()) | ||
106 | * sysctl_overcommit_ratio / 100) + total_swap_pages; | ||
107 | |||
108 | cached = global_page_state(NR_FILE_PAGES) - | ||
109 | total_swapcache_pages - i.bufferram; | ||
110 | if (cached < 0) | ||
111 | cached = 0; | ||
112 | |||
113 | get_vmalloc_info(&vmi); | ||
114 | |||
115 | for (lru = LRU_BASE; lru < NR_LRU_LISTS; lru++) | ||
116 | pages[lru] = global_page_state(NR_LRU_BASE + lru); | ||
117 | |||
118 | /* | ||
119 | * Tagged format, for easy grepping and expansion. | ||
120 | */ | ||
121 | len = sprintf(page, | ||
122 | "MemTotal: %8lu kB\n" | ||
123 | "MemFree: %8lu kB\n" | ||
124 | "Buffers: %8lu kB\n" | ||
125 | "Cached: %8lu kB\n" | ||
126 | "SwapCached: %8lu kB\n" | ||
127 | "Active: %8lu kB\n" | ||
128 | "Inactive: %8lu kB\n" | ||
129 | "Active(anon): %8lu kB\n" | ||
130 | "Inactive(anon): %8lu kB\n" | ||
131 | "Active(file): %8lu kB\n" | ||
132 | "Inactive(file): %8lu kB\n" | ||
133 | #ifdef CONFIG_UNEVICTABLE_LRU | ||
134 | "Unevictable: %8lu kB\n" | ||
135 | "Mlocked: %8lu kB\n" | ||
136 | #endif | ||
137 | #ifdef CONFIG_HIGHMEM | ||
138 | "HighTotal: %8lu kB\n" | ||
139 | "HighFree: %8lu kB\n" | ||
140 | "LowTotal: %8lu kB\n" | ||
141 | "LowFree: %8lu kB\n" | ||
142 | #endif | ||
143 | "SwapTotal: %8lu kB\n" | ||
144 | "SwapFree: %8lu kB\n" | ||
145 | "Dirty: %8lu kB\n" | ||
146 | "Writeback: %8lu kB\n" | ||
147 | "AnonPages: %8lu kB\n" | ||
148 | "Mapped: %8lu kB\n" | ||
149 | "Slab: %8lu kB\n" | ||
150 | "SReclaimable: %8lu kB\n" | ||
151 | "SUnreclaim: %8lu kB\n" | ||
152 | "PageTables: %8lu kB\n" | ||
153 | #ifdef CONFIG_QUICKLIST | ||
154 | "Quicklists: %8lu kB\n" | ||
155 | #endif | ||
156 | "NFS_Unstable: %8lu kB\n" | ||
157 | "Bounce: %8lu kB\n" | ||
158 | "WritebackTmp: %8lu kB\n" | ||
159 | "CommitLimit: %8lu kB\n" | ||
160 | "Committed_AS: %8lu kB\n" | ||
161 | "VmallocTotal: %8lu kB\n" | ||
162 | "VmallocUsed: %8lu kB\n" | ||
163 | "VmallocChunk: %8lu kB\n", | ||
164 | K(i.totalram), | ||
165 | K(i.freeram), | ||
166 | K(i.bufferram), | ||
167 | K(cached), | ||
168 | K(total_swapcache_pages), | ||
169 | K(pages[LRU_ACTIVE_ANON] + pages[LRU_ACTIVE_FILE]), | ||
170 | K(pages[LRU_INACTIVE_ANON] + pages[LRU_INACTIVE_FILE]), | ||
171 | K(pages[LRU_ACTIVE_ANON]), | ||
172 | K(pages[LRU_INACTIVE_ANON]), | ||
173 | K(pages[LRU_ACTIVE_FILE]), | ||
174 | K(pages[LRU_INACTIVE_FILE]), | ||
175 | #ifdef CONFIG_UNEVICTABLE_LRU | ||
176 | K(pages[LRU_UNEVICTABLE]), | ||
177 | K(global_page_state(NR_MLOCK)), | ||
178 | #endif | ||
179 | #ifdef CONFIG_HIGHMEM | ||
180 | K(i.totalhigh), | ||
181 | K(i.freehigh), | ||
182 | K(i.totalram-i.totalhigh), | ||
183 | K(i.freeram-i.freehigh), | ||
184 | #endif | ||
185 | K(i.totalswap), | ||
186 | K(i.freeswap), | ||
187 | K(global_page_state(NR_FILE_DIRTY)), | ||
188 | K(global_page_state(NR_WRITEBACK)), | ||
189 | K(global_page_state(NR_ANON_PAGES)), | ||
190 | K(global_page_state(NR_FILE_MAPPED)), | ||
191 | K(global_page_state(NR_SLAB_RECLAIMABLE) + | ||
192 | global_page_state(NR_SLAB_UNRECLAIMABLE)), | ||
193 | K(global_page_state(NR_SLAB_RECLAIMABLE)), | ||
194 | K(global_page_state(NR_SLAB_UNRECLAIMABLE)), | ||
195 | K(global_page_state(NR_PAGETABLE)), | ||
196 | #ifdef CONFIG_QUICKLIST | ||
197 | K(quicklist_total_size()), | ||
198 | #endif | ||
199 | K(global_page_state(NR_UNSTABLE_NFS)), | ||
200 | K(global_page_state(NR_BOUNCE)), | ||
201 | K(global_page_state(NR_WRITEBACK_TEMP)), | ||
202 | K(allowed), | ||
203 | K(committed), | ||
204 | (unsigned long)VMALLOC_TOTAL >> 10, | ||
205 | vmi.used >> 10, | ||
206 | vmi.largest_chunk >> 10 | ||
207 | ); | ||
208 | |||
209 | len += hugetlb_report_meminfo(page + len); | ||
210 | |||
211 | len += arch_report_meminfo(page + len); | ||
212 | |||
213 | return proc_calc_metrics(page, start, off, count, eof, len); | ||
214 | #undef K | ||
215 | } | ||
216 | |||
217 | static int fragmentation_open(struct inode *inode, struct file *file) | 81 | static int fragmentation_open(struct inode *inode, struct file *file) |
218 | { | 82 | { |
219 | (void)inode; | 83 | (void)inode; |
@@ -816,7 +680,6 @@ void __init proc_misc_init(void) | |||
816 | char *name; | 680 | char *name; |
817 | int (*read_proc)(char*,char**,off_t,int,int*,void*); | 681 | int (*read_proc)(char*,char**,off_t,int,int*,void*); |
818 | } *p, simple_ones[] = { | 682 | } *p, simple_ones[] = { |
819 | {"meminfo", meminfo_read_proc}, | ||
820 | {"version", version_read_proc}, | 683 | {"version", version_read_proc}, |
821 | #ifdef CONFIG_PROC_HARDWARE | 684 | #ifdef CONFIG_PROC_HARDWARE |
822 | {"hardware", hardware_read_proc}, | 685 | {"hardware", hardware_read_proc}, |