xfs
[Top] [All Lists]

Re: 2.4.20pre5aa2

To: Andrea Arcangeli <andrea@xxxxxxx>
Subject: Re: 2.4.20pre5aa2
From: Dave Hansen <haveblue@xxxxxxxxxx>
Date: Mon, 16 Sep 2002 09:03:41 -0700
Cc: Samuel Flory <sflory@xxxxxxxxxxxx>, Stephen Lord <lord@xxxxxxx>, Austin Gonyou <austin@xxxxxxxxxxxxxxx>, Christian Guggenberger <christian.guggenberger@xxxxxxxxxxxxxxxxxxxxxxxx>, Linux Kernel <linux-kernel@xxxxxxxxxxxxxxx>, linux-xfs@xxxxxxxxxxx
References: <20020911201602.A13655@pc9391.uni-regensburg.de> <1031768655.24629.23.camel@UberGeek.coremetrics.com> <20020911184111.GY17868@dualathlon.random> <3D81235B.6080809@rackable.com> <20020913002316.GG11605@dualathlon.random> <1031878070.1236.29.camel@snafu> <20020913005440.GJ11605@dualathlon.random> <3D8149F6.9060702@rackable.com> <20020913125345.GO11605@dualathlon.random>
Sender: linux-xfs-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (compatible; MSIE5.5; Windows 98;
Andrea Arcangeli wrote:
> On Thu, Sep 12, 2002 at 07:14:14PM -0700, Samuel Flory wrote:
>
>>Andrea Arcangeli wrote:
>>
>>>On Thu, Sep 12, 2002 at 07:47:48PM -0500, Stephen Lord wrote:
>>>
>>>>How much memory is in the machine by the way? And Andrea, is the
>>>>vmalloc space size reduced in the 3G user space configuration?
>>>
>>>it's not reduced, it's the usual 128m.
>>>
>>>BTW, I forgot to say that to really take advantage of CONFIG_2G one
>>>should increase __VMALLOC_RESERVE too, it's not directly in function of
>>>the CONFIG_2G.
>>>
>>
>>So how much do you recommend increasing it?   Currently it's:
>>include/asm-i386/page.h:#define __VMALLOC_RESERVE       (128 << 20)
>>include/asm/page.h:#define __VMALLOC_RESERVE    (128 << 20)
>
>
> you can try to compile with CONFIG_3G and to set __VMALLOC_RESERVE to
> (512 << 20) and see if it helps. If it only happens a bit later then
> it's most probably an address space leak, should be easy to track down
> some debugging instrumentation.

I just produced this little patch for 2.5.  It should provide a bit of the extra
information that you were looking for.  It adds some entries to /proc/meminfo
that look like this:

VMalTotal:      92123 kB
VmalUsed:        1264 kB
VMalChunk:      80315 kB

Total available, total used, and largest chunk available.

It is simple enough that a backport shouldn't be any problem at all.  Anybody
interested?

--
Dave Hansen
haveblue@xxxxxxxxxx
diff -ur linux-2.5.34-mm4/fs/proc/proc_misc.c 
linux-2.5.34-mm4-vmalloc-stats/fs/proc/proc_misc.c
--- linux-2.5.34-mm4/fs/proc/proc_misc.c        Sat Sep 14 21:23:54 2002
+++ linux-2.5.34-mm4-vmalloc-stats/fs/proc/proc_misc.c  Sat Sep 14 22:38:12 2002
@@ -38,6 +38,7 @@
 #include <linux/smp_lock.h>
 #include <linux/seq_file.h>
 #include <linux/times.h>
+#include <linux/vmalloc.h>
 
 #include <asm/uaccess.h>
 #include <asm/pgtable.h>
@@ -128,6 +129,40 @@
        return proc_calc_metrics(page, start, off, count, eof, len);
 }
 
+struct vmalloc_info {
+       unsigned long used;
+       unsigned long largest_chunk;
+};
+
+static struct vmalloc_info get_vmalloc_info(void)
+{
+       unsigned long prev_end = VMALLOC_START;
+       struct vm_struct* vma;
+       struct vmalloc_info vmi;
+       vmi.used = 0;
+
+       read_lock(&vmlist_lock);
+       
+       if(!vmlist) 
+               vmi.largest_chunk = (VMALLOC_END-VMALLOC_START);
+       else 
+               vmi.largest_chunk = 0;
+       
+       for (vma = vmlist; vma; vma = vma->next) {
+               unsigned long free_area_size = 
+                       (unsigned long)vma->addr - prev_end;
+               vmi.used += vma->size;
+               if (vmi.largest_chunk < free_area_size ) 
+                       vmi.largest_chunk = free_area_size;
+               prev_end = vma->size + (unsigned long)vma->addr;
+       }
+       if(VMALLOC_END-prev_end > vmi.largest_chunk)
+               vmi.largest_chunk = VMALLOC_END-prev_end;
+       
+       read_unlock(&vmlist_lock);
+       return vmi;
+}
+
 extern atomic_t vm_committed_space;
 
 static int meminfo_read_proc(char *page, char **start, off_t off,
@@ -138,6 +173,8 @@
        struct page_state ps;
        unsigned long inactive;
        unsigned long active;
+       unsigned long vmtot;
+       struct vmalloc_info vmi;
 
        get_page_state(&ps);
        get_zone_counts(&active, &inactive);
@@ -150,6 +187,11 @@
        si_swapinfo(&i);
        committed = atomic_read(&vm_committed_space);
 
+       vmtot = (VMALLOC_END-VMALLOC_START)>>10;
+       vmi = get_vmalloc_info();
+       vmi.used >>= 10;
+       vmi.largest_chunk >>= 10;
+
        /*
         * Tagged format, for easy grepping and expansion.
         */
@@ -174,7 +216,10 @@
                "Slab:         %8lu kB\n"
                "Committed_AS: %8u kB\n"
                "PageTables:   %8lu kB\n"
-               "ReverseMaps:  %8lu\n",
+               "ReverseMaps:  %8lu\n"
+               "VmalTotal:    %8lu kB\n"
+               "VmalUsed:     %8lu kB\n"
+               "VmalChunk:    %8lu kB\n",
                K(i.totalram),
                K(i.freeram),
                K(i.sharedram),
@@ -195,7 +240,10 @@
                K(ps.nr_slab),
                K(committed),
                K(ps.nr_page_table_pages),
-               ps.nr_reverse_maps
+               ps.nr_reverse_maps,
+               vmtot,
+               vmi.used,
+               vmi.largest_chunk
                );
 
 #ifdef CONFIG_HUGETLB_PAGE

Attachment: pgp3XT5IE0cvC.pgp
Description: PGP signature

<Prev in Thread] Current Thread [Next in Thread>