कैसे कमांड लाइन से खुफिया वास्तुकला परिवार का पता लगाने के लिए


28

मुझे प्रदर्शन की जाँच के लिए कुछ ज़ीयन मशीनों तक पहुँच मिलती है। मैं यह पता लगाना चाहता हूं कि वे किस आर्किटेक्चर का इस्तेमाल कर रहे हैं जैसे कि हैसवेल, सैंडब्रिज, आइवीब्रिज। क्या यह पता लगाने की आज्ञा है?


2
/proc/cpuinfoवास्तव में मॉडल जैसा नाम देता है Intel (R) blah blah blah GHz, आपको इसे सीधे गूगल करना चाहिए।
आर्थर

मैं वास्तुकला परिवार के लिए पूछ रहा था
एक उत्सुक इंजीनियर

1
मुझे नहीं लगता कि "आर्किटेक्चर परिवार" की सूचना है, वे सिर्फ व्यावसायिक नाम हैं। आपको मॉडल का नाम मिलता है /proc/cpuinfo, मुझे लगता है कि यह आपके लिए है कि आप इसी परिवार के नाम में अनुवाद करें।
गिल्स एसओ- बुराई को रोकें '

@Iwwanttocode आपको उन व्यावसायिक नामों को देखने के लिए किसी प्रकार की तालिका का उपयोग करना होगा।
आर्थर

जवाबों:


45

यह एक सस्ता काम है, लेकिन आप gcc से वह जानकारी प्राप्त कर सकते हैं! मैं समझाता हूँ: gcc -march विकल्प के साथ प्रत्येक उपप्रकार के लिए बायनेरिज़ को अनुकूलित करने में सक्षम है। इसके अलावा, यह आपका पता लगाने में सक्षम है और स्वचालित रूप से अपनी मशीन के लिए ऑप्टिमाइज़ करें -march = देशी मानकर ऐसा करने पर, आपको बस मार्च = देशी के साथ gcc को कॉल करना होगा और यह पूछना होगा कि यह किस झंडे का उपयोग करेगा: संक्षेप में

gcc -march=native -Q --help=target|grep march

मेरे लिए यह देता है

-march=                               bdver1

लेकिन मेरा पीसी एक एमड बुलडोजर प्रोसेसर के साथ चलता है


आपका समाधान प्रश्न का उत्तर देता है। इससे मेरा काम बनता है।
एजेएन

यह मेरे लिए काम नहीं करता क्योंकि यह broadwellबदले में लौटता है kabylake। यह शायद इसलिए है क्योंकि gcc का मेरा संस्करण असेंबली बनाते समय उन दो परिवारों को अलग नहीं करता है।
टायरो

gcc8 स्काइलेक की पहचान कर सकता है जबकि gcc5 वास्तव में ब्रॉडवेल के रूप में पहचान करता है।
एरिक

8

आप शायद ऐसा नहीं कर सकते क्योंकि वे व्यावसायिक बिक्री के लिए विपणन नाम हैं, न कि "तकनीकी" नाम।

हालाँकि, आप dmidecode से जो चाहें प्राप्त कर सकते हैं और फिर वाणिज्यिक परिवार का निर्धारण करने के लिए http://ark.intel.com (अपने Xeon प्रोसेसर के लिए) पर जाएँ।

[root@mediasrv ~]# dmidecode|grep -i intel
        Socket Designation: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
        Manufacturer: Intel
        Version: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz

उस आउटपुट से, मैं इंटेल की सन्दूक वेबसाइट पर जा सकता हूं और 3770 सीपीयू की खोज कर सकता हूं, जो मुझे बताएगा कि मेरे पास एक आइवी ब्रिज चिप है।


1
इसे एक स्क्रिप्ट के साथ स्वचालित करने के लिए मैं dmidecode या / proc / cpuinfo का उपयोग करता हूँ और इसे grep या awk या perl और विकिपीडिया पर xeon cpu सूची के मुद्रण योग्य संस्करण के साथ संयोजित करता हूं जो आपको कर्ल या wget पर मिलता है: en.wikipedia.org/ w /…
इरिक

5

नीचे एक bash स्क्रिप्ट है जो स्वचालित रूप से आपके CPU /proc/cpuinfoऔर https://ark.intel.com/ के आर्किटेक्चर कोड नाम का पता लगाता है । काम करने के लिए यह आवश्यक है कि आपके पास पिल्ला हो

मेरे कंप्यूटर पर कोड चलाने से मुझे निम्नलिखित परिणाम प्राप्त होंगे:

$ ./intel_codename
Processor name: i7-7700HQ
Kaby Lake

#!/bin/bash

set -euo pipefail

if [[ $# == 0 ]]; then
    modelname=$(cat /proc/cpuinfo | grep 'model name' | head -1)
    if ! grep Intel <<<"$modelname" > /dev/null; then
        echo "You don't seem to have an Intel processor" >&2
        exit 1
    fi

    name=$(sed 's/.*\s\(\S*\) CPU.*/\1/' <<<"$modelname")
    echo "Processor name: $name" >&2
else
    name=$1
fi

links=($(curl --silent "https://ark.intel.com/search?q=$name" | pup '.result-title a attr{href}'))

results=${#links[@]}
if [[ $results == 0 ]]; then
    echo "No results found" >&2
    exit 1
fi

link=${links[0]}
if [[ $results != 1 ]]; then
    echo "Warning: $results results found" >&2
    echo "Using: $link" >&2
fi

url="https://ark.intel.com$link"
codename=$(curl --silent "$url" | pup '.CodeNameText .value text{}' | xargs | sed 's/Products formerly //')

echo "$codename"

यह काम करता है और क्या @erik ने सुझाव दिया है!
पनयोटिस

5

यह डेटा PMU_NAME में संग्रहीत है, बस टाइप करें:

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