linux内核源码分析之proc文件系统
Posted 为了维护世界和平_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux内核源码分析之proc文件系统相关的知识,希望对你有一定的参考价值。
目录
一、proc文件系统
是一种虚拟文件系统,其信息不能从块设备读取,只有在读取文件内容时,才动态生成相应的信息。内核使用它向外界导出信息。
使用 proc 文件系统- 可以获得有关内核各子系统的信息 如 内存利用率、附接的外设等
- 可以在不重新编译内核源代码的情况下修改内核的行为,或重启系统
- 文件系统装在在/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->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 子目录提供了内核的各种网络选项的有关数据- udp和tcp提供了IPv4的UDP和TCP套接字的统计数据
- 用于反向地址解析的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文件系统的主要内容,如果未能解决你的问题,请参考以下文章