2011-09-01 23 views
6

पता चला कि मैंने आज सुबह यह पता लगाने की कोशिश की कि प्रोसेसर आईडी हाइपर-थ्रेडेड कोर है, लेकिन बिना किस्मत के।लिनक्स हाइपर-थ्रेडेड कोर आईडी

मैं इस जानकारी को जानना चाहता हूं और set_affinity() का उपयोग अपने प्रदर्शन को प्रोफाइल करने के लिए हाइपर-थ्रेडेड थ्रेड या गैर-हाइपर-थ्रेडेड थ्रेड की प्रक्रिया को बांधने के लिए करता हूं।

+0

आमतौर पर या तो सभी कोर हाइपरथ्रेड होते हैं या कोई कोर नहीं होता है। या मैं इस धारणा के बारे में गलत हूँ? – knittl

+0

हां, यदि एचटी सक्षम है, तो प्रत्येक भौतिक कोर में 2 थ्रेड (1 भौतिक + 1 एचटी) होगा। सॉफ़्टवेयर में, दोनों धागे का इलाज समान होता है, लेकिन उनके पास अलग प्रोसेसर आईडी (लिनक्स में) होगी। मैं यह जानना चाहता हूं कि कौन सी आईडी भौतिक धागे से संबंधित है, और जो एचटी थ्रेड से संबंधित है। – Patrick

+0

आपका सीपीयू क्या है? पी 4 या कोर 2 या कोरि 7 या एटम? – osgx

उत्तर

22

मैंने जो कुछ भी मुझे चाहिए, उसे करने के लिए बस चाल की खोज की।

cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list 

पहले नंबर (इस उदाहरण में 0) सीपीयू संख्या के बराबर है, तो यह एक वास्तविक मूल है नहीं तो यह एक हाइपरथ्रेडिंग मूल है।

रियल कोर उदाहरण:

# cat /sys/devices/system/cpu/cpu1/topology/thread_siblings_list 
1,13 

Hyperthreading कोर उदाहरण

# cat /sys/devices/system/cpu/cpu13/topology/thread_siblings_list 
1,13 

दूसरे उदाहरण के उत्पादन में वास्तव में पहले एक के समान है। हालांकि हम cpu13 देख रहे हैं, और पहला नंबर 1 है, इसलिए सीपीयू 13 यह एक हाइपरथ्रेडिंग कोर है।

+0

ज़ेन हाइपरवाइजर पर मेरे लिए काम नहीं करता है: ls -l cpu0/topology/ कुल 0 ----- uname -a: Linux XXXX 2.6.18-128.2.1.4.37.el5xen # 1 एसएमपी शनि अप्रैल 9 05 : 30: 32 ईडीटी 2011 i686 i686 i386 जीएनयू/लिनक्स –

+0

@ जोकासडोन्टे अतिथि को आपने कितने कोर दिए? – Patrick

+0

विंडोज़ पर कुछ संभव बनाना संभव है? – qub1n

11

एचटी सममित है (मूल संसाधनों के संदर्भ में, सिस्टम मोड असममित हो सकता है)।

तो, यदि एचटी चालू है, तो भौतिक कोर के बड़े संसाधन दो धागे के बीच साझा किए जाएंगे। दोनों धागे की स्थिति को बचाने के लिए कुछ अतिरिक्त हार्डवेयर चालू हैं। दोनों धागे भौतिक कोर के लिए सममित पहुंच है।

एचटी-अक्षम कोर और एचटी-सक्षम कोर के बीच एक अंतर है; लेकिन एचटी-सक्षम कोर के पहले भाग और एचटी-सक्षम कोर के दूसरे भाग के बीच कोई अंतर नहीं है।

समय के एक पल में, एक एचटी-थ्रेड अन्य संसाधनों का उपयोग अन्य संसाधनों से कर सकता है, लेकिन यह संसाधन संतुलन गतिशील है। सीपीयू थ्रेड को संतुलित कर देगा जैसा कि यह कर सकता है और जैसा कि यह चाहता है कि दोनों थ्रेड एक ही संसाधन का उपयोग करना चाहते हैं। आप केवल एक थ्रेड में rep nop या pause कर सकते हैं ताकि सीपीयू अन्य थ्रेड को अधिक संसाधन दे सके।

मैं इस जानकारी को ढूंढना चाहता हूं और इसके प्रदर्शन को प्रोफाइल करने के लिए हाइपर-थ्रेडेड थ्रेड या गैर-हाइपर-थ्रेडेड थ्रेड की प्रक्रिया को बाध्य करने के लिए set_affinity() का उपयोग करना चाहता हूं।

ठीक है, आप वास्तव में किसी तथ्य को जानने के बिना प्रदर्शन को माप सकते हैं। बस एक प्रोफ़ाइल करें जब सिस्टम में एकमात्र धागा CPU0 से बंधे हों; और जब इसे CPU1 से बांध दिया जाता है तो इसे दोहराएं। मुझे लगता है, परिणाम लगभग समान होंगे (ओएस शोर उत्पन्न कर सकता है अगर यह CPU0 में कुछ इंटरप्ट्स को बाध्य करता है, तो परीक्षण करते समय इंटरप्ट की संख्या कम करने का प्रयास करें और यदि आपके पास ऐसा है तो CPU2 और CPU3 का उपयोग करने का प्रयास करें)।

पुनश्च

Agner जब आप हिंदुस्तान टाइम्स उपयोग नहीं करना चाहते मामले में recommends to use even-numbered cores (वह 86 में गुरु है), लेकिन यह BIOS में सक्षम है:

हाइपरथ्रेडिंग का पता चला है तो ताला केवल संख्यात्मक लॉजिकल प्रोसेसर का उपयोग करने की प्रक्रिया। यह प्रत्येक प्रोसेसर कोर निष्क्रिय में दो धागे में से एक बना देगा ताकि संसाधनों के लिए कोई विवाद न हो।

पी पी एस के बारे में नई-पुनर्जन्म हिंदुस्तान टाइम्स (नहीं एक पी 4 एक है, लेकिन Nehalem और सैंडी) - माइक्रोआर्किटेक्चर पर Agner के अनुसंधान के आधार पर

नए बाधाओं कि सैंडी ब्रिज में ध्यान देने की जरूरत निम्नलिखित हैं: ... 5. धागे के बीच संसाधनों का साझा करना। हाइपरथ्रेडिंग चालू होने पर कोर के दो थ्रेड के बीच कई महत्वपूर्ण संसाधन साझा किए जाते हैं। को हाइपरथ्रेडिंग से बंद करना बुद्धिमान हो सकता है जब एकाधिक थ्रेड एक ही निष्पादन संसाधनों पर निर्भर करते हैं।

...

एक आधे रास्ते समाधान तथाकथित हाइपरथ्रेडिंग प्रौद्योगिकी के साथ नेटबर्स्ट में और फिर Nehalem और सैंडी ब्रिज में शुरू की गई थी।हाइपरथ्रेडिंग प्रोसेसर में दो लॉजिकल प्रोसेसर समान निष्पादन कोर साझा करते हैं। इसका लाभ सीमित है यदि दो धागे समान संसाधनों के लिए प्रतिस्पर्धा करते हैं, लेकिन प्रदर्शन कुछ अन्य चीज़ों जैसे सीमित स्मृति जैसे सीमित है, तो हाइपरथ्रेडिंग काफी फायदेमंद हो सकती है।

...

दोनों इंटेल और एएमडी संकर समाधान जहां कुछ या निष्पादन इकाइयों के सभी (इंटेल शब्दावली में हाइपरथ्रेडिंग) दो प्रोसेसर कोर के बीच साझा कर रहे हैं कर रहे हैं।

PPPS: Intel Optimization book lists resource sharing in second-generation HT: (पेज 93, इस सूची में Nehalem के लिए है, लेकिन सैंडी अनुभाग में इस सूची का कोई परिवर्तन नहीं हुआ है)

गहरा बफरिंग और बढ़ाया संसाधन साझा करने/विभाजन नीतियों:

  • - हिंदुस्तान टाइम्स आपरेशन के लिए दोहराया संसाधन: रजिस्टर राज्य का नाम बदल वापसी ढेर बफर, मेरे द्वारा बड़े पेज ITLB // टिप्पणी: इस HW के 2 सेट हैं
  • - एचटी ऑपरेशन के लिए विभाजित संसाधन: लोड बफर, स्टोर बफर, बफर फिर से ऑर्डर करें, छोटे-पेज आईटीएलबी को दो लॉजिकल प्रोसेसर के बीच आवंटित किया जाता है। // मेरे द्वारा टिप्पणी: इस एचडब्ल्यू का एक सेट है; यह दो एचटी-वर्चुअल कोरों के बीच दो छमाही
  • - एचटी ऑपरेशन के दौरान प्रतिस्पर्धात्मक रूप से साझा संसाधन: आरक्षण स्टेशन, कैश पदानुक्रम, भरने वाले बफर, डीटीएलबी 0 और एसटीएलबी दोनों के बीच स्थिर रूप से विभाजित है। // टिप्पणी: एकल सेट, लेकिन आधा में विभाजित नहीं है। सीपीयू गतिशील रूप से संसाधनों को फिर से जीवंत करेगा।
  • - एचटी ऑपरेशन के दौरान वैकल्पिक: फ्रंट-एंड ऑपरेशन आमतौर पर निष्पक्षता सुनिश्चित करने के लिए दो लॉजिकल प्रोसेसर के बीच को वैकल्पिक करता है। // टिप्पणी: एकल फ्रंटेंड (निर्देश डिकोडर) है, इसलिए थ्रेड को क्रमशः डीकोड किया जाएगा: 1, 2, 1, 2.
  • - एचटी अनजान संसाधन: निष्पादन इकाइयां। // टिप्पणी: वास्तविक एचडब्ल्यू डिवाइस हैं जो कम्प्यूटेशंस, मेमोरी एक्सेस करेंगे। केवल एक सेट है। यदि धागे में से एक बहुत निष्पादन इकाइयों का उपयोग करने में सक्षम है और यदि इसकी कम संख्या में स्मृति प्रतीक्षा है, तो यह सभी निष्पादन इकाइयों का उपभोग करेगा और दूसरा थ्रेड प्रदर्शन कम होगा (लेकिन एचटी कभी-कभी दूसरे थ्रेड पर स्विच करेगा। कितनी बार? ??)। यदि दोनों धागे भारी-अनुकूलित नहीं हैं और/या स्मृति की प्रतीक्षा है, तो निष्पादन इकाइयों को दो धागे के बीच विभाजित किया जाएगा।

पृष्ठ 112 (चित्रा 2-13) पर भी चित्र हैं, जो दिखाता है कि दोनों लॉजिकल कोर सममित हैं।तथ्य यह है कि ऑपरेटिंग सिस्टम और उपयोगकर्ता कार्यक्रमों प्रत्येक भौतिक में तार्किक प्रोसेसर पर एक साथ निष्पादित करने के लिए प्रक्रियाओं या धागे निर्धारित कर सकते हैं •

  • :

    हिंदुस्तान टाइम्स प्रौद्योगिकी की वजह से प्रदर्शन क्षमता की वजह से है प्रोसेसर

  • • उच्च स्तर पर ऑन-चिप निष्पादन संसाधनों का उपयोग करने की क्षमता केवल एकल थ्रेड निष्पादन संसाधनों का उपभोग कर रही है; संसाधन उपयोग के उच्च स्तर उच्च प्रणाली throughput

को जन्म दे सकता है दो कार्यक्रमों या दो धागे से होने वाले निर्देशों का निष्पादन कोर और मेमोरी पदानुक्रम, सामने अंत में कार्यक्रम के क्रम में एक साथ और जरूरी नहीं कि निष्पादित और बैक एंड में दो लॉजिकल प्रोसेसर से निर्देशों के बीच चयन करने के लिए कई चयन बिंदु शामिल हैं। सभी चयन बिंदु के बीच दो लॉजिकल प्रोसेसर के बीच वैकल्पिक होते हैं जब तक कि एक लॉजिकल प्रोसेसर पाइपलाइन चरण का उपयोग नहीं कर सकता। इस मामले में, अन्य लॉजिकल प्रोसेसर में पाइपलाइन चरण के प्रत्येक चक्र का पूरा उपयोग होता है। एक लॉजिकल प्रोसेसर एक पाइपलाइन चरण का उपयोग क्यों नहीं कर सकता है, इसमें कैश मिस, शाखा गलतफहमी, और निर्देश निर्भरता शामिल हैं।

+0

पर कोर i7 है आपने कुछ भी कहने के बिना इतना कुछ कहा। – suprjami

+0

मैंने सही उत्तर उखाड़ फेंका। – suprjami

+0

इसे सही उत्तर के रूप में चिह्नित किया गया है, स्क्रॉल करें और बड़े हरे रंग की टिक देखें। – suprjami

0

मैंने कोर के तापमान की तुलना करके और एचटी कोर पर लोड करके जानकारी को सत्यापित करने का प्रयास किया।

enter image description here

+2

आपकी विधि अजीब है और काम नहीं कर सकती है। Hwloc आज़माएं: http://www.open-mpi.org/projects/hwloc/ इसमें Win32 और win64 प्रकार – osgx

2

वहाँ सार्वभौमिक (लिनक्स/विंडोज) और पोर्टेबल HW टोपोलॉजी डिटेक्टर है (कोर, हिंदुस्तान टाइम्स, cacahes, दक्षिण पुलों और डिस्क/नेट कनेक्शन इलाके) - hwloc openmpi परियोजना द्वारा। आप इसका उपयोग कर सकते हैं, क्योंकि लिनक्स विभिन्न एचटी कोर नंबरिंग नियमों का उपयोग कर सकता है, और हम नहीं जानते कि यह भी/विषम या वाई और वाई + 8 न्यूबियरिंग नियम होगा।hwloc की

होम पेज: http://www.open-mpi.org/projects/hwloc/

डाउनलोड पेज: http://www.open-mpi.org/software/hwloc/v1.10/

विवरण:

पोर्टेबल हार्डवेयर स्थान (hwloc) सॉफ्टवेयर पैकेज एक पोर्टेबल अमूर्त (ओएस भर में प्रदान करता है, संस्करणों , आर्किटेक्चर, ...) आधुनिक आर्किटेक्चर के पदानुक्रमित टोपोलॉजी के, जिसमें NUMA मेमोरी नोड्स, सॉकेट, साझा कैश, कोर और एक साथ मल्टीथ्रेडिंग शामिल हैं। यह विभिन्न सिस्टम विशेषताओं जैसे कैश और मेमोरी सूचना के साथ-साथ आई/ओ उपकरणों जैसे नेटवर्क इंटरफेस, इन्फिनीबैंड एचसीए या जीपीयू के इलाके को भी इकट्ठा करता है। इसका मुख्य उद्देश्य आधुनिक कंप्यूटिंग हार्डवेयर के बारे में जानकारी इकट्ठा करने में अनुप्रयोगों की सहायता करना है ताकि इसे तदनुसार और कुशलतापूर्वक उपयोग किया जा सके।

यह

ubuntu$ sudo apt-get hwloc 
ubuntu$ lstopo 

lstopo from hwloc (OpenMPI) - output example

की तरह या पाठ के रूप में ग्राफिक रूप में hw टोपोलॉजी पाने के लिए lstopo आदेश दिया गया है:

ubuntu$ sudo apt-get hwloc-nox 
ubuntu$ lstopo --of console 

हम Core L#x प्रत्येक के रूप में भौतिक कोर देख सकते हैं दो लॉजिकल कोर PU L#y और PU L#y+8

Machine (16GB) 
    Socket L#0 + L3 L#0 (4096KB) 
    L2 L#0 (1024KB) + L1 L#0 (16KB) + Core L#0 
     PU L#0 (P#0) 
     PU L#1 (P#8) 
    L2 L#1 (1024KB) + L1 L#1 (16KB) + Core L#1 
     PU L#2 (P#4) 
     PU L#3 (P#12) 
    Socket L#1 + L3 L#1 (4096KB) 
    L2 L#2 (1024KB) + L1 L#2 (16KB) + Core L#2 
     PU L#4 (P#1) 
     PU L#5 (P#9) 
    L2 L#3 (1024KB) + L1 L#3 (16KB) + Core L#3 
     PU L#6 (P#5) 
     PU L#7 (P#13) 
    Socket L#2 + L3 L#2 (4096KB) 
    L2 L#4 (1024KB) + L1 L#4 (16KB) + Core L#4 
     PU L#8 (P#2) 
     PU L#9 (P#10) 
    L2 L#5 (1024KB) + L1 L#5 (16KB) + Core L#5 
     PU L#10 (P#6) 
     PU L#11 (P#14) 
    Socket L#3 + L3 L#3 (4096KB) 
    L2 L#6 (1024KB) + L1 L#6 (16KB) + Core L#6 
     PU L#12 (P#3) 
     PU L#13 (P#11) 
    L2 L#7 (1024KB) + L1 L#7 (16KB) + Core L#7 
     PU L#14 (P#7) 
     PU L#15 (P#15) 
2

मुझे आश्चर्य है कि किसी ने अभी तक lscpu का उल्लेख नहीं किया है। यहाँ चार शारीरिक कोर और हाइपर-थ्रेडिंग के साथ एक एकल सॉकेट सिस्टम पर एक उदाहरण सक्षम है:

$ lscpu -p 
# The following is the parsable format, which can be fed to other 
# programs. Each different item in every column has an unique ID 
# starting from zero. 
# CPU,Core,Socket,Node,,L1d,L1i,L2,L3 
0,0,0,0,,0,0,0,0 
1,1,0,0,,1,1,1,0 
2,2,0,0,,2,2,2,0 
3,3,0,0,,3,3,3,0 
4,0,0,0,,0,0,0,0 
5,1,0,0,,1,1,1,0 
6,2,0,0,,2,2,2,0 
7,3,0,0,,3,3,3,0 

उत्पादन बताते आईडी की तालिका व्याख्या करने के लिए कैसे; एक ही कोर आईडी के साथ लॉजिकल सीपीयू आईडी भाई बहन हैं।

+0

है लेकिन कौन सा भाई एचटी कोर है? –

+1

वे सहकर्मी हैं, एक मूल कोर और द्वितीय श्रेणी "हाइपरथ्रेड" कोर नहीं है। –