Proc

為什麼打開 /proc/cpuinfo 需要 17 毫秒?

  • June 24, 2019

執行這個

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

從核心版本 4.12 開始,在支持APERF / MPERF MSRs 的x86 CPU 上,打開時會稍有延遲,/proc/cpuinfo以確保准確報告 CPU 頻率(或者至少不顯示太陳舊的值)。這在cpufreq 中略有改變:x86:使 scaling_cur_freq 的行為更符合預期(4.13,延遲增加),再次在x86 / CPU 中:始終在 /proc/cpuinfo 中顯示目前 CPU 頻率(4.14,延遲減少)。

引用自:https://unix.stackexchange.com/questions/526519