[Codefragments-commits] manish commits r3 - trunk/pagecache-info

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Tue Apr 13 17:48:59 CDT 2004


Author: manish
Date: 2004-04-13 16:48:57 -0500 (Tue, 13 Apr 2004)
New Revision: 3

Modified:
   trunk/pagecache-info/pagecache-info
Log:
Add lowmem page count


Modified: trunk/pagecache-info/pagecache-info
===================================================================
--- trunk/pagecache-info/pagecache-info	2004-04-02 02:08:52 UTC (rev 2)
+++ trunk/pagecache-info/pagecache-info	2004-04-13 21:48:57 UTC (rev 3)
@@ -28,11 +28,13 @@
 import os
 import struct
 
-version = '0.1.0'
+version = '0.1.5'
 
 default_file_min = 1000
 
-syms = ('page_hash_table', 'page_hash_bits', 'page_cache_size', 'swapper_space')
+required_syms = ('page_hash_table', 'page_hash_bits', 'page_cache_size',
+                 'swapper_space')
+optional_syms = ('highmem_start_page',)
 
 def check_kernel_version():
     if sys.platform[:5] != 'linux':
@@ -58,13 +60,13 @@
         sys.exit(1)
 
 def init_sym_re():
-    pattern = ' (?:%s)$' % string.join(syms, '|')
+    pattern = ' (?:%s)$' % string.join(required_syms + optional_syms, '|')
 
     global sym_re
     sym_re = re.compile(pattern)
 
 def check_symbols(symbols):
-    for s in syms:
+    for s in required_syms:
         if not symbols.has_key(s):
             return None
 
@@ -160,6 +162,7 @@
 
 class MemReader:
     page_fmt = '4x4xI4xI'
+
     mapping_fmt = '4x4x4x4x4x4x4x4xI'
     inode_fmt = '4x4x4x4xI'
     alias_fmt = 'IIIIIIIIIIII'
@@ -168,8 +171,9 @@
     table_start = 0
     table_step = 4
 
-    def __init__(self, kmem):
+    def __init__(self, kmem, highmem_start=None):
         self.kmem = kmem
+        self.highmem_start = highmem_start
 
     def read_page_hash(self, page_hash_table, page_hash_size):
         size = page_hash_size * self.table_step
@@ -194,8 +198,14 @@
 
     def read_page(self, addr):
         mapping, next_page = self.read_fmt(addr, self.page_fmt)
-        return mapping, next_page
 
+        if self.highmem_start:
+            lowpage = addr < self.highmem_start
+        else:
+            lowpage = 1
+
+        return mapping, next_page, lowpage
+
     def read_mapping(self, addr):
         inode = self.read_fmt(addr, self.mapping_fmt)[0]
         return inode
@@ -240,14 +250,21 @@
 
         self.noinode_pages = []
 
+        self.lowmem_pages = []
+
 def walk_pages(memreader, info, addr):
     name = None
 
-    mapping, next_addr = memreader.read_page(addr)
+    mapping, next_addr, lowpage = memreader.read_page(addr)
 
+    if lowpage:
+        info.lowmem_pages.append(addr)
+
     if mapping == info.swapper_space:
         inode = None
         info.swap_pages.append(addr)
+    elif mapping == 0:
+        inode = 0
     else:
         inode = memreader.read_mapping(mapping)
 
@@ -296,8 +313,13 @@
     try:
         kmem = open('/dev/kmem')
 
-        memreader = reader_class(kmem)
+        try:
+            highmem_start = read_pointer(kmem, symbols['highmem_start_page'])
+        except KeyError:
+            highmem_start = None
 
+        memreader = reader_class(kmem, highmem_start)
+
         page_hash_table = read_pointer(kmem, symbols['page_hash_table'])
         page_hash_bits = read_uint(kmem, symbols['page_hash_bits'])
         page_hash_size = (1L << page_hash_bits)
@@ -331,6 +353,7 @@
 pages w/o path   =  %(page_nopaths)8d pages (%(page_nopaths_kb)8d KB)
 swapfile pages   =  %(page_swap)8d pages (%(page_swap_kb)8d KB)
 pages w/o inode  =  %(page_noinodes)8d pages (%(page_noinodes_kb)8d KB)
+pages in lowmem  =  %(page_lowmem)8d pages (%(page_lowmem_kb)8d KB)
 Total            =  %(start_cache_size)s%(end_cache_size)s"""
 
     with = without = 0
@@ -346,6 +369,7 @@
             'page_nopaths' : without,
             'page_swap'    : len(info.swap_pages),
             'page_noinodes': len(info.noinode_pages),
+            'page_lowmem'  : len(info.lowmem_pages),
             'start_total'  : info.start_size,
             'end_total'    : info.end_size}
 



More information about the Codefragments-commits mailing list