linux - 直接从 linux 内核访问系统性能数据

标签 linux performance linux-kernel

我需要编写一个应用程序来获取 Linux 机器上的性能统计信息。不幸的是,环境的内存非常有限,因此使用标准命令行工具并不是真正的选择,因为我需要非常频繁地轮询它们。

理想情况下,我希望能够做的是直接从内核本身获取性能数据,使用相同的缓冲区和数据来尝试尽可能减少我的应用程序的 RAM 要求。将我的应用程序如此紧密地绑定(bind)到 Linux 内核并不是真正的问题,我们只在生产中使用过 Linux,而且我看不到它有任何真正的改变。

我花了一两天时间查看了内核源代码,但我不得不承认我有些不知所措。谁能指出我访问 CPU 性能信息/I/O 性能信息/网络性能信息和带宽使用信息的正确位置?

最佳答案

我觉得/proc下有几个文件,比如/proc/stat、/proc/diskstats、/proc/net/*。

对于 CPU 性能信息,使用/proc/stat,文件格式在 Linux 内核源代码树中的文件 ./fs/proc/stat.c 中定义。

对于磁盘访问信息,使用/proc/diskstats,文件格式定义在Linux Kernel源代码树中的文件./block/genhd.c中,函数为diskstats_show()。

关于网络相关的统计,可以引用/proc/net/下的文件。但我不知道如何根据目录/proc/net 下的文件计算带宽使用量。

关于linux - 直接从 linux 内核访问系统性能数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17940011/

相关文章:

iphone - iPhoneOS 会自动清除库/缓存吗?

c - 内核 block 设备

android - android内核中的c指针类型比较

C - System V - 删除共享内存段

linux - 消息 : ttyname failed: no such device

javascript - 为什么使用 while 循环填充新数组的速度如此之快?

c# - 提高 DevEx WPF 网格的性能

linux - 添加链接本地地址

linux - rm 没有释放磁盘空间

c - for循环中的数组未获得正确的值