[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