कोर 2 सीपीयू पावर स्टेट्स (" सी-स्टेट्स ") पर शोध करते हुए , मैं वास्तव में अधिकांश इंटेलिजेंट इंटेल कोर / पीसी प्रोसेसर के लिए समर्थन को लागू करने में कामयाब रहा। सभी पृष्ठभूमि की जानकारी के साथ पूर्ण कार्यान्वयन (लिनक्स पैच) यहां प्रलेखित है।
जैसा कि मैंने इन प्रोसेसर के बारे में अधिक जानकारी जमा की है, यह स्पष्ट होने लगा कि कोर 2 मॉडल (एस) में समर्थित सी-स्टेट्स पहले और बाद के दोनों प्रोसेसर की तुलना में कहीं अधिक जटिल हैं। इन्हें एन्हांस्ड सी-स्टेट्स (या " CxE ") के रूप में जाना जाता है , जिसमें चिपसेट पर पैकेज, व्यक्तिगत कोर और अन्य घटक शामिल होते हैं (जैसे, मेमोरी)। जिस समय intel_idle
ड्राइवर को छोड़ा गया था, कोड विशेष रूप से परिपक्व नहीं था और कई कोर 2 प्रोसेसर जारी किए गए थे जिनमें परस्पर विरोधी सी-स्टेट समर्थन था।
कोर 2 सोलो / डुओ सी-राज्य समर्थन पर कुछ सम्मोहक जानकारी 2006 से इस लेख में पाई गई थी । यह विंडोज पर समर्थन के संबंध में है, हालांकि यह इन प्रोसेसर पर मजबूत हार्डवेयर सी-स्टेट समर्थन का संकेत देता है। Kentsfield के बारे में जानकारी वास्तविक मॉडल संख्या के साथ संघर्ष करती है, इसलिए मेरा मानना है कि वे वास्तव में नीचे एक यॉर्कफील्ड का उल्लेख कर रहे हैं:
... क्वाड-कोर इंटेल कोर 2 एक्सट्रीम (Kentsfield) प्रोसेसर सभी पांच प्रदर्शन और बिजली बचत प्रौद्योगिकियों का समर्थन करता है - उन्नत इंटेल स्पीडस्टेप (ईआईएसटी), थर्मल मॉनिटर 1 (टीएम 1) और थर्मल मॉनिटर 2 (टीएम 2), पुरानी ऑन-डिमांड घड़ी मॉड्यूलेशन (ODCM), साथ ही एन्हांस्ड C स्टेट्स (CxE)। इंटेल पेंटियम 4 और पेंटियम डी 600, 800, और 900 प्रोसेसर की तुलना में, जो केवल एन्हांस्ड हॉल्ट (C1) स्टेट की विशेषता है, इस फ़ंक्शन को इंटेल कोर 2 प्रोसेसर (और साथ ही इंटेल कोर सोलो / डुओ प्रोसेसर) में विस्तारित किया गया है। स्टॉप ग्रांट (C2), डीप स्लीप (C3), और डीपर स्लीप (C4) सहित एक प्रोसेसर के सभी संभव निष्क्रिय राज्य।
2008 का यह लेख मल्टी-कोर इंटेल प्रोसेसर पर प्रति-कोर सी-स्टेट्स के लिए समर्थन का समर्थन करता है, जिसमें कोर 2 डुओ और कोर 2 क्वाड शामिल हैं ( डेल से इस श्वेत पत्र में अतिरिक्त सहायक पृष्ठभूमि पठन पाया गया ):
एक कोर सी-स्टेट एक हार्डवेयर सी-स्टेट है। कई मुख्य निष्क्रिय अवस्थाएँ हैं, जैसे CC1 और CC3। जैसा कि हम जानते हैं, आधुनिक प्रोसेसर की एक आधुनिक अवस्था में कई कोर होते हैं, जैसे कि हाल ही में जारी कोर डुओ T5000 / T7000 मोबाइल प्रोसेसर, जिसे कुछ सर्कल में पेन्री के रूप में जाना जाता है। हम सीपीयू / प्रोसेसर के रूप में क्या सोचते थे, वास्तव में इसके पक्ष में कई सामान्य उद्देश्य सीपीयू हैं। इंटेल कोर डुओ में प्रोसेसर चिप में 2 कोर हैं। Intel Core-2 Quad में 4 ऐसे कोर प्रति प्रोसेसर चिप है। इनमें से प्रत्येक कोर की अपनी निष्क्रिय अवस्था है। इसका मतलब यह है कि एक कोर निष्क्रिय हो सकता है जबकि दूसरा एक थ्रेड पर काम करने में कठिन है। तो एक कोर सी-स्टेट उन कोर में से एक का निष्क्रिय राज्य है।
मुझे इंटेल से 2010 की प्रस्तुति मिली जो intel_idle
ड्राइवर के बारे में कुछ अतिरिक्त पृष्ठभूमि प्रदान करती है , लेकिन दुर्भाग्य से कोर 2 के लिए समर्थन की कमी की व्याख्या नहीं करता है:
यह EXPERIMENTAL ड्राइवर इंटेल एटम प्रोसेसर, इंटेल कोर i3 / i5 / i7 प्रोसेसर और संबंधित इंटेल Xeon प्रोसेसर पर acpi_idle को सुपरकोड करता है। यह Intel Core2 प्रोसेसर या उससे पहले का समर्थन नहीं करता है।
उपरोक्त प्रस्तुति इंगित करती है कि intel_idle
ड्राइवर "मेनू" सीपीयू गवर्नर का कार्यान्वयन है, जिसका लिनक्स कर्नेल कॉन्फ़िगरेशन (यानी, CONFIG_CPU_IDLE_GOV_LADDER
बनाम CONFIG_CPU_IDLE_GOV_MENU
) पर प्रभाव पड़ता है । सीढ़ी और मेनू के राज्यपालों के बीच अंतर इस उत्तर में स्पष्ट रूप से वर्णित हैं ।
डेल में एक उपयोगी लेख है जो C-C C से C6 संगतता को सूचीबद्ध करता है:
मूल रूप से सीपीयू के अंदर उपयोग किए जाने वाले घड़ी संकेतों को काटकर मोड्स सी 1 से सी 3 तक काम करते हैं, जबकि सीपीयू वोल्टेज को कम करके सी 4 से सी 6 काम करते हैं। "संवर्धित" मोड एक ही समय में दोनों कर सकते हैं।
Mode Name CPUs
C0 Operating State All CPUs
C1 Halt 486DX4 and above
C1E Enhanced Halt All socket LGA775 CPUs
C1E — Turion 64, 65-nm Athlon X2 and Phenom CPUs
C2 Stop Grant 486DX4 and above
C2 Stop Clock Only 486DX4, Pentium, Pentium MMX, K5, K6, K6-2, K6-III
C2E Extended Stop Grant Core 2 Duo and above (Intel only)
C3 Sleep Pentium II, Athlon and above, but not on Core 2 Duo E4000 and E6000
C3 Deep Sleep Pentium II and above, but not on Core 2 Duo E4000 and E6000; Turion 64
C3 AltVID AMD Turion 64
C4 Deeper Sleep Pentium M and above, but not on Core 2 Duo E4000 and E6000 series; AMD Turion 64
C4E/C5 Enhanced Deeper Sleep Core Solo, Core Duo and 45-nm mobile Core 2 Duo only
C6 Deep Power Down 45-nm mobile Core 2 Duo only
इस तालिका से (जो मुझे बाद में कुछ मामलों में गलत लगा), ऐसा प्रतीत होता है कि कोर 2 प्रोसेसर के साथ सी-स्टेट समर्थन में कई प्रकार के अंतर थे (ध्यान दें कि कोर को छोड़कर लगभग सभी कोर 2 प्रोसेसर सॉकेट LGA775 हैं 2 सोलो SU3500, जो सॉकेट BGA956 और मेरोम / पेनी प्रोसेसर है। "Intel Core" सोलो / डुओ प्रोसेसर सॉकेट PBGA479 या PPGA478 में से एक हैं)।
इस आलेख में तालिका के लिए एक अतिरिक्त अपवाद पाया गया था :
इंटेल का कोर 2 डुओ ई 8500 सी-स्टेट्स सी 2 और सी 4 का समर्थन करता है, जबकि कोर 2 एक्सट्रीम क्यूएक्स 9650 नहीं करता है।
दिलचस्प है, QX9650 एक यॉर्कफील्ड प्रोसेसर (इंटेल परिवार 6, मॉडल 23, 6 कदम) है। संदर्भ के लिए, मेरा Q9550S इंटेल परिवार 6, मॉडल 23 (0x17) है, 10 कदम है, जो कथित तौर पर सी-स्टेट सी 4 (प्रयोग के माध्यम से पुष्टि) का समर्थन करता है। इसके अतिरिक्त, कोर 2 सोलो U3500 में Q9550S के लिए एक समान CPUID (परिवार, मॉडल, कदम) है, लेकिन एक गैर-LGA775 सॉकेट में उपलब्ध है, जो उपरोक्त तालिका की व्याख्या को भ्रमित करता है।
स्पष्ट रूप से, प्रोसेसर के इस मॉडल के लिए सी-स्टेट समर्थन की पहचान करने के लिए और कुछ मामलों में अपर्याप्त (इस समय अनिर्धारित) हो सकता है, सीपीयूआईडी का उपयोग कम से कम कदम के लिए किया जाना चाहिए।
CPU निष्क्रिय जानकारी प्रदान करने के लिए विधि हस्ताक्षर है:
#define ICPU(model, cpu) \
{ X86_VENDOR_INTEL, 6, model, X86_FEATURE_ANY, (unsigned long)&cpu }
अस्म / बुद्धि-परिवारmodel
में कहाँ सम्मिलित है । इस हेडर फ़ाइल की जांच करते हुए, मैं देखता हूं कि इंटेल सीपीयू को 8-बिट आइडेंटिफ़ायर असाइन किए गए हैं जो इंटेल परिवार 6 मॉडल नंबर से मेल खाते हैं:
#define INTEL_FAM6_CORE2_PENRYN 0x17
ऊपर से, हमारे पास Intel परिवार 6, मॉडल 23 (0x17) के रूप में परिभाषित किया गया है INTEL_FAM6_CORE2_PENRYN
। यह मॉडल 23 प्रोसेसर के अधिकांश के लिए निष्क्रिय राज्यों को परिभाषित करने के लिए पर्याप्त होना चाहिए, लेकिन संभवतः जैसा कि ऊपर उल्लेख किया गया है, QX9650 के साथ समस्या पैदा कर सकता है।
इसलिए, न्यूनतम, प्रोसेसर के प्रत्येक समूह के पास एक अलग सी-राज्य सेट है जिसे इस सूची में परिभाषित किया जाना चाहिए।
ज़ागैकी और पोन्नाला, इंटेल टेक्नोलॉजी जर्नल 12 (3): 219-227, 2008 इंगित करता है कि यॉर्कफील्ड प्रोसेसर वास्तव में सी 2 और सी 4 का समर्थन करते हैं। वे यह भी इंगित करते हैं कि ACPI 3.0a विनिर्देश सी-राज्यों C0, C1, C2 और C3 के बीच संक्रमणों का समर्थन करता है, जो मैं मानता हूँ कि acpi_idle
सी-स्टेट्स के सीमित सेट के बीच लिनक्स ड्राइवर को संक्रमणों तक सीमित कर सकता है। हालाँकि, यह आलेख बताता है कि हमेशा ऐसा नहीं हो सकता है:
ध्यान रखें कि एसीपीआई सी राज्य है, प्रोसेसर एक नहीं, इसलिए एसीपीआई सी 3 एचडब्ल्यू सी 6, आदि हो सकता है।
नोट का भी:
प्रोसेसर से परे, चूंकि C4 प्लेटफ़ॉर्म में प्रमुख सिलिकॉन घटकों के बीच एक समन्वित प्रयास है, इंटेल Q45 एक्सप्रेस चिपसेट 28 प्रतिशत बिजली सुधार प्राप्त करता है।
मैं जिस चिपसेट का उपयोग कर रहा हूं वह वास्तव में एक इंटेल Q45 एक्सप्रेस चिपसेट है।
MWAIT राज्यों पर इंटेल प्रलेखन संक्षिप्त लेकिन पुष्टि BIOS विशेष ACPI व्यवहार है:
MWAIT एक्सटेंशन में परिभाषित प्रोसेसर-विशिष्ट सी-राज्य ACPI परिभाषित सी-स्टेट प्रकार (C0, C1, C2, C3) पर मैप कर सकते हैं। मैपिंग संबंध प्रोसेसर कार्यान्वयन द्वारा सी-स्टेट की परिभाषा पर निर्भर करता है और एसीपीआई परिभाषित _CST तालिका का उपयोग करके BIOS द्वारा OSPM के संपर्क में है।
उपरोक्त तालिका की मेरी व्याख्या ( विकिपीडिया , asm / Intel-family.h और उपरोक्त लेखों की तालिका के साथ संयुक्त है ):
मॉडल 9 0x09 ( पेंटियम एम और सेलेरॉन एम ):
- बनिया: सी 0, सी 1, सी 2, सी 3, सी 4
मॉडल 13 0x0D ( पेंटियम एम और सेलेरॉन एम ):
- दोथन, स्टीली: C0, C1, C2, C3, C4
मॉडल 14 0x0E INTEL_FAM6_CORE_YONAH ( संवर्धित पेंटियम एम , एन्हांस्ड सेलेरॉन एम या इंटेल कोर ):
- Yonah ( कोर सोलो , कोर डुओ ): C0, C1, C2, C3, C4, C4E / C5
मॉडल 15 0x0F INTEL_FAM6_CORE2_MEROM (कुछ कोर 2 और पेंटियम डुअल-कोर ):
- Kentsfield, Merom, Conroe, Allendale ( E2xxx / E4xxx और Core 2 Duo E6xxx, T7xxxx / T8xxxx , Core 2 Extreme QX6xxx , Core 2 Quad-6xxx ): C0, C1E, C2, C2E
मॉडल 23 0x17 INTEL_FAM6_CORE2_PENRYN ( कोर 2 ):
- मेरोम-एल / पेन्री-एल:?
- पेन्री ( कोर 2 डुओ 45-एनएम मोबाइल ): C0, C1, C1E, C2, C2E, C3, C4, C4E / C5, C6
- यॉर्कफील्ड ( कोर 2 एक्सट्रीम QX9650 ): C0, C1, C1E, C2E ?, C3
- वोल्फडेल / यॉर्कफील्ड ( कोर 2 क्वाड , C2Q Xeon , Core 2 Duo E5xxx / E7xxx / E8xxx , Pentium Dual-Core E6xxx , Celeron Dual-Core ): C0, C1, C1E, C2E, C2E, C3, C4
प्रोसेसर की कोर 2 लाइन के भीतर सी-राज्य समर्थन में विविधता की मात्रा से, ऐसा प्रतीत होता है कि सी-राज्यों के लिए लगातार समर्थन की कमी intel_idle
ड्राइवर के माध्यम से उन्हें पूरी तरह से समर्थन करने का प्रयास नहीं करने का कारण हो सकता है । मैं पूरी कोर 2 लाइन के लिए उपरोक्त सूची को पूरी तरह से पूरा करना चाहूंगा।
यह वास्तव में एक संतोषजनक जवाब नहीं है, क्योंकि यह मुझे आश्चर्यचकित करता है कि अनावश्यक बिजली का कितना उपयोग किया जाता है और इन प्रोसेसर पर मजबूत बिजली की बचत करने वाले MWAIT C- राज्यों का पूरी तरह से उपयोग नहीं करने के कारण अत्यधिक गर्मी (और अभी भी) उत्पन्न हुई है ।
चट्टोपाध्याय एट अल। 2018, एनर्जी एफिशिएंट हाई परफॉर्मेंस प्रोसेसर्स: ग्रीन हाई परफॉर्मेंस कम्प्यूटिंग डिजाइनिंग के लिए हालिया दृष्टिकोण , उस विशिष्ट व्यवहार के लिए ध्यान देने योग्य है जिसे मैं Q45 एक्सप्रेस चिपसेट में देख रहा हूं:
पैकेज सी-स्टेट (PC0-PC10) - जब कंप्यूट डोमेन, कोर और ग्राफिक्स (GPU) निष्क्रिय होते हैं, तो प्रोसेसर के पास uncore और प्लेटफ़ॉर्म स्तर पर अतिरिक्त बिजली बचत का अवसर होता है, उदाहरण के लिए, LLC को फ्लश करके और पावर-गेटिंग मेमोरी कंट्रोलर और DRAM IO, और कुछ राज्य में, पूरे प्रोसेसर को बंद किया जा सकता है, जबकि इसका राज्य हमेशा ऑन-पावर डोमेन पर संरक्षित होता है।
परीक्षण के रूप में, मैंने लिनक्स / ड्राइवरों / निष्क्रिय / Intel_idle.c लाइन 127 पर निम्नलिखित डाला :
static struct cpuidle_state conroe_cstates[] = {
{
.name = "C1",
.desc = "MWAIT 0x00",
.flags = MWAIT2flg(0x00),
.exit_latency = 3,
.target_residency = 6,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C1E",
.desc = "MWAIT 0x01",
.flags = MWAIT2flg(0x01),
.exit_latency = 10,
.target_residency = 20,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
// {
// .name = "C2",
// .desc = "MWAIT 0x10",
// .flags = MWAIT2flg(0x10),
// .exit_latency = 20,
// .target_residency = 40,
// .enter = &intel_idle,
// .enter_s2idle = intel_idle_s2idle, },
{
.name = "C2E",
.desc = "MWAIT 0x11",
.flags = MWAIT2flg(0x11),
.exit_latency = 40,
.target_residency = 100,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.enter = NULL }
};
static struct cpuidle_state core2_cstates[] = {
{
.name = "C1",
.desc = "MWAIT 0x00",
.flags = MWAIT2flg(0x00),
.exit_latency = 3,
.target_residency = 6,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C1E",
.desc = "MWAIT 0x01",
.flags = MWAIT2flg(0x01),
.exit_latency = 10,
.target_residency = 20,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C2",
.desc = "MWAIT 0x10",
.flags = MWAIT2flg(0x10),
.exit_latency = 20,
.target_residency = 40,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C2E",
.desc = "MWAIT 0x11",
.flags = MWAIT2flg(0x11),
.exit_latency = 40,
.target_residency = 100,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C3",
.desc = "MWAIT 0x20",
.flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
.exit_latency = 85,
.target_residency = 200,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C4",
.desc = "MWAIT 0x30",
.flags = MWAIT2flg(0x30) | CPUIDLE_FLAG_TLB_FLUSHED,
.exit_latency = 100,
.target_residency = 400,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C4E",
.desc = "MWAIT 0x31",
.flags = MWAIT2flg(0x31) | CPUIDLE_FLAG_TLB_FLUSHED,
.exit_latency = 100,
.target_residency = 400,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.name = "C6",
.desc = "MWAIT 0x40",
.flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED,
.exit_latency = 200,
.target_residency = 800,
.enter = &intel_idle,
.enter_s2idle = intel_idle_s2idle, },
{
.enter = NULL }
};
intel_idle.c
983 लाइन पर :
static const struct idle_cpu idle_cpu_conroe = {
.state_table = conroe_cstates,
.disable_promotion_to_c1e = false,
};
static const struct idle_cpu idle_cpu_core2 = {
.state_table = core2_cstates,
.disable_promotion_to_c1e = false,
};
पर intel_idle.c
लाइन 1073:
ICPU(INTEL_FAM6_CORE2_MEROM, idle_cpu_conroe),
ICPU(INTEL_FAM6_CORE2_PENRYN, idle_cpu_core2),
मेरे पीएक्सई नोड्स के त्वरित संकलन और रिबूट के बाद, dmesg
अब दिखाता है:
[ 0.019845] cpuidle: using governor menu
[ 0.515785] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns
[ 0.543404] intel_idle: MWAIT substates: 0x22220
[ 0.543405] intel_idle: v0.4.1 model 0x17
[ 0.543413] tsc: Marking TSC unstable due to TSC halts in idle states deeper than C2
[ 0.543680] intel_idle: lapic_timer_reliable_states 0x2
और अब PowerTOP दिखा रहा है:
Package | CPU 0
POLL 2.5% | POLL 0.0% 0.0 ms
C1E 2.9% | C1E 5.0% 22.4 ms
C2 0.4% | C2 0.2% 0.2 ms
C3 2.1% | C3 1.9% 0.5 ms
C4E 89.9% | C4E 92.6% 66.5 ms
| CPU 1
| POLL 10.0% 400.8 ms
| C1E 5.1% 6.4 ms
| C2 0.3% 0.1 ms
| C3 1.4% 0.6 ms
| C4E 76.8% 73.6 ms
| CPU 2
| POLL 0.0% 0.2 ms
| C1E 1.1% 3.7 ms
| C2 0.2% 0.2 ms
| C3 3.9% 1.3 ms
| C4E 93.1% 26.4 ms
| CPU 3
| POLL 0.0% 0.7 ms
| C1E 0.3% 0.3 ms
| C2 1.1% 0.4 ms
| C3 1.1% 0.5 ms
| C4E 97.0% 45.2 ms
मैंने आखिरकार एन्हांस्ड कोर 2 सी-राज्यों तक पहुंच प्राप्त की है, और ऐसा लगता है कि बिजली की खपत में एक औसत दर्जे की गिरावट है - 8 नोड्स पर मेरा मीटर कम से कम 5% औसत प्रतीत होता है (एक नोड अभी भी पुरानी कर्नेल चला रहा है) , लेकिन मैं एक परीक्षण के रूप में फिर से गुठली को स्वैप करने की कोशिश करूँगा।
C4E समर्थन के बारे में एक दिलचस्प नोट - मेरा यॉर्कटाउन Q9550S प्रोसेसर ऊपर बताए अनुसार इसका समर्थन करता है (या C4 के कुछ अन्य उप-राज्य)! यह मुझे भ्रमित करता है, क्योंकि कोर 2 Q9000 प्रोसेसर (खंड 6.2) पर इंटेल डेटाशीट केवल सी-स्टेट्स नॉर्मल (C0), HALT (C1 = 0x00), विस्तारित HALT (C1E = 0x01), स्टॉप ग्रांट (C2 = 0x10) का उल्लेख करता है , विस्तारित स्टॉप ग्रांट (C2E = 0x11), स्लीप / डीप स्लीप (C3 = 0x20) और डीपर स्लीप (C4 = 0x30)। यह अतिरिक्त 0x31 स्थिति क्या है? यदि मैं राज्य C2 को सक्षम करता हूं, तो C4 के बजाय C4E का उपयोग किया जाता है। यदि मैं राज्य C2 (बल स्थिति C2E) को अक्षम करता हूं तो C4 के बजाय C4 का उपयोग किया जाता है। मुझे संदेह है कि MWAIT झंडे के साथ ऐसा करने के लिए कुछ हो सकता है, लेकिन मुझे अभी तक इस व्यवहार के लिए प्रलेखन नहीं मिला है।
मुझे निश्चित नहीं है कि इसे क्या बनाना है: C1E राज्य C1 के बदले में उपयोग किया गया प्रतीत होता है, C2 का उपयोग C2E के बदले में किया जाता है और C4 के बदले C4E का उपयोग किया जाता है। मैं अनिश्चित हूँ कि C1 / C1E, C2 / C2E और C4 / C4E को एक साथ इस्तेमाल किया जा सकता है intel_idle
या यदि वे निरर्थक हैं। मुझे इंटेल लैब्स पिट्सबर्ग की इस 2010 की प्रस्तुति में एक नोट मिला, जो संकेत करता है कि संक्रमण C0 - C1 - C0 - C1E - C0 और आगे के राज्य हैं:
C1E का उपयोग केवल तब किया जाता है जब सभी कोर C1E में हों
मेरा मानना है कि C1E राज्य को अन्य घटकों (जैसे मेमोरी) में दर्ज किया जाता है, जब केवल सभी कोर C1E राज्य में होते हैं। मैं इसे C2 / C2E और C4 / C4E राज्यों के समकक्ष लागू करने के लिए भी लेता हूं (हालाँकि C4E को "C4E / C5" के रूप में संदर्भित किया जाता है, इसलिए यदि C4E C4 का उप-राज्य है या C5 उप है तो मैं अनिश्चित हूँ। C4E की स्थिति। परीक्षण से संकेत मिलता है कि C4 / C4E सही है)। मैं C2E को C2 स्थिति पर टिप्पणी करने के लिए उपयोग करने के लिए बाध्य कर सकता हूं - हालाँकि, इसका कारण C4E के बजाय C4 स्थिति का उपयोग किया जाता है (अधिक काम यहाँ आवश्यक हो सकता है)। उम्मीद है कि कोई मॉडल 15 या मॉडल 23 प्रोसेसर नहीं हैं जिनमें राज्य C2E की कमी है, क्योंकि उन प्रोसेसर उपरोक्त कोड के साथ C1 / C1E तक सीमित होंगे।
इसके अलावा, झंडे, विलंबता और निवास मूल्य शायद ठीक-ठाक होने के लिए खड़े हो सकते हैं, लेकिन सिर्फ नेहले निष्क्रिय मूल्यों के आधार पर शिक्षित अनुमान लगाने से यह ठीक काम करने लगता है। कोई सुधार करने के लिए अधिक रीडिंग की आवश्यकता होगी।
मैं एक पर इस परीक्षण किया कोर 2 डुओ E2220 ( Allendale ), एक डुअल कोर पेंटियम E5300 ( Wolfdale ), कोर 2 डुओ E7400 , कोर 2 डुओ E8400 ( Wolfdale ), कोर 2 Quad Q9550S ( Yorkfield ) और कोर 2 एक्सट्रीम QX9650 , और मैं राज्य C2 / C2E और C4 / C4E के लिए उपर्युक्त वरीयता से परे कोई समस्या नहीं मिली है।
इस चालक संशोधन द्वारा कवर नहीं किया गया:
- मूल कोर सोलो / कोर जोड़ी ( योना , नॉन कोर 2) परिवार 6, मॉडल 14 हैं। यह अच्छा है क्योंकि उन्होंने C4E / C5 (डीप स्लीप स्लीप) C- स्टेट्स का समर्थन किया है, लेकिन C1E / C2E राज्यों ने नहीं और उनकी आवश्यकता होगी खुद की निष्क्रिय परिभाषा।
केवल वे मुद्दे जो मैं सोच सकता हूं:
- कोर 2 सोलो SU3300 / SU3500 ( पेन्री -एल) परिवार 6, मॉडल 23 हैं और इस चालक द्वारा पता लगाया जाएगा। हालाँकि, वे सॉकेट LGA775 नहीं हैं, इसलिए वे C1E एन्हांस्ड हॉल्ट सी-स्टेट का समर्थन नहीं कर सकते हैं। इसी तरह कोर 2 सोलो ULV U2100 / U2200 ( मेरोम-एल ) के लिए। हालाँकि,
intel_idle
ड्राइवर उप-राज्यों के हार्डवेयर समर्थन के आधार पर उपयुक्त C1 / C1E का चयन करता है।
- कोर 2 एक्सट्रीम QX9650 (यॉर्कफील्ड) कथित तौर पर सी-स्टेट C2 या C4 का समर्थन नहीं करता है। मैंने eBay पर एक प्रयुक्त Optiplex 780 और QX9650 एक्सट्रीम प्रोसेसर खरीदकर इसकी पुष्टि की है। प्रोसेसर C-C C और C1E को सपोर्ट करता है। इस ड्राइवर संशोधन के साथ, सीपीयू सी 1 के बजाय राज्य सी 1 ई में निष्क्रिय हो जाता है, इसलिए संभवतः कुछ बिजली बचत है। मुझे सी-स्टेट सी 3 देखने की उम्मीद थी, लेकिन यह इस ड्राइवर का उपयोग करते समय मौजूद नहीं है, इसलिए मुझे आगे इस पर ध्यान देने की आवश्यकता हो सकती है।
मैं सी-स्टेट्स (यानी, डीप पावर डाउन) के बीच बदलाव पर 2009 इंटेल प्रस्तुति से एक स्लाइड खोजने में कामयाब रहा:
निष्कर्ष में, यह पता चला है कि intel_idle
चालक में कोर 2 समर्थन की कमी का कोई वास्तविक कारण नहीं था । अब यह स्पष्ट है कि "कोर 2 डुओ" के लिए मूल स्टब कोड केवल सी-स्टेट्स सी 1 और सी 2 को संभाला है, जो उस acpi_idle
फ़ंक्शन की तुलना में बहुत कम कुशल होगा जो सी-स्टेट सी 3 को भी संभालता है। एक बार जब मुझे पता था कि कहां देखना है, तो समर्थन को लागू करना आसान था। सहायक टिप्पणियों और अन्य उत्तरों की बहुत सराहना की गई, और अगर अमेज़ॅन सुन रहा है, तो आप जानते हैं कि चेक कहां भेजना है।
यह अपडेट जीथब के लिए प्रतिबद्ध किया गया है । मैं जल्द ही एलकेएमएल को एक पैच ई-मेल करूंगा।
अपडेट : मैंने सॉकेट टी / एलजीए 775 ऑलेंडेल ( कॉनरो ) कोर 2 डुओ ई 2220 को खोदने में भी कामयाबी हासिल की , जो कि फैमिली 6, मॉडल 15 है, इसलिए मैंने उसके लिए भी समर्थन जोड़ा। इस मॉडल में सी-स्टेट C4 के लिए समर्थन का अभाव है, लेकिन C1 / C1E और C2 / C2E का समर्थन करता है। यह अन्य Conroe- आधारित चिप्स ( E4xxx / E6xxx ) और संभवतः सभी Kentsfield और Merom (गैर Merom-L) प्रोसेसर के लिए भी काम करना चाहिए ।
अपडेट : मुझे आखिरकार कुछ MWAIT ट्यूनिंग संसाधन मिले। यह पॉवर बनाम परफॉर्मेंस राइटअप और इस डीपर सी राज्यों में वृद्धि हुई है और लेटेंसी ब्लॉग पोस्ट दोनों में CPU निष्क्रिय अक्षांशों की पहचान करने पर कुछ उपयोगी जानकारी है। दुर्भाग्य से, यह केवल उन निकास अक्षांशों की रिपोर्ट करता है जिन्हें कर्नेल में कोडित किया गया था (लेकिन, दिलचस्प बात यह है कि प्रोसेसर द्वारा समर्थित केवल उन्हीं हार्डवेयर अवस्थाओं में शामिल हैं:
# cd /sys/devices/system/cpu/cpu0/cpuidle
# for state in `ls -d state*` ; do echo c-$state `cat $state/name` `cat $state/latency` ; done
c-state0/ POLL 0
c-state1/ C1 3
c-state2/ C1E 10
c-state3/ C2 20
c-state4/ C2E 40
c-state5/ C3 20
c-state6/ C4 60
c-state7/ C4E 100
acpi_idle
और विभिन्न प्रदर्शन राज्यपालों का लाभ मिलना चाहिए ।powertop
आपके सिस्टम पर क्या राज्य दिखाते हैं?