Cpuinfo_cur_freq और / proc / cpuinfo अलग-अलग संख्याओं की रिपोर्ट क्यों करते हैं?


13

जब मैं करता हूं

sudo watch -n1 cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq

मुझे 1.8 - 2.7 GHz मिलता है। यह कभी भी 2.7 से ऊपर नहीं जाता है।

और जब मैं करता हूँ

watch -n1 "cat /proc/cpuinfo | grep MHz"

मुझे 768 मेगाहर्ट्ज - 1.8 गीगाहर्ट्ज़ मिलता है। यह कभी भी 1.8 से ऊपर नहीं जाता है।

किसी को पता है यहां क्या चल रहा है?

जवाबों:


14

अधिकांश सीपीयू में अब बैटरी / बिजली के उपयोग को बचाने में मदद करने के लिए अपनी गति को समायोजित करने की क्षमता शामिल है। इसे आमतौर पर सीपीयू फ्रीक्वेंसी स्केलिंग कहा जाता है । सीपीयू की वास्तविक समय गति इसके द्वारा बताई गई है:

$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq

इसके द्वारा निरपेक्ष (अधिकतम) सीपीयू की गति बताई जा रही है:

$ cat /proc/cpuinfo

विशेष रूप से यह पंक्ति:

model name  : Intel(R) Core(TM) i5 CPU       M 560  @ 2.67GHz

जो लाइन दिखाता cpu MHz है वह आपके सीपीयू की अधिकतम गति नहीं दिखाता है। यह मान आपकी वर्तमान गति है। मल्टी-कोर सिस्टम जैसे कि i7 या i5 पर आप इसे इस कमांड के साथ देख सकते हैं:

$ cat /proc/cpuinfo |grep MHz
cpu MHz     : 1199.000
cpu MHz     : 1199.000
cpu MHz     : 1199.000
cpu MHz     : 2667.000

हालाँकि आप इस कमांड के साथ निरपेक्ष (अधिकतम) गति देख सकते हैं:

$ lscpu 
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
CPU(s):                4
Thread(s) per core:    2
Core(s) per socket:    2
CPU socket(s):         1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 37
Stepping:              5
CPU MHz:               2667.000
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0-3

नोट: इसके पास कोर की संख्या NUMAS node0 CPU(s)4 है, अर्थात 0,1,2, और 3।

सीपीयू स्केलिंग और गवर्निंग?

आपके सिस्टम में मोड को स्केलिंग गवर्नर कहा जाता है। एक कार पर एक गवर्नर के समान। आप देख सकते हैं कि इस कमांड के साथ कौन से उपलब्ध हैं:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
powersave ondemand userspace performance 

आप यह भी देख सकते हैं कि वर्तमान में कौन सक्रिय है:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand

नोट: मैं जो आदेश दिखा रहा हूं उसमें केवल 1 सीपीयू शामिल है cpu0,। आप या तो *सभी कोर को देखने के लिए रास्ते में स्थानापन्न कर सकते हैं या आप चुनिंदा रूप से देख सकते हैं cpu1, आदि।

आप अपने राज्यपाल की प्रोफ़ाइल के लिए उपलब्ध अधिकतम और न्यूनतम सीपीयू गति देख सकते हैं:

$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
2667000
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq 
1199000

इस लेख में और अधिक विवरण उपलब्ध हैं, जिसका शीर्षक है: सीपीयू फ्रीक्वेंसी स्केलिंग इन लिनक्स विथ सीपफ्रेक

तो cpuinfo_cur_freq के बारे में क्या?

सीपीयू के विनिर्देश के साथ इस पैरामीटर का अधिक लेना-देना है और वर्तमान में सीपीयू किस तरह से काम कर रहा है, इसके संदर्भ में उपयोगी होने के बजाय यह किस प्रोफाइल में है। वास्तविक परिचालन टेलीमेट्री के लिए मैं scaling_*कर्नेल ट्यूनबल्स का उपयोग करता हूं ।

उदाहरण

मैंने CPU स्क्रिप्ट को कॉलम-वार दिखाने के लिए निम्न स्क्रिप्ट को एक साथ रखा, ताकि यह देखना आसान हो जाए कि विभिन्न कर्नेल ट्यूब्स क्या दिखते हैं:

#!/bin/bash

nthCore=$(lscpu|grep node0|cut -d"-" -f2)

for i in /sys/devices/system/cpu/cpu0/cpufreq/{cpuinfo,scaling}_*; do
  pname=$(basename $i)
  [[ "$pname" == *available* ]] || [[ "$pname" == *transition* ]] || \
  [[ "$pname" == *driver* ]]    || [[ "$pname" == *setspeed* ]] && continue
  echo "$pname: "
  for j in `seq 0 $nthCore`;do
    kparam=$(echo $i | sed "s/cpu0/cpu$j/")
    sudo cat $kparam
  done
done | paste - - - - - | column -t

जब आप इसे चलाते हैं तो आपको निम्न आउटपुट मिलते हैं:

$ ./cpuinfo.bash
cpuinfo_cur_freq:  2667000   2667000   2667000   2667000
cpuinfo_max_freq:  2667000   2667000   2667000   2667000
cpuinfo_min_freq:  1199000   1199000   1199000   1199000
scaling_cur_freq:  2667000   2266000   1333000   2667000
scaling_governor:  ondemand  ondemand  ondemand  ondemand
scaling_max_freq:  2667000   2667000   2667000   2667000
scaling_min_freq:  1199000   1199000   1199000   1199000

आप देख सकते हैं कि scaling_cur_freqtunable कोर # 1 & 2 में मंदी दिखा रहा है।


अगर यह सच होता, तो /proc/cpuinfoरिपोर्ट जैसा नहीं होता cpuinfo_cur_freq? यह स्पष्ट रूप से नहीं करता है! मेरे सवाल का दिल अभी भी अनसुलझा है। मैंने इस उपकरण को उजागर किया जो किसी भी तरह "सही आवृत्ति" की रिपोर्ट करता है, लेकिन मुझे यकीन नहीं है कि यह सही तरीके से काम करता है। यह अपने एल्गोरिथ्म के लिए कुछ स्रोत प्रदान करता है, लेकिन वास्तव में विसंगति के लिए एक महान विवरण प्रदान नहीं करता है ।
वुल्फटोन

इस तरह की लाइनें /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freqअधिकतम गति दिखा रही हैं, भले ही उनका नाम वर्तमान गति हो, यह डिस्कनेक्ट है जिसके बारे में आप पूछ रहे हैं, है ना? मेरा सिस्टम उन्हें इस तरह भी दिखाता है।
slm

: यदि आप आवृत्ति स्केलिंग आप चालू कर दी है जब वास्तविक सीपीयू आवृत्तियों प्राप्त करने के लिए इस का उपयोग करना चाहिए/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
SLM

2
नोट: कर्नेल 4.13 के बाद से, cat /proc/cpuinfo | grep MHzवर्तमान घड़ी की गति को नहीं लौटाता है । कर्नेल बुगज़िला में, वे कहते हैं कि यह जानबूझकर है। Bugzilla.kernel.org/show_bug.cgi?id=197009 देखें । यह भी यहाँ उल्लेख किया गया है: phoronix.com/…
Marc.2377

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.