linux/fs/proc/meminfo.c
<<
>>
Prefs
   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
  18void __attribute__((weak)) arch_report_meminfo(struct seq_file *m)
  19{
  20}
  21
  22static 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
 151static int meminfo_proc_open(struct inode *inode, struct file *file)
 152{
 153        return single_open(file, meminfo_proc_show, NULL);
 154}
 155
 156static 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
 163static int __init proc_meminfo_init(void)
 164{
 165        proc_create("meminfo", 0, NULL, &meminfo_proc_fops);
 166        return 0;
 167}
 168module_init(proc_meminfo_init);
 169
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.