proc文件系统漫谈

1. /proc/buddyinfo:
/proc/buddyinfo是linuxbuddy系统管理物理内存的debug信息。

在linux中使用buddy算法解决物理内存的外碎片问题,其把所有空闲的内存,以2的幂次方的形式,分成11个块链表,
分别对应为1、2、4、8、16、32、64、128、256、512、1024个页块

而Linux支持NUMA技术,对于NUMA设备,NUMA系统的结点通常是由一组CPU和本地内存组成,每一个节点都有相应的本
地内存,因此buddyinfo 中的Node0表示节点ID;而每一个节点下的内存设备,又可以划分为多个内存区域(zone),
因此下面的显示中,对于Node0的内存,又划分类DMA、Normal、HighMem区域。而后面则是表示空闲的区域。一般预留DMA内存从内存的首地址开始预留。

此处以Normal区域进行分析,第二列值为100,表示当前系统中normal区域,可用的连续两页的内存大小为100*2*PAGE_SIZE;
第三列值为52,表示当前系统中normal区域,可用的连续四页的内存大小为52*2^2*PAGE_SIZE

cat /proc/buddyinfo
Node 0, zone DMA         23   15    4    5   2   3    3   2   3   1   0
Node 0, zone Normal    149   100 52  33 23  5   32  8  12  2   59
Node 0, zone HighMem 11     21   23  49 29 15  8   16 12  2  142

2. /proc/meminfo:
cat /proc/meminfo这个命令,这个命令其实跟“free -m”这个命令差不多的,只是得出来的信息更详细

root@vpsroll:~# cat /proc/meminfo  
MemTotal: 262144 kB  
MemFree: 237904 kB  
Cached: 10540 kB  
Active: 10220 kB  
Inactive: 7004 kB  
Active(anon): 6608 kB  
Inactive(anon): 76 kB  
Active(file): 3612 kB  
Inactive(file): 6928 kB  
Unevictable: 0 kB  
Mlocked: 0 kB  
SwapTotal: 524288 kB  
SwapFree: 524288 kB  
Dirty: 0 kB  
Writeback: 0 kB  
AnonPages: 6684 kB  
Shmem: 2632 kB  
Slab: 6972 kB  
SReclaimable: 4288 kB  
SUnreclaim: 2684 kB  

MemTotal: 所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码大小)
MemFree: LowFree与HighFree的总和,被系统留着未使用的内存
Buffers: 用来给文件做缓冲大小
Cached: 被高速缓冲存储器(cache memory)用的内存的大小(等于 diskcache minus SwapCache ).
SwapCached:被高速缓冲存储器(cache memory)用的交换空间的大小,已经被交换出来的内存,但仍然被存放在swapfile中。
用来在需要的时候很快的被替换而不需要再次打开I/O端口。
Active: 在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要否则不会被移作他用.
Inactive: 在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径.
HighTotal:
HighFree: 该区域不是直接映射到内核空间。内核必须使用不同的手法使用该段内存。
LowTotal:
LowFree: 低位可以达到高位内存一样的作用,而且它还能够被内核用来记录一些自己的数据结构。在许多其他事情中,
这是Slab分配的所有内容。 糟糕的事情发生在你超出低端内存的时候。
SwapTotal: 交换空间的总大小
SwapFree: 未被使用交换空间的大小
Dirty: 等待被写回到磁盘的内存大小。
Writeback: 正在被写回到磁盘的内存大小。
AnonPages:未映射页的内存大小
Mapped: 设备和文件等映射的大小。
Slab: 内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。
SReclaimable:可收回Slab的大小
SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
PageTables:管理内存分页页面的索引表的大小。
NFS_Unstable:不稳定页表的大小
VmallocTotal: 可以vmalloc虚拟内存大小
VmallocUsed: 已经被使用的虚拟内存大小。
VmallocChunk: vmalloc区域的可用的最大的连续块

https://www.cnblogs.com/tcicy/p/8299573.html

https://www.sogou.com/link?url=DOb0bgH2eKg7Sf-koBXrEidQRoztLvNXCquHaNrIZCGK6x5wQqf_qNC6QghyI0Ya0ztd7q5nl6o.

3. /proc/cpuinfo

CPU MHz - 显示处理器在千兆位精确的兆赫速度。
cache size - 显示处理器可用的2级缓存。
siblings - 显示使用超线程的体系结构在同一物理CPU上的同级CPU数量。
flags - 这是个总称,定义处理器的许多不同特性,例如浮点单元(fpu)的存在和处理MMX指令的能力。

4. /proc/crypto
该文件列出了Linux内核使用的所有安装的加密密码,包括每个密码的附加详细信息。


5. /proc/devices
该文件显示当前配置的各种字符和块设备(不包括其模块未加载的设备)。 以下是该文件的输出示例:
/proc/devices的输出包括设备的名称和主设备号,分为两大部分:字符设备和块设备。
字符设备类似于块设备,除了两个基本的区别:
1.字符设备不需要缓冲。 块设备具有可用的缓冲区,允许它们在寻址请求前对其进行排序。 这对于设计用于存储信息的设备(例如硬盘驱动器)很重要,因为在将信息写入设备之前对信息进行排序的能力使其能够以更高效的顺序进行排列。
2.字符设备发送的数据没有预先配置的大小。 块设备可以按每个设备配置的大小发送和接收信息。

$ cat /proc/devices 
Character devices:
  1 mem
  4 /dev/vc/0
  4 tty
  4 ttyS
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  5 ttyprintk
  6 lp
  7 vcs
 10 misc
 13 input
 14 sound/midi
 ...

Block devices:
  1 ramdisk
259 blkext
  7 loop
  8 sd
  9 md
 11 sr
 65 sd
 ...

6. /proc/fb
该文件包含帧缓冲设备列表,帧缓冲设备编号和控制它的驱动程序:
$ cat /proc/fb
0 svgadrmfb


7. /proc/filesystems
该文件显示内核当前支持的文件系统类型的列表
第一列表示此文件系统是否被mount在块设备上。那些以nodev开头的程序没有被mount到设备上。
第二列列出了支持的文件系统的名称。
当没有指定参数时,mount命令循环遍历这里列出的文件系统!!

$ cat /proc/filesystems
nodev    sysfs
nodev    rootfs
nodev    ramfs
nodev    bdev
nodev    proc
nodev    cpuset
nodev    cgroup
nodev    tmpfs
nodev    devtmpfs
nodev    debugfs
nodev    tracefs
nodev    securityfs
nodev    sockfs
nodev    bpf
nodev    pipefs
nodev    devpts
        ext3
        ext2
        ext4
        squashfs
nodev    hugetlbfs
        vfat
nodev    ecryptfs
        fuseblk
nodev    fuse
nodev    fusectl
nodev    pstore
nodev    mqueue

8. /proc/interrupts
这个文件记录着系统中每一个中断号中断的次数。
第一列是指IRQ编号。 系统中的每个CPU都有自己的列和每个IRQ自己的中断数量。
第二列报告中断的类型,
最后一列包含位于该IRQ的设备的名称。
每个CPU都有一列显示==>可以从这看出SOC有几个核

这个文件中看到的每种类型的中断都是特定于体系结构的,意味着会有些不同。对于x86机器:
XT-PIC - 这是旧的AT电脑中断。
IO-APIC-edge - 该中断上的电压信号从低电平转换为高电平,创建一个边沿,中断发生,并且仅发送一次信号。
这种中断以及IO-APIC级中断仅在具有586系列及更高处理器的系统中才能看到。
IO-APIC-level - 当电压信号为高电平时产生中断,直到信号再次变为低电平。

9. /proc/iomem
该文件显示每个物理设备的系统内存当前映射:
第一列显示每种不同类型内存使用的内存寄存器。
第二列列出了位于这些寄存器中的内存种类,并显示内核在系统RAM中使用哪些内存寄存器,eg.如果网络接口卡具有多个以太网端口,
则为每个端口分配内存寄存器。

10. /proc/ioports
显示用于与设备进行输入或输出通信的当前注册的端口区域的列表
sfl@ubuntu:~/work$ cat /proc/ioports
0000-0cf7 : PCI Bus 0000:00
0000-001f : dma1
0020-0021 : PNP0001:00
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0061-0061 : PNP0800:00
0064-0064 : keyboard
0070-0071 : rtc0
...

11. /proc/kcore
该文件表示系统的物理内存并以核心文件格式存储。 与大多数/proc/文件不同,kcore显示大小。 该值以字节为单位给出,
等于所使用的物理内存(RAM)的大小加上4 KB。这个文件的内容被设计为由调试器(如gdb)检查,是二进制文件,不是ASCII码文件。


12. /proc/kmsg
该文件用于保存内核生成的消息。这些消息随后被其他程序拾取,如/sbin/klogd或/bin/dmesg。


13. /proc/locks
该文件显示当前由内核锁定的文件。此文件的内容包含内部内核调试数据,并且可能会有很大差异,具体取决于系统的使用情况。
每个锁都有自己的一行,以唯一的编号开头。 第二列是指所使用的锁的类别,FLOCK表示来自flock系统调用的旧式UNIX文件锁,以及
表示来自lockf系统调用的较新POSIX锁的POSIX。
第三列可以有两个值:ADVISORY或MANDATORY。 ADVISORY意味着锁不会阻止其他人访问数据; 它只会阻止其他尝试来锁定它。
MANDATORY意味着在锁定期间不允许其他数据访问。
第四列显示锁是否允许持有者读取或写入文件。
第五列显示持有锁的进程的ID。
第六列显示被锁定文件的ID,格式为MAJOR-DEVICE:MINOR-DEVICE:INODE-NUMBER。
第七和第八列显示文件的锁定区域的开始和结束。

# cat /proc/locks
1:  POSIX  ADVISORY  READ  2380 08:01:1310889 128 128
2:  POSIX  ADVISORY  READ  2380 08:01:1310887 1073741826 1073742335
3:  POSIX  ADVISORY  WRITE 951  00:12:532     0 EOF
4:  POSIX  ADVISORY  READ  2375 08:01:1310889 128 128
5:  POSIX  ADVISORY  READ  2375 08:01:1310887 1073741826 1073742335
6:  POSIX  ADVISORY  READ  2386 08:01:1310889 128 128
7:  POSIX  ADVISORY  READ  2386 08:01:1310887 1073741826 1073742335
8:  FLOCK  ADVISORY  WRITE 1012 00:15:4       0 EOF
9:  FLOCK  ADVISORY  WRITE 954  00:12:536     0 EOF
10: POSIX  ADVISORY  READ  2203 08:01:1310889 128 128
11: POSIX  ADVISORY  READ  2203 08:01:1310887 1073741826 1073742335
12: POSIX  ADVISORY  WRITE 2397 08:01:1310891 0 0
13: FLOCK  ADVISORY  WRITE 1147 00:12:545     0 EOF
原文地址:https://www.cnblogs.com/hellokitty2/p/9000653.html