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}