/proc/* 中的数据是如何收集的,其可靠性如何?

/proc/* 中的数据是如何收集的,其可靠性如何?

最近,我一直在使用一个集群监控工具(ganglia),它可以聚合/proc/*每台机器上的系统指标。

  1. 数据是如何/proc/*收集的?
    谁在那里写入数据?数据多久更新一次?
  2. 我可以调整它的收集方式以使其更准确吗?

答案1

http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/proc.html

/proc 非常特别,因为它也是一个虚拟文件系统。它有时被称为进程信息伪文件系统。它不包含“真实”文件,而是包含运行时系统信息(例如系统内存、安装的设备、硬件配置等)。因此,它可以被视为内核的控制和信息中心。事实上,相当多的系统实用程序只是调用该目录中的文件。例如,“lsmod”与“cat /proc/modules”相同,而“lspci”是“cat /proc/pci”的同义词。通过更改此目录中的文件,您甚至可以在系统运行时读取/更改内核参数 (sysctl)。

换句话说,这是直接来自内核/等的实时信息,而不是定期更新的文件。

答案2

里面的数据/proc根本没有更新。它是按需生成的。

当您读取/proc(或实际上读取任何文件)时,您正在调用内核。如果您正在读取“真实”文件,内核将(根据缓存、权限等)遍历文件系统并检索您请求的数据。如果您正在读取/proc“文件”,内核将即时生成相关数据。

这项技术已经变得相当流行,并且现在广泛应用于文件系统的不同领域。例如,/sys虚拟文件系统从架构的角度来看,它非常相似/proc,尽管内容完全不同。在现代系统上,您可能会发现这/dev也是虚拟文件系统,因为否则要使文件/dev与硬件实际情况保持同步是相当痛苦的。一些用户层服务通过以下方式提供自己的虚拟文件系统保险丝

答案3

中的文件/proc大多作为设备驱动程序实现。它们的实现方式基本上与串行设备 ( /dev/ttyS*) 类似,只不过程序员不是从硬件返回数据,而是返回其程序生成的数据。

在某种程度上,它类似于网络服务器。只是,文件不是侦听 TCP 套接字并响应,而是/proc侦听读取请求并响应的设备驱动程序。

Unix 内核驱动程序的设计中没有强制设备节点只能安装在,/dev因此人们借此机会开发和标准化目录/proc以包含返回一些运行时信息的虚拟设备。如今,Linux 内核包含专门的方法来处理/proc驱动程序。

这是一篇有关设备驱动程序的文章,其中包含驱动程序示例/prochttp://www.linuxdevcenter.com/pub/a/linux/2007/07/05/devhelloworld-a-simple-introduction-to-device-drivers-under-linux.html

相关内容