使用python跟踪Linux中的脏页面速率

时间:2017-05-03 06:15:29

标签: python linux memory kernel

我正在尝试用Python编写一段代码来跟踪Linux中特定进程的页面污染。 我在Linux内核文档中得到了解决方案描述如下:

PTE上有点软,有助于跟踪哪些页面是一项任务 写信给。为了做这个跟踪,应该

  1. 清除任务的PTE中的软脏位。

    这是通过将“4”写入的/ proc / PID / clear_refs文件来完成的  有问题的任务。

  2. 等一段时间。

  3. 从PTE读取软脏位。

    这是通过从/ proc / PID / pagemap读取来完成的。第55位  64位qword是软脏的。如果设置,则从步骤1开始写入相应的PTE。

  4. 我在执行第3步时遇到问题。我在python中编写了一个始终返回零的代码。我不知道如何在每个PTE中读取第55位。在这方面,我感谢任何帮助。

    这是我用Python写的:

        #!/usr/bin/python
    
        import sys
        import os
        import struct
    
        def read_entry(pid, size=8):
            maps_path = "/proc/{0}/pagemap".format(pid)
            if not os.path.isfile(maps_path):
                print "Process {0} doesn't exist.".format(pid)[0]
                return
            with open(maps_path, 'rb') as f:
                try:
                    f.seek(0)
                    while True:
                        return struct.unpack('Q', f.read(size))
    
                finally:
                    f.close()
    
    if __name__ == "__main__":
        pid = sys.argv[1]
        print (read_entry(pid))
    

0 个答案:

没有答案