为什么打开 /proc/cpuinfo 需要 17 毫秒?

为什么打开 /proc/cpuinfo 需要 17 毫秒?

运行这个

strace -ff -tt perl -e 'open(A,"<","/proc/cpuinfo");'

给出这个:

22:36:10.365187 openat(AT_FDCWD, "/proc/cpuinfo", O_RDONLY) = 3
22:36:10.382061 ioctl(3, TCGETS, 0x7fffb127ea50) = -1 ENOTTY (Inappropriate ioctl for device)

/proc/cpuinfo是内存中的文件,不需要访问慢速磁盘。为什么打开需要 17 毫秒?

我在空闲系统上测试了10次,时序非常一致。

$ uname -a
Linux hk 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

答案1

从内核版本 4.12 开始,在支持以下功能的 x86 CPU 上APERF / MPERF MSR,打开时会有轻微延迟,/proc/cpuinfo以确保准确报告 CPU 频率(或者至少不显示太陈旧的值)。这在以下版本中略有改变cpufreq:x86:使scaling_cur_freq的行为更符合预期(4.13,延迟增加)并再次在x86 / CPU:始终在 /proc/cpuinfo 中显示当前 CPU 频率(4.14,减少延迟)。

相关内容