linux内核源码分析之proc文件系统

Posted 为了维护世界和平_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux内核源码分析之proc文件系统相关的知识,希望对你有一定的参考价值。

目录

一、proc文件系统

1、proc的内容

2、优缺点

二、特定进程的数据

三、一般性系统信息

四、网络信息

五、系统控制信息



一、proc文件系统

是一种虚拟文件系统,其信息不能从块设备读取,只有在读取文件内容时,才动态生成相应的信息。内核使用它向外界导出信息。

使用 proc 文件系统
  1. 可以获得有关内核各子系统的信息 如 内存利用率、附接的外设等
  2. 可以在不重新编译内核源代码的情况下修改内核的行为,或重启系统
  3. 文件系统装在在/proc, 只需要shell标准的cat,echo可以获取proc信息

1、proc的内容

  • 内存管理
  • 系统进程的特征数据
  • 文件系统
  • 设备驱动程序
  • 系统总线
  • 电源管理
  • 终端
  • 系统控制参数

2、优缺点

        优点:方便查看系统状态

        缺点:proc文件系统的信息过载问题,有时候会猛烈地爆发。

替代方案: 1) 结构化的方法,采用特定于问题的虚拟文件系统。 一个很好的例子就是USB文件系统,将与USB子系统有关的许多状态信息导出到用户空间,而没有给/proc增加新的负担。 2)Sysfs文件系统提供了一种层次化的视图,不仅包括设备树,还有重要的内核对象。 proc可以查看系统数据类型,特定进程的数据, 一般性系统信息, 网络信息和系统控制信息。

二、特定进程的数据

  每个系统进程,无论当前状态如何,都有一个对应的子目录(与其PID同名),包含了该进程的有 关信息。 1、查看13079进程信息,里面很多文件通过文件名即可知道功能 
(base) root@ubuntu:/proc/13079# ls
arch_status  clear_refs       cwd      gid_map    maps        net        oom_score_adj  root       smaps         status         uid_map
attr         cmdline          environ  io         mem         ns         pagemap        sched      smaps_rollup  syscall        wchan
autogroup    comm             exe      limits     mountinfo   numa_maps  patch_state    schedstat  stack         task
auxv         coredump_filter  fd       loginuid   mounts      oom_adj    personality    sessionid  stat          timers
cgroup       cpuset           fdinfo   map_files  mountstats  oom_score  projid_map     setgroups  statm         timerslack_ns

2、查看进程cmdline

(base) root@ubuntu:/proc/13079# cat cmdline 
/usr/lib/openssh/sftp-server

3、查看进程version

<pre>(base) root@ubuntu:/proc/13079# cat environ
SSH_CONNECTION=192.168.0.108 52245 192.168.0.107 22LANG=en_US.UTF-8XDG_SESSION_ID=10USER=wyPWD=/home/wyHOME=/home/wySSH_CLIENT=192.168.0.108 52245 22MAIL=/var/mail/wySHELL=/bin/bashSHLVL=1LOGNAME=wyDBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/busXDG_RUNTIME_DIR=/run/user/1000PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin_=/usr/lib/openssh/sftp-server</pre>
4、查看进程状态status
(base) root@ubuntu:/proc/13079# cat status
Name:	sftp-server
Umask:	0002
State:	S (sleeping)
Tgid:	13079
Ngid:	0
Pid:	13079
PPid:	13078
TracerPid:	0
Uid:	1000	1000	1000	1000
Gid:	1000	1000	1000	1000
FDSize:	64
Groups:	4 24 27 30 46 116 126 1000 
NStgid:	13079
NSpid:	13079
NSpgid:	13079
NSsid:	13079
VmPeak:	   13156 kB
VmSize:	   13064 kB
VmLck:	       0 kB
...
SigQ:	0/31513
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000000000000
SigIgn:	0000000000000000
SigCgt:	0000000000000000
CapInh:	0000000000000000
CapPrm:	0000000000000000
CapEff:	0000000000000000
CapBnd:	0000003fffffffff
CapAmb:	0000000000000000
NoNewPrivs:	0
Seccomp:	0
Speculation_Store_Bypass:	thread vulnerable
Cpus_allowed:	ffffffff,ffffffff,ffffffff,ffffffff
Cpus_allowed_list:	0-127
Mems_allowed:	00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:	0
voluntary_ctxt_switches:	32
nonvoluntary_ctxt_switches:	3
不仅提供了有关 UID/GID 及进程其他数值的信息,还包括内存分配、进程能力、各个信号掩码的 状态(待决、阻塞,等等) 5、查看进程调度信息sched
<pre>(base) root@ubuntu:/proc/13079# cat sched
sftp-server (13079, #threads: 1)
-------------------------------------------------------------------
se.exec_start                                :      17648570.034625
se.vruntime                                  :             2.310622
se.sum_exec_runtime                          :             3.507972
se.nr_migrations                             :                    0
nr_switches                                  :                   35
nr_voluntary_switches                        :                   32
nr_involuntary_switches                      :                    3
se.load.weight                               :              1048576
se.runnable_weight                           :              1048576
se.avg.load_sum                              :                  552
se.avg.runnable_load_sum                     :                  552
se.avg.util_sum                              :               523996
se.avg.load_avg                              :                   11
se.avg.runnable_load_avg                     :                   11
se.avg.util_avg                              :                   10
se.avg.last_update_time                      :       17648570034176
se.avg.util_est.ewma                         :                   10
se.avg.util_est.enqueued                     :                    0
policy                                       :                    0
prio                                         :                  120
clock-delta                                  :                   13
mm-&gt;numa_scan_seq                            :                    0
numa_pages_migrated                          :                    0
numa_preferred_nid                           :                   -1
total_numa_faults                            :                    0
current_node=0, numa_group_id=0
numa_faults node=0 task_private=0 task_shared=0 group_private=0 group_shared=0
</pre>

可以看到有时间,权重,这正是在CFS调度的时候用到的,具体调度分析参考进程CFS调度分析

三、一般性系统信息

  • kallsyms是一个符号表,给出了所有全局内核变量和函 数在内存中的地址
  • kcore     是一个动态的内核文件,“包含”了运行中的内核的所有数据,即主内存的全部内容
  • interrupts保存了当前操作期间引发的中断的说明
  • cpuinfo  处理器信息,如类型、制造商、型号和性能
  • ioports  当前使用的I/O端口
  • kmsg  内核输出的消息
  • loadavg  系统的平均负载,前3个是过去1分钟,5分钟,15分钟的负载
  • meminfo  存储器使用信息,包括物理内存和swap
  • uptime  系统启动的时间长度和空闲的时间长度
  • version  内核版本
  • slabinfo  系统中slab缓存的分配信息
  • ...

四、网络信息

/proc/net 子目录提供了内核的各种网络选项的有关数据
  • udptcp提供了IPv4UDPTCP套接字的统计数据
  • 用于反向地址解析的ARP表,可以在arp文件中查看
  • dev保存了通过系统的网络接口传输的数据量的统计数据(包括环回接口)。该信息可用于检 查网络的传输质量

查看dev信息,有Receive和Transmit

(base) root@ubuntu:/proc/net# cat dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
 ens33: 755825318  547689    0    0    0     0          0         0 15464964  183026    0    0    0     0       0          0
    lo:  348467    3367    0    0    0     0          0         0   348467    3367    0    0    0     0       0          0

五、系统控制信息

(base) root@ubuntu:/proc/sys# ls -l
total 0
dr-xr-xr-x 1 root root 0 Mar 25 05:39 abi
dr-xr-xr-x 1 root root 0 Mar 25 05:39 debug
dr-xr-xr-x 1 root root 0 Mar 20 02:18 dev
dr-xr-xr-x 1 root root 0 Mar 20 02:18 fs
dr-xr-xr-x 1 root root 0 Mar 20 02:18 kernel
dr-xr-xr-x 1 root root 0 Mar 20 02:18 net
dr-xr-xr-x 1 root root 0 Mar 25 05:39 user
dr-xr-xr-x 1 root root 0 Mar 20 02:18 vm

查看内存交换算法在换出页时的“积极”程度

(base) root@ubuntu:/proc/sys#  cat /proc/sys/vm/swappiness
60

修改后再查看

(base) root@ubuntu:/proc/sys# echo "80" > /proc/sys/vm/swappiness
(base) root@ubuntu:/proc/sys# cat /proc/sys/vm/swappiness
80

 免费内核视频 Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂


以上是关于linux内核源码分析之proc文件系统的主要内容,如果未能解决你的问题,请参考以下文章

linux内核源码分析之性能优化

linux内核源码分析之虚拟文件系统VFS

linux内核源码分析之sysfs文件系统

linux内核源码分析之sysfs文件系统

linux内核源码分析之虚拟内存映射

linux文件管理之proc文件系统