जब आप भौतिक रैखिक पते पर वीजीए पाठ (मोड 03) फ्रेम बफ़र में बाइट को स्टोर करते हैं, तो वास्तव में 16-बिट लीगेसी BIOS एमबीआर मोड में बूट किए गए आधुनिक पीसी हार्डवेयर पर क्या होता है ? यूसी के लिए उस क्षेत्र के लिए एमटीआरआर के साथ एक स्टोर कितना धीमा है ? ( एक केबी लेक iGPU लैपटॉप पर प्रायोगिक परीक्षण इंगित करता है कि WC पर Clflushopt लगभग VGA मेमोरी के लिए UC के समान गति है। लेकिन Clflushopt के बिना, WC मेमोरी में स्टोर CPU को कभी नहीं छोड़ते हैं और सुपर फास्ट रनिंग करते हुए स्क्रीन को कभी भी अपडेट नहीं करते हैं। ।)'1'
B8000
mov [es:di], eax
mov
यदि यह हर दुकान के लिए SMI नहीं है, तो क्या वास्तव में वास्तविक मोड में रिबूट किए बिना प्रदर्शन प्रयोगों के लिए, उपयोगकर्ता-स्पेस में WB मेमोरी के एक हिस्से पर इस लागत को अनुमानित करने का कोई तरीका है? (उदाहरण के लिए एक बीएसएस पृष्ठ का उपयोग एक ढोंग फ़्रेमबफ़र के रूप में किया जाता है जो वास्तव में कहीं भी प्रदर्शित नहीं होता है)।
अगले फॉन्ट में स्क्रीन पर संबंधित फ़ॉन्ट ग्लिफ़ दिखाई देता है, लेकिन क्या हार्डवेयर स्कैन-आउट वास्तव में पढ़ रहा है कि VRC से ASCII char (या एक iGPU के लिए DRAM) और मक्खी पर बिटमैप फ़ॉन्ट ग्लिफ़ को मैप कर रहा है? या क्या प्रत्येक दुकान पर या प्रति बार एक बार कुछ सॉफ़्टवेयर अवरोधन होता है, इसलिए वास्तविक हार्डवेयर को केवल एक बिटमैप फ़्रेम फ्रेमर को संभालना पड़ता है?
विरासत BIOS बूटिंग को पीएस / 2 उपकरणों के रूप में USB kbd / माउस का अनुकरण करने के लिए सिस्टम प्रबंधन मोड (SMM) का उपयोग करने के लिए जाना जाता है। मैं सोच रहा था कि यह वीजीए टेक्स्ट मोड फ्रेमबफ़र के लिए भी उपयोग किया जाता है। मैं यह मान रहा है वीजीए मैं / मोड स्थापित करने के लिए हे बंदरगाहों के लिए इस्तेमाल किया, लेकिन यह है कि एक पाठ फ्रेमबफर हार्डवेयर द्वारा समर्थित किया जा सकता है प्रशंसनीय है। हालाँकि, अधिकांश कंप्यूटर ग्राफिक्स मोड में अपना सारा समय बिताते हैं, इसलिए पाठ मोड के लिए HW समर्थन को छोड़ना ऐसा लगता है जैसे कुछ विक्रेता करना चाहते हैं। (ओटीओएच इस ब्लॉग से पता चलता है कि होमब्रेव वेरिलॉग वीजीए कंट्रोलर टेक्स्ट मोड को काफी सरलता से लागू कर सकता है।)
मैं विशेष रूप से Intel Skylake में iGPU का उपयोग करने वाले सिस्टम में दिलचस्पी रखता हूं, लेकिन Intel और AMD से पहले / बाद के iGPU में दिलचस्पी होगी, और नए या पुराने असतत GPU।
(AMD और NVidia के अलावा विक्रेताओं में शामिल हैं; PCI स्लॉट्स के साथ कुछ Skylake मदरबोर्ड हैं, PCIe नहीं। यदि आधुनिक GPU फर्मवेयर ड्राइवर पाठ मोड का अनुकरण करते हैं, तो संभवतः हार्डवेयर VGA पाठ मोड के साथ कुछ पुराने PCI वीडियो कार्ड हैं। और शायद ऐसा कार्ड है। स्टोर केवल SMI के बजाय एक PCI लेनदेन हो सकते हैं।)
मेरा खुद का डेस्कटॉप एक Asus Z170 प्रो गेमिंग मोबो में एक i7-6700k है, डीवीआई-डी आउटपुट पर 1920x1200 मॉनिटर के साथ सिर्फ iGPU पर कोई ऐड-ऑन कार्ड नहीं है। मुझे पता नहीं है कि केबी झील i5-7300HQ प्रणाली का विवरण @ Eldan केवल CPU मॉडल पर परीक्षण कर रहा है।
मुझे 2011 से फीनिक्स BIOS का पेटेंट US20120159520 मिला ,
uefi का उपयोग करके विरासत वीडियो का अनुकरण । UEFI और देशी 16-बिट वास्तविक मोड विकल्प-ROM ड्राइवरों को आपूर्ति करने के लिए वीडियो हार्डवेयर विक्रेताओं की आवश्यकता के बजाय , वे एक वास्तविक-मोड VGA ड्राइवर ( int 10h
फ़ंक्शन और इतने पर) का प्रस्ताव करते हैं जो एसएमएम हुक के माध्यम से एक विक्रेता द्वारा आपूर्ति किए गए UEFI वीडियो ड्राइवर को कॉल करता है।
सार
[...] सामान्य वीडियो विकल्प ROM वीडियो सेवाओं के लिए अनुरोध के एक सामान्य वीडियो SMM ड्राइवर को सूचित करता है। इस तरह की अधिसूचना एक सॉफ्टवेयर सिस्टम मैनेजमेंट इंटरप्ट (SMI) का उपयोग करके की जा सकती है। सूचना पर, सामान्य वीडियो SMM ड्राइवर वीडियो सेवाओं के लिए अनुरोध के तीसरे पक्ष UEFI वीडियो ड्राइवर को सूचित करता है। थर्ड पार्टी वीडियो ड्राइवर ऑपरेटिंग सिस्टम के लिए अनुरोधित वीडियो सेवाएँ प्रदान करता है। इस तरह, एक तीसरा पक्ष यूईएफआई ग्राफिक्स ड्राइवर ऑपरेटिंग सिस्टम की एक विस्तृत विविधता का समर्थन कर सकता है, यहां तक कि वे जो यूईएफआई प्रदर्शन प्रोटोकॉल का मूल रूप से समर्थन नहीं करते हैं।
विवरण का अधिकांश हिस्सा int 10h
कॉलिंग और सामान को कवर करता है, जो पहले से ही स्पष्ट रूप से आईवीटी के माध्यम से फंसता है, इस प्रकार आसानी से कस्टम कोड चला सकता है जो उद्देश्य पर एसएमआई को ट्रिगर करता है। संबंधित भाग वह है जो वे टेक्स्ट-मोड फ्रेमबफ़र में सीधे स्टोर के लिए वर्णन करते हैं जो कोड के लिए भी काम करने की आवश्यकता होती है जो किसी भी सॉफ़्टवेयर या हार्डवेयर को बाधित नहीं करता है। (ऐसे स्टोर पर एचडब्ल्यू ट्रिगर एसएमआई को छोड़कर अन्य, जो कहते हैं कि वे समर्थित होने पर उपयोग कर सकते हैं।)
पाठ बफर समर्थन
[००६६] कुछ विशिष्ट अवतार में, आवेदन वीजीए के पाठ बफर को सीधे जोड़ सकते हैं । इस तरह के एक अवतार में, जेनेरिक वीडियो एसएमएम चालक 130 दो तरीकों में से एक में इसका समर्थन करता है, यह इस बात पर निर्भर करता है कि हार्डवेयर एसएमआई को 740 KB-768 KB मेमोरी क्षेत्र (जहां टेक्स्ट बफ़र्स स्थित हैं) पर पढ़ने / लिखने की पहुंच प्रदान करता है ।
[००६ [] एसएमआई ट्रैपिंग उपलब्ध होने पर, हार्डवेयर प्रत्येक रीड या राइट एक्सेस पर एक एसएमआई उत्पन्न करता है। SMI जाल के ट्रैप पते का उपयोग करके, सटीक टेक्स्ट कॉलम और पंक्ति की गणना की जा सकती है और वर्चुअल विंडो स्क्रीन में संबंधित पंक्ति और कॉलम एक्सेस किया जा सकता है।
वैकल्पिक रूप से, इस क्षेत्र के लिए सामान्य मेमोरी को सक्षम किया जाता है और, आवधिक एसएमआई, जेनेरिक वीडियो एसएमएम चालक 130 स्कैन का उपयोग करके एमुलेटेड हार्डवेयर टेक्स्ट बफर में बदलाव के लिए और वीडियो ड्राइवर द्वारा बनाए गए संबंधित वर्चुअल टेक्स्ट स्क्रीन को अपडेट करता है। दोनों मामलों में, जब एक परिवर्तन का पता लगाया जाता है, तो चरित्र को आभासी पाठ स्क्रीन पर फिर से तैयार किया जाता है।
यह सिर्फ एक BIOS विक्रेता का पेटेंट है, और हमें यह नहीं बताता कि अधिकांश हार्डवेयर वास्तव में किस तरह से काम करते हैं, या यदि अन्य विक्रेता अलग-अलग काम करते हैं। यह अनिवार्य रूप से पुष्टि करता है कि कुछ हार्डवेयर मौजूद हैं, जो उस सीमा में दुकानों पर फंस सकते हैं, हालांकि। (जब तक कि यह केवल एक काल्पनिक संभावना नहीं है कि उन्होंने अपने पेटेंट में कवर करने का फैसला किया है।)
मेरे दिमाग में जो उपयोग-मामला है, उसके लिए केवल स्क्रीन रिफ्रेश पर फंसना हर दुकान पर फंसने की तुलना में बहुत तेज होगा, इसलिए मैं उत्सुक हूं कि हार्डवेयर / फर्मवेयर किस तरह से काम करता है।
इस प्रश्न के लिए प्रेरणा
7 वें जीन इंटेल कोर पर वीडियो रैम में एक वृद्धि ASCII दशमलव काउंटर का अनुकूलन - बार-बार वीडियो रैम के कुछ बाइट्स में एक ASCII पाठ काउंटर के लिए नए अंकों को संग्रहीत करना।
मैंने लिनक्स के तहत 32-बिट यूजर-स्पेस में कोड का एक संस्करण का परीक्षण किया, डब्ल्यूबी मेमोरी पर, movnti
प्रत्येक दुकान के बाद (या शायद कभी-कभी) अपने सीपीसी बफर को वीडियो रैम में सिंक करने के लिए सीपीयू प्राप्त करने के अलग-अलग तरीकों से स्थिति की लगभग उम्मीद की । एक टाइमर बाधा)। लेकिन यह वास्तविक नहीं है यदि वास्तविक-मोड बूटलोडर स्थिति DRAM के लिए सिर्फ भंडारण नहीं है, बल्कि एक SMI को ट्रिगर करता है।
WB मेमोरी पर, movnti
एक के साथ फ्लशिंग स्टोर lock xor byte [esp], 0
कुछ हद तक फ्लशिंग के साथ है clflushopt
। लेकिन @ Eldan ने WC बनाने के लिए MTRR प्रोग्रामिंग करने के बाद VGA मेमोरी पर उन लोगों के लिए कोई गति सुधार नहीं होने की रिपोर्ट की। (और सामान्य स्टोर करने वाले मूल स्टोर के लिए समान गति, यह दर्शाता है कि डिफ़ॉल्ट रूप से वीजीए फ्रेमबफ़र यूसी था। कुछ पुराने BIOS में वीजीए मेमोरी डब्ल्यूसी बनाने का एक विकल्प था , जिसे उन्होंने यूएसडब्ल्यूसी = अनकैप्ड सट्टा लिखने के संयोजन कहा।)
यह एक वास्तविक दुनिया की समस्या नहीं है, इसलिए मैं वास्तविक वर्कअराउंड की तलाश नहीं कर रहा हूं ; हालांकि यह जानना दिलचस्प होगा कि मैन्युअल रूप से पिक्सेल बाइट्स को वीजीए ग्राफिक्स मोड में स्टोर करना बहुत तेज हो सकता है।
सारांश
- क्या कोई / सभी वास्तविक आधुनिक प्रणालियाँ प्रत्येक दुकान पर पाठ-मोड के फ्रेमबफ़र पर एक SMI ट्रिगर करती हैं?
- यदि नहीं, तो क्या हम WB मेमोरी पर यूजर-स्पेस में एक movnti + कुछ का उपयोग करते हुए फ्रेमबफ़र के लिए WC स्टोर + क्लफश को अनुमानित कर सकते हैं? तो हम आसानी से
perf
प्रदर्शन काउंटर के लिए प्रोफ़ाइल कर सकते हैं । - यदि अलग-अलग BIOS और / या हार्डवेयर अलग-अलग रणनीतियों का उपयोग करते हैं, तो वे रणनीति क्या हैं? (मुझे विवरण नहीं चाहिए, "एसएमआई हर vblank जैसे उच्च स्तर पर वीजीए फ्रेमबफ़र को वास्तविक हार्डवेयर फ्रेमबफ़र सिंक करने के लिए")
- क्या हार्डवेयर के साथ एक पीसीआई या पीसीआई वीडियो कार्ड वीजीए टेक्स्टमोड एकीकृत जीपीयू जो वास्तव में करते हैं, उससे तेज होगा? मुझे लगता है कि एक वास्तविक PCIe लिखने का लेनदेन DRAM को हिट करने के लिए स्टोर की प्रतीक्षा करने की तुलना में धीमा होगा, लेकिन यह कि PCIe लिखना हर दुकान पर SMI से सस्ता होगा। एक ballpark / परिमाण तुलना का क्रम दिलचस्प होगा।
ये प्रश्न सभी बहुत संबंधित हैं, लेकिन मैं इसे विभाजित कर सकता हूं यदि मेरी अपेक्षा के अनुसार अधिक ओवरलैप नहीं है।
perf
क्योंकि लिनक्स अभी तक बूट नहीं हुआ है। लिनक्स-सेंटोस / इंटेल मशीन पर मूल्यांकन एसएमआई (सिस्टम मैनेजमेंट इंटरप्ट) विलंबता में कुछ विवरण हैं कि आप एसएमआई को कैसे गिन सकते हैं।
MSR_SMI_COUNT=0x34
पहले एक काउंटर प्रोग्राम किए बिना RDMSR ।