如何获取 Linux 重启以来的当前 jiffies 数?

如何获取 Linux 重启以来的当前 jiffies 数?

Linux/proc/PID/stat列出了几个以 jiffies 为单位的指标。有没有办法获取当前的自重启以来的 jiffies 数?我还假设 Jiffies 为秒数乘以 USER_HZ 值。

cpu我可以通过将 中的前 4 个参数相加来得到这个/proc/stat吗?


更新

$ date +"%s.%N" && grep '^jiffies' timer_list
1262103103.162169230
jiffies: 1007865965
jiffies: 1007865965
jiffies: 1007865965
jiffies: 1007865965
$ date +"%s.%N" && grep '^jiffies' timer_list
1262103108.706475051
jiffies: 1007867351
jiffies: 1007867351
jiffies: 1007867351
jiffies: 1007867351

它们之间的差值几乎正好是 250 jiffies/秒。看起来好像每个 CPU 的所有 jiffies 行都是等价的(不过我猜如果配置/更换了热的 | 按需 CPU,它们可能就不是等价的了)。我认为这为我提供了一个获取一致 jiffies 计数器的最佳位置。

答案1

从技术上讲,计算机术语中的 jiffy 是系统计时器中断的 1 个滴答的持续时间。但这并非绝对。对于 Intel x86 上的 Linux 2.6.13+,jiffy 为 4ms,但根据架构和内核版本,范围可以从 1ms 到 10ms。

来自内核定时器系统页:

过去,内核使用 100 作为 HZ 值,产生 10 毫秒的 jiffy 间隔。在 2.4 中,i386 的 HZ 值更改为 1000,产生 1 毫秒的 jiffy 间隔。最近(2.6.13)内核将 i386 的 HZ 更改为 250。(1000 被认为太高)。

它列出了/proc/timer_list/proc/timer_stats

您可以在启动时激活 timer_stats,然后 cat 此文件来打印统计数据。

答案2

不,您只需要第一行。第一行汇总了其他 cpu 行中的所有内容。

示例输出:

[john@awesome]$cat /proc/stat
中央处理器 35024984 1771325 94153391 1810948613 2648063 352387 557232
CPU0 13955475 927654 59431476 895791946 1910028 318618 438048
CPU1 21069509 843671 34721915 915156667 738035 33769 119184
intr 1403502159 1138402452 597 0 3 3 0 5 0 1 0 0 0 12315 0 92119425 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57676632 0 0 0 0 0 0 0 115290726 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
文本文件 21043582666
时间 1252332786
进程 25663823
procs_running 1
procs_blocked 0

每列的含义(从左到右):

  • 用户:在用户模式下执行的正常进程
  • nice:在用户模式下执行的 niced 进程
  • 系统:在内核模式下执行的进程
  • idle:空闲时间
  • iowait:等待 I/O 完成
  • irq:服务中断
  • softirq:服务软中断

如你所见,cpu(用户模式进程)后面的第一列等于它下面的2个数字相加。

答案3

在更高版本的 Linux 内核中,您可以查询/proc/timer_list并找出系统内每个 CPU 自重启以来的 jiffies 数量。它们应该始终匹配。

$ grep -E "^cpu|^jiff" /proc/timer_list
cpu: 0
jiffies: 4299690231
cpu: 1
jiffies: 4299690231

如果你看一下背后的代码timer_list.c打印上述内容:

...
...
        P_ns(iowait_sleeptime);
        P(last_jiffies);
        P(next_timer);
        P_ns(idle_expires);
        SEQ_printf(m, "jiffies: %Lu\n",
               (unsigned long long)jiffies);

请注意它是unsigned long long

答案4

每秒 jiffies 数:

awk 'BEGIN {"cat /proc/timer_list | grep '\''^jiffies'\'' | awk '\''{print $2}'\''" | getline a; "cat /proc/uptime | awk '\''{print $1}'\''" | getline b ;printf "%.4f\n", a/b}'

解释:它将 /proc/timer_list 中找到的自启动以来的 jiffies 除以 /proc/uptime 中找到的自启动以来的秒数

相关内容