Index: tools/linux/procfs.py |
diff --git a/tools/linux/procfs.py b/tools/linux/procfs.py |
index bbf20190a15ff4a73f2a88c798d78d9e456c1abf..6308fdd93da7a14ad279edd4be38630cd81b6d1c 100755 |
--- a/tools/linux/procfs.py |
+++ b/tools/linux/procfs.py |
@@ -18,7 +18,13 @@ import struct |
import sys |
-LOGGER = logging.getLogger('procfs') |
+class _NullHandler(logging.Handler): |
+ def emit(self, record): |
+ pass |
+ |
+ |
+_LOGGER = logging.getLogger('procfs') |
+_LOGGER.addHandler(_NullHandler()) |
class ProcStat(object): |
@@ -547,6 +553,7 @@ class ProcPagemap(object): |
total_vsize = 0 |
in_process_dup = 0 |
vma_internals = collections.OrderedDict() |
+ process_pageframe_set = set() |
pagemap_fd = os.open( |
os.path.join('/proc', str(pid), 'pagemap'), os.O_RDONLY) |
@@ -555,22 +562,21 @@ class ProcPagemap(object): |
swapped = 0 |
vsize = 0 |
pageframes = collections.defaultdict(int) |
- pageframes_set = set() |
begin_offset = ProcPagemap._offset(vma.begin) |
chunk_size = ProcPagemap._offset(vma.end) - begin_offset |
os.lseek(pagemap_fd, begin_offset, os.SEEK_SET) |
buf = os.read(pagemap_fd, chunk_size) |
if len(buf) < chunk_size: |
- LOGGER.warn('Failed to read pagemap at 0x%x.' % vma.begin) |
+ _LOGGER.warn('Failed to read pagemap at 0x%x in %d.' % (vma.begin, pid)) |
pagemap_values = struct.unpack( |
'=%dQ' % (len(buf) / ProcPagemap._BYTES_PER_PAGEMAP_VALUE), buf) |
for pagemap_value in pagemap_values: |
vsize += ProcPagemap._BYTES_PER_OS_PAGE |
if pagemap_value & ProcPagemap._MASK_PRESENT: |
- if (pagemap_value & ProcPagemap._MASK_PFN) in pageframes_set: |
+ if (pagemap_value & ProcPagemap._MASK_PFN) in process_pageframe_set: |
in_process_dup += ProcPagemap._BYTES_PER_OS_PAGE |
else: |
- pageframes_set.add(pagemap_value & ProcPagemap._MASK_PFN) |
+ process_pageframe_set.add(pagemap_value & ProcPagemap._MASK_PFN) |
if (pagemap_value & ProcPagemap._MASK_PFN) not in pageframes: |
present += ProcPagemap._BYTES_PER_OS_PAGE |
pageframes[pagemap_value & ProcPagemap._MASK_PFN] += 1 |
@@ -680,13 +686,12 @@ class _ProcessMemory(object): |
def main(argv): |
"""The main function for manual testing.""" |
- |
- LOGGER.setLevel(logging.DEBUG) |
+ _LOGGER.setLevel(logging.WARNING) |
handler = logging.StreamHandler() |
- handler.setLevel(logging.INFO) |
- formatter = logging.Formatter('%(message)s') |
- handler.setFormatter(formatter) |
- LOGGER.addHandler(handler) |
+ handler.setLevel(logging.WARNING) |
+ handler.setFormatter(logging.Formatter( |
+ '%(asctime)s:%(name)s:%(levelname)s:%(message)s')) |
+ _LOGGER.addHandler(handler) |
pids = [] |
for arg in argv[1:]: |