क्या /proc/cpuinfo
को पार्स करने के बजाए कुछ एपीआई या फ़ंक्शन द्वारा ऐसी जानकारी प्राप्त करना संभव है?लिनक्स पर सी में सीपीयू जानकारी कैसे प्राप्त करें, जैसे कि कोर की संख्या?
उत्तर
man 5 proc
से:
/proc/cpuinfo This is a collection of CPU and system architecture dependent items, for each supported architecture a different list. Two common entries are processor which gives CPU number and bogomips; a system constant that is calculated during kernel initialization. SMP machines have information for each CPU.
यहाँ नमूना कोड है कि पढ़ता है और सांत्वना देने की जानकारी, stolen from forums प्रिंट है - यह वास्तव में सिर्फ एक विशेष cat
आदेश है।
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
FILE *cpuinfo = fopen("/proc/cpuinfo", "rb");
char *arg = 0;
size_t size = 0;
while(getdelim(&arg, &size, 0, cpuinfo) != -1)
{
puts(arg);
}
free(arg);
fclose(cpuinfo);
return 0;
}
कृपया ध्यान दें कि आप पार्स और physical id
, core id
और cpu cores
एक सटीक परिणाम प्राप्त करने की तुलना करने, यदि आप वास्तव में बनाम सीपीयू कोर CPUs की संख्या के बारे में परवाह की जरूरत है। कृपया ध्यान दें कि अगर htt
flags
में है, तो आप एक हाइपर-थ्रेडिंग सीपीयू चला रहे हैं, जिसका अर्थ है कि आपका माइलेज भिन्न हो सकता है।
कृपया यह भी ध्यान दें कि यदि आप वर्चुअल मशीन में अपना कर्नेल चलाते हैं, तो आप केवल वीएम अतिथि को समर्पित सीपीयू कोर देखते हैं।
उत्सुक प्रश्न। इस फ़ाइल को कौन अपडेट करता है? – Laz
@ रामबैट - यह सामान्य अर्थ में _file_ नहीं है। विकिपीडिया [procfs के बारे में आलेख] देखें (http://en.wikipedia.org/wiki/Procfs) – Kimvais
मुझे यह आलेख बहुत उपयोगी लगता है,/proc/cpuinfo फ़ाइल को समझने के संदर्भ में - http: //www.richweb। com/cpu_info – warunapww
पढ़ें /proc/cpuinfo
नमूना आउटपुट
processor : 0
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
processor : 1
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 4
processor : 2
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 2
cpu cores : 4
processor : 3
model name : Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
cache size : 6144 KB
physical id : 0
siblings : 4
core id : 3
cpu cores : 4
show_cpuinfo समारोह जो वास्तव में /proc/cpuinfo
कार्यक्षमता लागू करता
पार्स फ़ाइल/proc/cpuinfo है। यह आपको सीपीयू के बारे में बहुत सारी जानकारी देगा। प्रासंगिक फ़ील्ड को अपनी सी/सी ++ फ़ाइल में निकालें।
क्या आपने कभी इस शेल कमांड "बिल्ली/proc/cpuinfo" के आउटपुट को देखा है? मुझे लगता है कि आपको वहां की सारी जानकारी मिल सकती है। सी प्रोग्राम में जानकारी को पढ़ने के लिए मैं फ़ाइल मैनिपुलेशन फ़ंक्शंस जैसे फॉपेन, फ़ेट्स और अन्य पसंद करूंगा।
libcpuid
एक साधारण एपीआई प्रदान करता है जो कोर की संख्या सहित सभी सीपीयू सुविधाओं को सीधे वापस कर देगा। कार्यावधि में कोर की संख्या पाने के लिए आपको कुछ इस तरह कर सकता है: अपने स्रोत कोड में
#include <stdio.h>
#include <libcpuid.h>
int main(void)
{
if (!cpuid_present()) {
printf("Sorry, your CPU doesn't support CPUID!\n");
return -1;
}
struct cpu_raw_data_t raw;
struct cpu_id_t data;
if (cpuid_get_raw_data(&raw) < 0) {
printf("Sorry, cannot get the CPUID raw data.\n");
printf("Error: %s\n", cpuid_error());
return -2;
}
if (cpu_identify(&raw, &data) < 0) {
printf("Sorrry, CPU identification failed.\n");
printf("Error: %s\n", cpuid_error());
return -3;
}
printf("Processor has %d physical cores\n", data.num_cores);
return 0;
}
लाइब्रेरी ने मेरे लिनक्स बॉक्स पर आउट-ऑफ-द-बॉक्स संकलित नहीं किया था। – Kimvais
@ किमवाइस: मैं बस इतना कह सकता हूं कि यह मेरे लिए काम करता है। – talonmies
हां, वास्तव में समस्या निवारण नहीं किया गया था, बस 'कॉन्फ़िगर करें && && sudo इंस्टॉल करें' और असफल हो गया है, कुछ सचमुच सरल हो सकता है :) – Kimvais
जोड़ें निम्नलिखित लाइन ..
system("cat /proc/cpuinfo | grep processor | wc -l");
यह आपके सिस्टम में CPUs की संख्या प्रिंट होगा। और यदि आप इस सिस्टम के इस आउटपुट का उपयोग अपने प्रोग्राम में पॉपन सिस्टम कॉल का उपयोग करने के बजाय करना चाहते हैं।
नहीं, यह नहीं है, यह हाइपरथ्रेड भी गिना जाएगा, कृपया पढ़ें - http:/विस्तृत जानकारी डीकोडिंग/proc/cpuinfo फ़ाइल के लिए /www.richweb.com/cpu_info। – warunapww
नहीं, यह नहीं है। या तो आपको cpuinfo फ़ाइल को पार्स करना होगा, या कुछ लाइब्रेरी आपके लिए यह करेगी।
लिनक्स के आपके स्वाद के आधार पर आपको/proc/cpuid से अलग-अलग परिणाम मिलेंगे।
यह कोरस की कुल संख्या प्राप्त करने के लिए सेंटोस पर मेरे लिए काम करता है।
cat /proc/cpuinfo | grep -w cores | sed -e 's/\t//g' | awk '{print $3}' | xargs | sed -e 's/\ /+/g' | bc
यह उबंटू में भी काम नहीं करता है। उबंटू के लिए आप निम्न आदेश का उपयोग कर सकते हैं।
nproc
'बिल्ली' का बेकार उपयोग। निम्नलिखित ठीक काम करेंगे: 'grep-m1 "कोर"/proc/cpuinfo | tr -d '[a-z]: [: space:]' – Yokai
आप ज्यादातर linux distro
के सभी प्रकार के लिए इसका उपयोग कर सकते सी कोड
num_cpus = sysconf(_SC_NPROCESSORS_ONLN);
के लिए (QNX प्रणाली में, आप num_cpus = sysinfo_numcpu()
उपयोग कर सकते हैं)
शेल पटकथा लेखन के लिए, आप cat /proc/cpuinfo
का उपयोग कर सकते हैं याका उपयोग कर सकते हैंया nproc
लिनक्स
के संभावित डुप्लिकेट [मैं सी/लिनक्स पर प्रोसेसर की संख्या कैसे प्राप्त करूं?] (Http://stackoverflow.com/questions/2693948/how-do-i-retrieve-the- संख्या-के-प्रोसेसर-ऑन-सी-लिनक्स) –