Skip to content

maliubiao/python_procutils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

python-procutils

interface to access fs/proc, kernel scheduler, os environment ##build

#yasm -f elf64 cpuid.asm 
#gcc -o_proc.o -c module_proc.c  -shared -fPIC $(/usr/bin/python2.7-config --libs --includes --cflags)
#gcc -o_proc.so _proc.o cpuid.o -shared -fPIC $(/usr/bin/python2.7-config --libs --includes --cflags)

###Document for /proc/sys/net kernel/Documentation/networking/* eg: /proc/sys/net/ipv4* -> ip-sysctl.txt ##Demo

>>> pprint.pprint(proc.read_task_stat(os.getpid())
... )
{'arg_end': 140734885481808,
 'arg_start': 140734885481801,
 'blkio_ticks': 20,
 'blocked_sig': 0,
 'cgtime': 0,
 'cmaj_flt': 0,
 'cmin_flt': 0,
 'cstime': 0,
 'cutime': 0,
 'eip': 140488407889360,
 'end_code': 4196868,
 'end_data': 6295616,
 'env_end': 140734885486568,
 'env_start': 140734885481808,
 'esp': 140734885475368,
 'exit_code': 0,
 'exit_signal': 17,
 'flags': 4202496,
 'gtim': 0,
 'maj_flt': 2,
 'min_flt': 2144,
 'mm': 1690,
 'nice': 0,
 'num_threads': 1,
 'pending_sig': 0,
 'pgid': 2720,
 'pid': 2720,
 'policy': 0,
 'ppid': 2697,
 'priority': 20,
 'rsslim': 18446744073709551615L,
 'rt_priority': 0,
 'sid': 2697,
 'sigcatch_sig': 2,
 'sigign_sig': 16781312,
 'start_brk': 26923008,
 'start_code': 4194304,
 'start_data': 6295008,
 'start_stack': 140734885476912,
 'start_time': 607214,
 'state': 'running',
 'stime': 7,
 'task': 0,
 'tcomm': '(python)',
 'tty_nr': 34821,
 'tty_pgrp': 2720,
 'utime': 12,
 'vsize': 33071104,
 'wchan': 0}
>>> pprint.pprint(proc.read_pid_statm(os.getpid()))
{'data': 1086, 'resident': 1696, 'shared': 562, 'size': 8074, 'text': 1}
>>> pprint.pprint(proc.read_pid_status(os.getpid()))
{'CapBnd': '0000001fffffffff',
 'CapEff': '0000000000000000',
 'CapInh': '0000000000000000',
 'CapPrm': '0000000000000000',
 'Cpus_allowed': 'ff',
 'Cpus_allowed_list': '0-7',
 'FDSize': '256',
 'Gid': '100 100 100 100',
 'Groups': '100 488 ',
 'Mems_allowed': '00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001',
 'Mems_allowed_list': '0',
 'Name': 'python',
 'PPid': '2697',
 'Pid': '2720',
 'Seccomp': '0',
 'ShdPnd': '0000000000000000',
 'SigBlk': '0000000000000000',
 'SigCgt': '0000000180000002',
 'SigIgn': '0000000001001000',
 'SigPnd': '0000000000000000',
 'SigQ': '0/63111',
 'State': 'R (running)',
 'Tgid': '2720',
 'Threads': '1',
 'TracerPid': '0',
 'Uid': '1001 1001 1001 1001',
 'VmData': '    4708 kB',
 'VmExe': '       4 kB',
 'VmHWM': '    7376 kB',
 'VmLck': '       0 kB',
 'VmLib': '    4748 kB',
 'VmPTE': '      88 kB',
 'VmPeak': '   32804 kB',
 'VmPin': '       0 kB',
 'VmRSS': '    7372 kB',
 'VmSize': '   32800 kB',
 'VmStk': '     140 kB',
 'VmSwap': '       0 kB',
 'nonvoluntary_ctxt_switches': '39',
 'voluntary_ctxt_switches': '953'}
>>> pprint.pprint(proc.read_pid_mountinfo(os.getpid()))
[{'devname': 'devtmpfs',
  'major_s_dev': '0',
  'minor_s_dev': '5',
  'mnt_id': 17,
  'mnt_opts': 'rw,relatim',
  'mnt_path': '/dev',
  'parent_mnt_pid': 21,
  'root': '/',
  'sb_opts': 'rw,size=4039144k,nr_inodes=1009786,mode=755',
  'shared': 2,
  'type': 'devtmpfs'},
 {'devname': 'tmpfs',
  'major_s_dev': '0',
  'minor_s_dev': '15',
  'mnt_id': 18,
  'mnt_opts': 'rw,relatim',
  'mnt_path': '/dev/shm',
  'parent_mnt_pid': 17,
  'root': '/',
  'sb_opts': 'rw',
  'shared': 3,
  'type': 'tmpfs'},
...  
>>> pprint.pprint(proc.read_pid_mountstats(os.getpid()))
[{'rootfs': {'fstype': 'rootfs', 'path': '/'}},
 {'devtmpfs': {'fstype': 'devtmpfs', 'path': '/dev'}},
 {'tmpfs': {'fstype': 'tmpfs', 'path': '/dev/shm'}},
 {'tmpfs': {'fstype': 'tmpfs', 'path': '/run'}},
 {'devpts': {'fstype': 'devpts', 'path': '/dev/pts'}},
 {'/dev/sda1': {'fstype': 'ext4', 'path': '/'}},
 {'proc': {'fstype': 'proc', 'path': '/proc'}},
 {'sysfs': {'fstype': 'sysfs', 'path': '/sys'}},
 {'securityfs': {'fstype': 'securityfs', 'path': '/sys/kernel/security'}},
 {'tmpfs': {'fstype': 'tmpfs', 'path': '/sys/fs/cgroup'}},
 {'cgroup': {'fstype': 'cgroup', 'path': '/sys/fs/cgroup/systemd'}},
 {'cgroup': {'fstype': 'cgroup', 'path': '/sys/fs/cgroup/cpuset'}},
 {'cgroup': {'fstype': 'cgroup', 'path': '/sys/fs/cgroup/cpu,cpuacct'}},
 {'cgroup': {'fstype': 'cgroup', 'path': '/sys/fs/cgroup/memory'}},
 {'cgroup': {'fstype': 'cgroup', 'path': '/sys/fs/cgroup/devices'}},
 {'cgroup': {'fstype': 'cgroup', 'path': '/sys/fs/cgroup/freezer'}},
 {'cgroup': {'fstype': 'cgroup', 'path': '/sys/fs/cgroup/net_cls'}},
 {'cgroup': {'fstype': 'cgroup', 'path': '/sys/fs/cgroup/blkio'}},
 {'cgroup': {'fstype': 'cgroup', 'path': '/sys/fs/cgroup/perf_event'}},
 {'cgroup': {'fstype': 'cgroup', 'path': '/sys/fs/cgroup/hugetlb'}},
 {'systemd-1': {'fstype': 'autofs', 'path': '/proc/sys/fs/binfmt_misc'}},
 {'hugetlbfs': {'fstype': 'hugetlbfs', 'path': '/dev/hugepages'}},
 {'mqueue': {'fstype': 'mqueue', 'path': '/dev/mqueue'}},
 {'tmpfs': {'fstype': 'tmpfs', 'path': '/var/run'}},
 {'debugfs': {'fstype': 'debugfs', 'path': '/sys/kernel/debug'}},
 {'tmpfs': {'fstype': 'tmpfs', 'path': '/var/lock'}},
 {'/dev/sda5': {'fstype': 'ext4', 'path': '/home'}},
 {'/dev/sda3': {'fstype': 'ext4', 'path': '/data'}},
 {'fusectl': {'fstype': 'fusectl', 'path': '/sys/fs/fuse/connections'}}, 
 {'none': {'fstype': 'proc', 'path': '/var/lib/ntp/proc'}},
 {'gvfsd-fuse': {'fstype': 'fuse.gvfsd-fuse', 'path': '/run/user/1001/gvfs'}},
 {'gvfsd-fuse': {'fstype': 'fuse.gvfsd-fuse',
                 'path': '/var/run/user/1001/gvfs'}}]
>>> pprint.pprint(proc.read_pid_io_counts(os.getpid()))
{'cancelled_write_bytes': 0,
 'rchar': 508717,
 'read_bytes': 131072,
 'syscr': 2388,
 'syscw': 1757,
 'wchar': 85630,
 'write_bytes': 49152}
>>> pprint.pprint(proc.read_pid_maps(os.getpid()))
...
{'end': 140488388579328,
  'inode': 1988073,
  'major_devid': 8,
  'minor_devid': 1,
  'pageoff': 0,
  'path': '/usr/lib64/python2.7/lib-dynload/cStringIO.so',
  'permission': 'r-xp',
  'start': 140488388562944},
 {'end': 140488390672384,
  'inode': 1988073,
  'major_devid': 8,
  'minor_devid': 1,
  'pageoff': 16384,
  'path': '/usr/lib64/python2.7/lib-dynload/cStringIO.so',
  'permission': '---p',
  'start': 140488388579328},
 {'end': 140488390676480,
  'inode': 1988073,
  'major_devid': 8,
  'minor_devid': 1,
  'pageoff': 12288,
  'path': '/usr/lib64/python2.7/lib-dynload/cStringIO.so',
  'permission': 'r--p',
  'start': 140488390672384} 
...
>>> pprint.pprint(proc.read_sys_net())
{'core/bpf_jit_enable': [0],
 'core/busy_poll': [0],
 'core/busy_read': [0],
 'core/dev_weight': [64],
 'core/flow_limit_cpu_bitmap': '00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,',
 'core/flow_limit_table_len': [4096],
 'core/message_burst': [10],
 'core/message_cost': [5],
 'core/netdev_budget': [300],
 'core/netdev_max_backlog': [2000000],
 'core/netdev_tstamp_prequeue': [1],
 'core/optmem_max': [20480],
 'core/rmem_default': [212992],
 'core/rmem_max': [212992],
 'core/rps_sock_flow_entries': [0],
 'core/somaxconn': [128],
 'core/warnings': [1],
 'core/wmem_default': [212992],
 'core/wmem_max': [212992],
 'core/xfrm_acq_expires': [30],
 'core/xfrm_aevent_etime': [10],
 'core/xfrm_aevent_rseqth': [2],
 'core/xfrm_larval_drop': [1],
 'ipv4/cipso_cache_bucket_size': [10],
 'ipv4/cipso_cache_enable': [1],
 'ipv4/cipso_rbm_optfmt': [0],
 'ipv4/cipso_rbm_strictvalid': [1],
 'ipv4/icmp_echo_ignore_all': [0],
 'ipv4/icmp_echo_ignore_broadcasts': [1],
 'ipv4/icmp_errors_use_inbound_ifaddr': [0],
 'ipv4/icmp_ignore_bogus_error_responses': [1],
 'ipv4/icmp_ratelimit': [1000],
 'ipv4/icmp_ratemask': [6168],
 'ipv4/igmp_max_memberships': [20],
 'ipv4/igmp_max_msf': [10],
 'ipv4/inet_peer_maxttl': [600],
 'ipv4/inet_peer_minttl': [120],
 'ipv4/inet_peer_threshold': [65664],
 'ipv4/ip_default_ttl': [64],
 'ipv4/ip_dynaddr': [0],
 'ipv4/ip_early_demux': [1],
 'ipv4/ip_forward': [1],
 'ipv4/ip_local_port_range': [32768, 61000],
 'ipv4/ip_local_reserved_ports': '',
 'ipv4/ip_no_pmtu_disc': [0],
 'ipv4/ip_nonlocal_bind': [0],
 'ipv4/ipfrag_high_thresh': [4194304],
 'ipv4/ipfrag_low_thresh': [3145728],
 'ipv4/ipfrag_max_dist': [64],
 'ipv4/ipfrag_secret_interval': [600],
 'ipv4/ipfrag_time': [20],
 'ipv4/ping_group_range': [1, 0],
 'ipv4/tcp_abort_on_overflow': [0],
 'ipv4/tcp_adv_win_scale': [1],
 'ipv4/tcp_allowed_congestion_control': 'cubic reno',
 'ipv4/tcp_app_win': [31],
 'ipv4/tcp_available_congestion_control': 'cubic reno',
 'ipv4/tcp_base_mss': [512],
 'ipv4/tcp_challenge_ack_limit': [100],
 'ipv4/tcp_congestion_control': 'cubic',
 'ipv4/tcp_dma_copybreak': [4096],
 'ipv4/tcp_dsack': [1],
 'ipv4/tcp_early_retrans': [3],
 'ipv4/tcp_ecn': [2],
 'ipv4/tcp_fack': [1],
 'ipv4/tcp_fastopen': [0],
 'ipv4/tcp_fastopen_key': '4ce7275957641bead9f0d30a678c44c7',
 'ipv4/tcp_fin_timeout': [60],
 'ipv4/tcp_frto': [2],
 'ipv4/tcp_keepalive_intvl': [75],
 'ipv4/tcp_keepalive_probes': [9],
 'ipv4/tcp_keepalive_time': [7200],
 'ipv4/tcp_limit_output_bytes': [131072],
 'ipv4/tcp_low_latency': [0],
 'ipv4/tcp_max_orphans': [32768],
 'ipv4/tcp_max_ssthresh': [0],
 'ipv4/tcp_max_syn_backlog': [256],
 'ipv4/tcp_max_tw_buckets': [32768],
 'ipv4/tcp_mem': [187950, 250603, 375900],
 'ipv4/tcp_moderate_rcvbuf': [1],
 'ipv4/tcp_mtu_probing': [0],
 'ipv4/tcp_no_metrics_save': [0],
 'ipv4/tcp_orphan_retries': [0],
 'ipv4/tcp_reordering': [3],
 'ipv4/tcp_retrans_collapse': [1],
 'ipv4/tcp_retries1': [3],
 'ipv4/tcp_retries2': [15],
 'ipv4/tcp_rfc1337': [0],
 'ipv4/tcp_rmem': [4096, 87380, 6291456],
 'ipv4/tcp_sack': [1],
 'ipv4/tcp_slow_start_after_idle': [1],
 'ipv4/tcp_stdurg': [0],
 'ipv4/tcp_syn_retries': [6],
 'ipv4/tcp_synack_retries': [5],
 'ipv4/tcp_syncookies': [1],
 'ipv4/tcp_thin_dupack': [0],
 'ipv4/tcp_thin_linear_timeouts': [0],
 'ipv4/tcp_timestamps': [1],
 'ipv4/tcp_tso_win_divisor': [3],
 'ipv4/tcp_tw_recycle': [0],
 'ipv4/tcp_tw_reuse': [0],
 'ipv4/tcp_window_scaling': [1],
 'ipv4/tcp_wmem': [4096, 16384, 4194304],
 'ipv4/tcp_workaround_signed_windows': [0],
 'ipv4/udp_mem': [189333, 252446, 378666],
 'ipv4/udp_rmem_min': [4096],
 'ipv4/udp_wmem_min': [4096],
 'ipv4/xfrm4_gc_thresh': [1024],
 'nf_conntrack_max': [65536]}

###stack backtrace

In [6]: _proc.backtrace(0)
Out[6]: 
['./_proc.so(+0x20af) [0x7f83716210af]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x113a) [0x7f837849911a]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x403) [0x7f837849e5c3]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalCode+0x32) [0x7f83784cc8b2]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x4e7b) [0x7f837849ce5b]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x143) [0x7f837849e303]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalFrameEx+0xd27) [0x7f8378498d07]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x403) [0x7f837849e5c3]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalFrameEx+0xd27) [0x7f8378498d07]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x403) [0x7f837849e5c3]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalFrameEx+0xd27) [0x7f8378498d07]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x403) [0x7f837849e5c3]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalFrameEx+0xd27) [0x7f8378498d07]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x403) [0x7f837849e5c3]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalFrameEx+0xd27) [0x7f8378498d07]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x143) [0x7f837849e303]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalFrameEx+0xd27) [0x7f8378498d07]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x403) [0x7f837849e5c3]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalFrameEx+0xd27) [0x7f8378498d07]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalCodeEx+0x403) [0x7f837849e5c3]',
 '/usr/lib64/libpython2.7.so.1.0(PyEval_EvalCode+0x32) [0x7f83784cc8b2]',
 '/usr/lib64/libpython2.7.so.1.0(+0xf3d91) [0x7f83784d9d91]',
 '/usr/lib64/libpython2.7.so.1.0(PyRun_FileExFlags+0x86) [0x7f83784da156]',
 '/usr/lib64/libpython2.7.so.1.0(PyRun_SimpleFileExFlags+0x17d) [0x7f83784daa2d]',
 '/usr/lib64/libpython2.7.so.1.0(Py_Main+0x3ad) [0x7f83784e422d]',
 '/lib64/libc.so.6(__libc_start_main+0xf5) [0x7f8377e3da15]',
 '/usr/bin/python() [0x400791]']

###on which cpu , which node

>>> _proc.getcpu()
(3, 0)

###cpu affinity

>>> _proc.sched_getaffinity(os.getpid())
[0, 1, 2, 3] 
>>> _proc.sched_setaffinity(os.getpid(), (2,))
>>> _proc.getcpu()
(2, 0)
>>> _proc.getcpu()
(2, 0)
>>> _proc.get_cpu_brand()
'GenuineIntel'

###cpu feature, cpu brand, mode, family, stepping_id, initial_apic

>>> pprint.pprint(_proc.get_cpu_feature())
{'acpi_thermal': True,
 'aesni': True,
 'apic': True,
 'avx': True,
 'brand': 0,
 'clflush': 8,
 'clfsh_cflush': True,
 'cmov': True,
 'cmpxchg16b': True,
 'cnxt-id': False,
 'cx8_cmpxchg8b': True,
 'dca': False,
 'de': True,
 'ds': True,
 'ds_cpl': True,
 'dtes64': True,
 'eist': True,
 'extended_family': 0,
 'extended_mode': 2,
 'f16c': False,
 'family': 6,
 'fma': False,
 'fpu_x87': True,
 'fxsr_sxsave': True,
 'htt': True,
 'inital_apic': 0,
 'mca': True,
 'mce': True,
 'mmx': True,
 'model': 10,
 'monitor': True,
 'movbe': False,
 'msr_rdmsr': True,
 'mtrr': True,
 'osxsave': True,
 'pae': True,
 'pat': True,
 'pbe': True,
 'pcid': True,
 'pclmulqdq': True,
 'pdcm': True,
 'pge_pte': True,
 'popcnt': True,
 'process_type': 0,
 'pse': True,
 'psn': False,
 'rdrand': False,
 'sep': True,
 'smx': False,
 'ss': True,
 'sse': True,
 'sse2': True,
 'sse3': True,
 'sse41': True,
 'sse42': True,
 'ssse3': True,
 'stepping_id': 7,
 'tm': True,
 'tm2': True,
 'tsc': True,
 'vme': True,
 'vmx': True,
 'x2apic': True,
 'xsave': True,
 'xtpr': True}

About

interface to access fs/proc, kernel scheduler, os environment

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors