दिलचस्प पोस्ट
रेक डीबी के बीच का अंतर: माइग्रेट डीबी: रीसेट और डीबी: स्कीमा: लोड जब MySQL के बजाय MySQLi का उपयोग करना चाहिए I Scala foreach अजीब व्यवहार एक लाइव डॉकर कंटेनर पर एक पोर्ट को खोलना कैसे एक dmg मैक ओएस एक्स फाइल बनाने के लिए (एक गैर-मैक मंच पर)? SQL सर्वर डीबी में सभी सूचकांक और अनुक्रमणिका कॉलम की सूची AsyncTask में progressDialog उपयोगकर्ता को इनपुट के लिए पूछना जब तक कि वे एक मान्य प्रतिक्रिया न दें शैलियों और सीएसएस का इस्तेमाल करते हुए पांडा डेटाफ़्रेम HTML तालिका अजगर के भीतर पाठ का रंग बदलें इनपुट / आउटपुट स्ट्रीम के साथ जावा प्रक्रिया क्या फ़ाइल अपलोड करने के लिए अजाक्स का उपयोग करना संभव है? कैसे गिट एक ब्लॉब पर एक SHA-1 टक्कर संभाल लेंगे? जावास्क्रिप्ट का उपयोग कर F5 और ब्राउज़र ताज़ा करें अक्षम करें दृश्यविशेषरूप देखें: निर्धारित करें कि नियंत्रक को पॉप किया जा रहा है या उप-दृश्य नियंत्रक दिखा रहा है या नहीं एआरसी के साथ @प्रॉपर्टी परिभाषाएं: मजबूत या बनाए रखे?

मैं हार्डवेयर प्रीफेचिंग को प्रोग्रामैटिक रूप से अक्षम कैसे कर सकता हूं?

मैं हार्डवेयर प्रीफ़ेचिंग को प्रोग्रामेटिक रूप से अक्षम करना चाहता हूं।

हार्डवेयर-लागू प्रीफेचर्स का प्रयोग करके Intel® Core ™ माइक्रोएरेक्टेक्चर पर ऑप्टिमाइज़िंग अनुप्रयोग प्रदर्शन से और 32-बिट इंटेल® आर्किटेक्चर पर हार्डवेयर और सॉफ्टवेयर प्रीफ़ेच के बीच कैसे चुनें I को हार्डवेयर प्रीफीचिंग को अक्षम करने के लिए MSR को अपडेट करना होगा।

यहां एक प्रासंगिक स्निपेट है:

" IA32_MISC_ENABLE और एल 2 स्ट्रीमिंग प्रीफेच सेटिंग्स को प्रोग्रामेटिक रूप से IA32_MISC_ENABLE रजिस्टर – MSR 0x1A0 में बिट्स को बदलने के लिए एक डिवाइस ड्राइवर सुविधा लिखकर बदला जा सकता है। ऐसा उपयोगिता किसी भी सर्वर डाउनटाइम की आवश्यकता के बिना MSR 0x1A0 तंत्र को सक्षम या अक्षम करने की क्षमता प्रदान करता है।

नीचे दी गई तालिका IA32_MISC_ENABLE MSR में बिट्स को IA32_MISC_ENABLE MSR जिसे DPL और एल 2 स्ट्रीमिंग IA32_MISC_ENABLE MSR को नियंत्रित करने के लिए बदलना होगा:

 Prefetcher Type MSR (0x1A0) Bit Value DPL (Hardware Prefetch) Bit 9 0 = Enable 1 = Disable L2 Streamer (Adjacent Cache Line Prefetch) Bit 19 0 = Enable 1 = Disable" 

मैंने http://etallen.com/msr.html का उपयोग करने की कोशिश की लेकिन यह काम नहीं कर रहा था। मैंने सीधे asm/msr.h में wrmsr का उपयोग करने की कोशिश की लेकिन वह segfaults मैंने इसे कर्नेल मॉड्यूल में करने की कोशिश की … और मशीन को मार डाला।

BTW – मैं कर्नेल 2.6.18-92.el5 का उपयोग कर रहा हूं और इसके कर्नेल में MSR लिंक है:

 $ grep -i msr /boot/config-$(uname -r) CONFIG_X86_MSR=y ... 

वेब के समाधान से एकत्रित समाधान "मैं हार्डवेयर प्रीफेचिंग को प्रोग्रामैटिक रूप से अक्षम कैसे कर सकता हूं?"

इंटेल संदर्भ से:
यह निर्देश विशेषाधिकार स्तर 0 या वास्तविक-पता मोड में निष्पादित किया जाना चाहिए; अन्यथा, एक सामान्य सुरक्षा अपवाद #GP (0) उत्पन्न होगा ईसीएक्स में आरक्षित या अपरिवर्तित एमएसआर पता निर्दिष्ट करने से एक सामान्य सुरक्षा अपवाद भी होगा।


इस अनुदेश का उपयोग करने से पहले यह निर्धारित करने के लिए कि क्या MSRs समर्थित हैं (एडीएक्स [5] = 1) CPUID निर्देश का उपयोग किया जाना चाहिए

इसलिए, आपकी गलती एक सीपीयू से संबंधित हो सकती है जो एमएसआर का समर्थन नहीं करती है या गलत MSR पते का उपयोग नहीं करती है।

कर्नेल स्रोत में MSR का उपयोग करने के बहुत सारे उदाहरण हैं:

कर्नेल स्रोत में, एक सीपीयू के लिए, यह फ़ंक्शन में arch / i386 / kernel / cpu / intel.c में एक्सऑन के लिए प्रीफेच को अक्षम करने का प्रावधान करता है:

स्थिर शून्य __cpuinit Intel_errata_workarounds (स्ट्रिप cpuinfo_x86 * c)

Rdmsr फ़ंक्शन तर्क एमएसआर संख्या, कम 32 बिट शब्द के लिए एक संकेतक और उच्च 32 बिट शब्द के लिए एक संकेतक है।
Wrmsr फ़ंक्शन तर्क एमएसआर संख्या, कम 32 बिट शब्द मान, और उच्च 32 बिट शब्द मान हैं।

बहु-कोर या एसएमपी सिस्टम को सीपीयू स्ट्रेट को पहला तर्क के रूप में देना होगा:
शून्य rdmsr_on_cpu (अहस्ताक्षरित int cpu, u32 msr_no, u32 * l, u32 * h);
शून्य wrmsr_on_cpu (अहस्ताक्षरित int cpu, u32 msr_no, u32 l, u32 h);

आप एमएसआर-टूल्स http://www.kernel.org/pub/linux/utils/cpu/msr-tools/ का उपयोग कर हार्डवेयर प्रीफेचर्स को सक्षम या अक्षम कर सकते हैं।

निम्न हार्डवेयर प्रीफैचर (बिट 9 को अटैक करने से) को सक्षम करता है:

 [root@... msr-tools-1.2]# ./wrmsr -p 0 0x1a0 0x60628e2089 [root@... msr-tools-1.2]# ./rdmsr 0x1a0 60628e2089 

निम्न हार्डवेयर प्रीफेचर को निष्क्रिय कर देता है (बिट 9 को सक्षम करके):

 [root@... msr-tools-1.2]# ./wrmsr -p 0 0x1a0 0x60628e2289 [root@... msr-tools-1.2]# ./rdmsr 0x1a0 60628e2289 

प्रोग्रामैटिक रूप से, आप इसे /dev/cpu/<cpunumber>/msr खोलकर रूट के रूप में और 0x1a0 ऑफसेट पर 0x1a0 "फाइल" पर लिखने के लिए pwrite का उपयोग कर सकते हैं।

मैं यहां एक उत्तर जोड़ रहा हूं, क्योंकि पिछला वाले सभी इंटेल प्रोसेसरों पर लागू नहीं हो सकते हैं।

इंटेल क्सीन 5650 (06-2 सीएच परिवार) प्रोसेसर के लिए मैनुअल अध्याय 35 निर्दिष्ट करता है कि एड्रेस 0x1A0 पर रजिस्टर IA32_MISC_ENABLE के बिट्स 10 से 8 आरक्षित हैं मुझे लगता है कि इसका अर्थ है कि मैं प्रीफैचर को ट्राउहस एमएसआर पर और बंद नहीं कर सकता

इंटेल के कर्मचारी से एक उत्तर के मुताबिक: "इंटेल ने खुलासा नहीं किया है कि नेहैल से आगे के प्रोसेसर पर प्रीफेचर्स को कैसे निष्क्रिय किया जाए। आपको BIOS में विकल्पों का उपयोग करने वाले प्रीफेचर्स को अक्षम करना होगा।"

2014 में इंटेल ने नेहलेम, वेस्टमेयर, सैंडी ब्रिज, आइवी ब्रिज, हैसवेल, ब्रॉडवेल (और संभवतः नए कोर) के लिए 0x1a4 एमएसआर (1 ए 4 एमएसआर) के साथ एच / डब्ल्यू प्रीफेटर अक्षम करने के बारे में जानकारी प्रकाशित की। लिंक यहां बोलावनाथ ने पाया था:

https://software.intel.com/en-us/articles/disclosure-of-hw-prefetcher-control-on-some-intel-processors कुछ इंटेल प्रोसेसर पर एच / डब्ल्यू प्रीफाटर नियंत्रण का खुलासा – विश्व विश्वनाथन (इंटेल) , 24 सितंबर, 2014

इस अनुच्छेद में एमएसआर सेटिंग का खुलासा किया गया है जो निम्नलिखित माइक्रोआर्किटेक्चर के आधार पर इंटेल प्रोसेसर पर उपलब्ध विभिन्न एच / डब्ल्यू प्रीफैचर को नियंत्रित करने के लिए इस्तेमाल किया जा सकता है: नेहैलम, वेस्टमेयर, सैंडी ब्रिज, आइवी ब्रिज, हैसवेल और ब्रॉडवेल।

उपरोक्त प्रोसेसर डाटा को प्रीफेच करने के लिए 4 प्रकार के एच / डब्ल्यू प्रीफेचर्स का समर्थन करते हैं। एल 2-डेटा कैशे (जिसे डीसीयू डीसीयू प्रीफैचर, डीसीयू आईपी प्रीफाटर के नाम से भी जाना जाता है) और एल 2 कैशे (एल 2 हार्डवेयर प्रीफैचर, एल 2 सटे कैश लाइन प्रीफेटर) के साथ जुड़े 2 प्रीफ़ेचर जुड़े हुए हैं।

0x1A4 के पते के साथ प्रत्येक कोर पर एक मॉडल विशिष्ट रजिस्टर (एमएसआर) है जो इन 4 प्रीफेचर्स को नियंत्रित करने के लिए इस्तेमाल किया जा सकता है। इस रजिस्टर में बिट्स 0-3 इन प्रीफेचर्स को सक्षम या अक्षम करने के लिए इस्तेमाल किया जा सकता है इस एमएसआर के अन्य बिट आरक्षित हैं

वे हर सीपीयू कोर के लिए स्थानीय हैं और msr लिनक्स कर्नेल चालक की सहायता से जड़ से बदला जा सकता है। इन्हें इंटेल एमएलसी टूल के साथ NUMA में स्मृति विलंबता को मापने के लिए इंटेल द्वारा उपयोग किया जाता है:

उदाहरण के लिए, इंटेल मेमोरी लेटेंसी चेकर टूल ( http://www.intel.com/software/mlc ) सटीक लेटेंसी को मापने के लिए एमएसआर 0x1a4 लिखते हुए प्रीफैचर को संशोधित करता है और उन्हें बाहर निकलने पर मूल स्थिति में पुनर्स्थापित करता है