विंडोज ओएस क्वांटम बनाम एसक्यूएल ओएस क्वांटम


19

सरल प्रश्न

SQL सर्वर क्वांटम (4 एमएस) सर्वर ओएस क्वांटम (सामान्य रूप से: 187.5 एमएस) के साथ कैसे सिंक्रनाइज़ किया जाता है?

सरल प्रश्न समझाया

184 एमएस के बाद ओएस क्वांटम का उपयोग किया जा रहा है (जो 46 पूर्ण SQL क्वांटम से मेल खाता है) ओएस क्वांटम के पास 3.5 एमएस समय है इससे पहले कि इसे एक अलग प्रक्रिया के लिए शेड्यूल को सौंपना होगा। एसक्यूएल ओएस एक क्वांटम (4 एमएस) शुरू करता है और 3.5 एमएस के बाद, ओएस क्वांटम ने वर्तमान एसक्यूएल ओएस थ्रेड को रोकने का फैसला किया है जो अभी भी 0.5 एमएस है इससे पहले कि यह शेड्यूल प्राप्त होगा। अब क्या हुआ?


ओएस क्वांटम पर गहरा गोता

अगले कुछ खंडों में मैं लिखूंगा कि मैंने ओएस क्वांटम के बारे में अब तक क्या पाया है और एक क्वांटम की अवधि की गणना कैसे की जा सकती है। एक OS "क्वांटम" की अवधि "टिक्स" पर आधारित होती है और "टिक" की अवधि स्वयं "क्लॉक अंतराल" पर आधारित होती है, जो सामान्य रूप से 15.625000 एमएस है। लेकिन मुझे थोड़ा विस्तार दें ...

टिकटिक

ब्लॉग लेख नो थिक टिक में लेखक जिम घड़ी अंतराल (उर्फ "टिक्स") की मूल बातें बताते हैं और वे किस लिए हैं।

जब मैंने कुछ पढ़ा जैसे "घड़ी का अंतराल ... अधिकांश x86 मल्टीप्रोसेसर के लिए लगभग 15 मिलीसेकंड है" तो मैं अपनी घड़ी के मूल्य, या "टिक", अंतराल को निर्धारित करने के लिए मजबूर हूं। सौभाग्य से, मैं जिस पुस्तक में यह उद्धरण पढ़ता हूं, विंडोज इंटर्ल्स फोर्थ एडिशन मुझे मेरे दुःख में मदद करने के लिए एक संदर्भ प्रदान करता है। ... उपरोक्त पुस्तक के लेखक, मार्क रोसिनोविच ने बड़े ही विनम्रता से उपयोगिताएँ बनाई हैं । इस उपयोगिता को चलाने पर, मैं यह निर्धारित करने में सक्षम था कि मेरे x86 मल्टीप्रोसेसर पीसी पर घड़ी का अंतराल 15.625000 एमएस है। दिलचस्प है, लेकिन मेरा जिज्ञासु मन अधिक जानना चाहता है।

मात्रा

लेख का लेखक अपने दूसरे लेख में व्याख्या करता है उस...

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

ठीक है, तो मुझे पता है कि क्वांटम क्या है, लेकिन क्वांटम कब तक चलेगा।

अभी के लिए, आइए एक्सपी में अग्रभूमि धागे के लिए डिफ़ॉल्ट क्वांटम मान की जांच करें। इस मामले में विंडोज शेड्यूलर 18 या 6 टिक अंतरालों की मात्रा प्रदान करता है। (हाँ, क्वांटम को टिक अंतराल में बदलने के लिए, किसी को 3. से विभाजित करना होगा ... लेकिन, कई का कारण अनुसूचक को एक ऑपरेशन करने के लिए एक थ्रेड "चार्ज" करने की क्षमता प्रदान करने की अनुमति देता है जो इसे निलंबित करने का कारण बनता है।)

अब हम जानते हैं कि एक घड़ी अंतराल (टिक) लगभग 15.625000 एमएस और विंडोज डेस्कटॉप ओएस पर होना चाहिए, जहां डिफ़ॉल्ट क्वांटम 18 है, जिसके परिणामस्वरूप 6 टिक या 93.750000 एमएस (18/3 * 15.625000 एमएस) होंगे।

Windows सर्वर OS पर डिफ़ॉल्ट क्वांटम अलग है। "प्रोसेसर शेड्यूलिंग" सेटिंग "पृष्ठभूमि सेवाओं" पर सेट है

यह सेटिंग "सिस्टम सेटिंग्स | एडवांस्ड (टैब) | परफॉर्मेंस (सेक्शन) | सेटिंग्स ..." के माध्यम से पाई जा सकती है, जो "पेरोप्रमेंस ऑप्शंस: एडवांस्ड (टैब) ओपन करेगी। प्रोसेसर शेड्यूलिंग"

डिफ़ॉल्ट क्वांटम सेटिंग्स 36 (पृष्ठभूमि) से 36 (फोरग्राउंड) हैं। क्वांटम बड़ा है और इसलिए लंबा है। यह विंडोज डेस्कटॉप ओएस पर 18 (6 टिक) क्वांटम अग्रभूमि सेटिंग के 93.750000 एमएस की मात्रा दोगुनी है, जो पृष्ठभूमि सेवाओं के लिए सेट किए गए सर्वर ओएस पर लगभग 187.500000 एमएस है।

अवलोकन / स्पष्टीकरण

जब आप किसी सर्वर या डेस्कटॉप पर "बैकग्राउंड सर्विसेज" से सेटिंग को "एप्लीकेट्स" में बदलते हैं, तो रजिस्ट्री में HKLM \ SYSTEM \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparit को 0x18 से 0x02 में बदल दिया जाता है। 0x02 के लिए डिफ़ॉल्ट क्वांटम मान क्या है? यह एक टिप्पणी में पाया जा सकता है:

0x02 मान का अर्थ है कि "लघु बनाम दीर्घ" और "परिवर्तनीय बनाम निश्चित" फ़ील्ड OS के लिए डिफ़ॉल्ट हैं।

XPe & XP प्रो के लिए इन क्षेत्रों के लिए डिफ़ॉल्ट है: लघु और परिवर्तनीय जो निम्न बिट्स अतिरिक्त बिट्स सेट करने के समान है: 02424।

इस मान को 0x02 के साथ रखने से आपको 0x26 मिलता है, जो आपको लेख में तालिका में मिलेगा।

संदर्भ: "मास्टर योर क्वांटम" (MSDN ब्लॉग) पर टिप्पणी करें

एक ही लेख से क्वांटम सेटिंग्स की व्याख्या करने वाली तालिका:

Win32PrioritySeparation   Foreground   Background
0x28, 0x29, 0x2A                  18           18
0x18, 0x19, 0x1A                  36           36
0x24                               6            6
0x25, 0x14                        12            6
0x26                              18            6
0x15                              24            6
0x16                              36            6

ओएस क्वांटम का संक्षिप्त सारांश

उपरोक्त जानकारी और लेख के उद्धरणों के आधार पर, हम जानते हैं कि एक क्वांटम एक निश्चित आकार नहीं है, बल्कि सिस्टम गुणों में एक ओएस सेटिंग से लिया गया है। एक क्वांटम Win32PrioritySeparationरजिस्ट्री में सेटिंग के आधार पर भिन्न होती है जो सामान्य रूप से "सिस्टम गुण" (या तो "पृष्ठभूमि सेवाओं" या "एप्लिकेशन") में से एक से मेल खाती है।

OS स्तर पर एक क्वांटम है

  • "एप्लिकेशन" सेटिंग के लिए
    • अग्रभूमि अनुप्रयोगों के लिए 18 (जो 6 टिक्स हैं) (93.75 एमएस)
    • पृष्ठभूमि अनुप्रयोगों के लिए 6 (जो 2 टिक है) (31.25 एमएस)
  • "पृष्ठभूमि सेवा" सेटिंग के लिए
    • अग्रभूमि अनुप्रयोगों के लिए 36 (जो कि 18 टिक है)
    • पृष्ठभूमि अनुप्रयोगों के लिए 36 (जो 18 टिक है)

तो अब हम जानते हैं कि बैकग्राउंड सर्विसेज के लिए ऑप्टिमाइज़ होने के लिए विंडोज सर्वर सेटअप पर एक ओएस क्वांटम है ...

36 / 3 * 15.625000 ms = 187.5 ms

एसक्यूएल ओएस क्वांटम

इस अनुभाग में सूचीबद्ध है कि मैंने SQL OS क्वांटम पर क्या पाया है ...

SOS_SCHEDULER_YIELD प्रतीक्षा प्रकार

SOS_SCHEDULER_YIELD प्रतीक्षा प्रकार पर पॉल रान्डेल के विवरण से:

यह प्रतीक्षा प्रकार तब होता है जब कोई थ्रेड अपने पूर्ण थ्रेड क्वांटम (SQL सर्वर के सभी संस्करणों में 4 मिलीसेकंड, अपरिवर्तनीय ) के लिए निष्पादित करने में सक्षम था , और इसलिए शेड्यूलर से स्वेच्छा से, शेड्यूलर कतार के निचले भाग में जा रहा है।

संदर्भ: SOS_SCHEDULER_YIELD (SQLSkills.com प्रतीक्षा प्रकार)

SQL सर्वर DMV में शेड्यूलर

SQL सर्वर DMV पर sysinos_os_schedulers DMV के स्पष्टीकरण में।

[...] विंडोज प्रीमेप्टिव शेड्यूलिंग मैकेनिज्म का उपयोग करता है और प्रत्येक थ्रेड को सीपीयू समय का एक क्वांटम असाइन करता है, जब एक थ्रेड अपने क्वांटम का उपभोग करता है तो इसे एक कतार में भेजा जाता है और अन्य थ्रेड्स को निष्पादन प्रदान किया जाता है।

विरोध में, SQL सर्वर सहकारी शेड्यूलिंग तंत्र का उपयोग करता है, जब थ्रेड स्वैच्छिक रूप से अपने समय की मात्रा प्राप्त कर सकते हैं (आप इस व्यवहार को तब देख सकते हैं जब आपके पास SOS_SCHEDULER_YIELD प्रतीक्षा प्रकार है)। यह SQL सर्वर को CPU उपयोग को अनुकूलित करने की अनुमति देता है, क्योंकि जब किसी थ्रेड को निष्पादन के लिए संकेत दिया जाता है, लेकिन इसे चलाने के लिए तैयार नहीं होता है, तो यह अन्य थ्रेड्स के पक्ष में अपने समय की मात्रा प्राप्त कर सकता है

संदर्भ: SQL सर्वर शेड्यूलर, वर्कर्स और टास्क (MSSQLTips.com) को समझना

SQL सर्वर CPU दबाव का पता लगाएं

यह SQL सर्वर में CPU दबाव के बारे में एक लेख का एक बहुत छोटा खंड है।

तब होता है जब कोई कार्य स्वेच्छा से अन्य कार्यों को निष्पादित करने के लिए अनुसूचक का उत्पादन करता है। इस प्रतीक्षा के दौरान यह कार्य अपने परिमाण के नवीनीकरण की प्रतीक्षा कर रहा है

संदर्भ: SQL सर्वर CPU दबाव (MSSQLTips.com) का पता लगाएं

sysinos_os_schedulers (Microsoft डॉक्स)

मुझे लगता है कि निम्नलिखित उद्धरण SQL OS क्वांटम के बारे में सबसे महत्वपूर्ण जानकारी है जो मुझे मिल सकती है:

quantum_length_us bigint  Identified for informational purposes only. 
                          Not supported. Future compatibility is not guaranteed. 
                          Exposes the scheduler quantum used by SQLOS.

संदर्भ: sysinos_os_schedulers (Transact-SQL) (Microsoft | डॉक्स)


मेरे कोन्ड्रम

सर्वर OS क्वांटम यह बताता है कि "कार्य" को निष्पादित करने के लिए SQL सर्वर सेवा को कितना समय दिया गया है। SQL सर्वर OS क्वांटम 4 एमएस के रूप में परिभाषित किया गया है। यदि मैं 187.5 एमएस को 4 एमएस से विभाजित करता हूं तो मुझे 3.5 एमएस के साथ छोड़ दिया जाता है।

और हमने यह चर्चा भी शुरू नहीं की है कि क्लॉक इंटरवल 15.625000 एमएस के डिफ़ॉल्ट के अलावा किसी और चीज़ के लिए कब सेट है।

सरल प्रश्न

SQL सर्वर क्वांटम (4 एमएस) सर्वर ओएस क्वांटम (सामान्य रूप से: 187.5 एमएस) के साथ कैसे सिंक्रनाइज़ किया जाता है?

सरल प्रश्न समझाया

184 एमएस के बाद ओएस क्वांटम का उपयोग किया जा रहा है (जो 46 पूर्ण SQL क्वांटम से मेल खाता है) ओएस क्वांटम के पास 3.5 एमएस समय है इससे पहले कि इसे एक अलग प्रक्रिया के लिए शेड्यूल को सौंपना होगा। एसक्यूएल ओएस एक क्वांटम (4 एमएस) शुरू करता है और 3.5 एमएस के बाद, ओएस क्वांटम ने वर्तमान एसक्यूएल ओएस थ्रेड को रोकने का फैसला किया है जो अभी भी 0.5 एमएस है इससे पहले कि यह शेड्यूल प्राप्त होगा। अब क्या हुआ?

जवाबों:


13

हालाँकि, शेड्यूलर प्रीमेक्टिव नहीं है, फिर भी SQL सर्वर शेड्यूलर एक क्वांटम की अवधारणा का पालन करता है। SQL सर्वर कार्यों की तुलना में ऑपरेटिंग सिस्टम द्वारा सीपीयू को छोड़ने के लिए मजबूर किया जाता है, वे समय-समय पर प्रतीक्षा कतार में रखने का अनुरोध कर सकते हैं, और यदि वे आंतरिक रूप से परिभाषित 4 मिलीसेकंड क्वांटम से अधिक हो गए हैं और एक ऑपरेशन के बीच में नहीं हैं रोका नहीं जा सकता है, वे स्वेच्छा से सीपीयू को त्यागते हैं।

- " माइक्रोसॉफ्ट एसक्यूएल सर्वर 2012 इंटर्नल्स", केलेन डेलानी एट। अल। pp38

-चार 2 "द SQLOS" जोनाथन केहियास

तो SQL सर्वर के अंदर एक "क्वांटम" की धारणा प्रोग्रामिंग कार्यों के लिए एक "दिशानिर्देश" की अधिक है। IE जब आप कोई कार्य लिखते हैं, जैसे कहते हैं, एक कार्य जो टेबल स्कैन करता है, यदि आप किसी भी पृष्ठ को नहीं मारते हैं, IO कुंडी, या थोड़ी देर के लिए प्रतीक्षा करता है, तो आपको रोकना चाहिए कि आप क्या कर रहे हैं और क्या होना चाहिए यदि अन्य कार्य प्रतीक्षा कर रहे हों, तो उसे वापस चलने योग्य कतार में रख दें।

लेकिन इसे लागू करने के लिए कार्य प्रोग्रामर पर निर्भर है, और यह प्रत्येक प्रकार के कार्य के लिए बिल्कुल 4ms नहीं हो सकता है । उदाहरण के लिए टेबल स्कैन कार्य उपज अंक को लागू करने के लिए स्कैन किए गए पृष्ठों की संख्या के आधार पर एक साधारण अनुमानी का उपयोग कर सकता है।

इसलिए

एसक्यूएल ओएस एक क्वांटम (4 एमएस) शुरू करता है और 3.5 एमएस के बाद, ओएस क्वांटम ने वर्तमान एसक्यूएल ओएस थ्रेड को रोकने का फैसला किया है जो अभी भी 0.5 एमएस है इससे पहले कि यह शेड्यूल प्राप्त होगा। अब क्या हुआ?

यदि SQL सर्वर थ्रेड Windows द्वारा पूर्व-खाली है, जबकि कोई कार्य चल रहा है, तो इसे रोक दिया जाएगा, और जब इसका थ्रेड अगली बार CPU पर शेड्यूल किया जाएगा तो यह जारी रहेगा जहां इसे छोड़ा गया है। संभवत: यह अपने 4ms क्वांटम के संतुलन को जारी रखेगा, क्योंकि इससे कोई अंतर नहीं पता चलेगा। लेकिन फिर से, उपज व्यवहार कार्य का कार्यान्वयन विवरण है, एसक्यूएल का व्यवहार नहीं है, इसलिए विभिन्न कार्य यहां भिन्न व्यवहार कर सकते हैं।


4

उत्तर योगदान मूल रूप से टिप्पणियों के रूप में छोड़ दिया गया

SQL सर्वर क्वांटम (4 एमएस) सर्वर ओएस क्वांटम (सामान्य रूप से: 187.5 एमएस) के साथ कैसे सिंक्रनाइज़ किया जाता है?

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

जब ओएस क्वांटम की अवधि समाप्त हो जाती है तो थ्रेड को जबरदस्ती निरस्त कर दिया जाता है। यह SQL सर्वर के लिए पारदर्शी है। SQLOS का पता लगाने का कोई तरीका नहीं है जब ऐसा होता है। उसके लिए कोई Win32 API नहीं है। शेड्यूलिंग उपयोगकर्ता मोड थ्रेड्स के लिए पारदर्शी है। विंडोज अनुसूचक को पता नहीं है या परवाह नहीं है कि उपयोगकर्ता मोड थ्रेड्स क्या कर रहे हैं। विंडोज़ केवल उन थ्रेड्स को देखता है जो चलने योग्य होते हैं और उन्हें अपने OS क्वांटम के अंत तक या ब्लॉक होने तक चलने देते हैं। - usr

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


प्रलेखन से अर्क: SQL सर्वर 2000 उपयोगकर्ता मोड अनुसूचक के अंदर (SQL सर्वर 2000 के लिए लिखा है, लेकिन अभी भी प्रासंगिक है):

प्रीमेप्टिव बनाम कोऑपरेटिव टास्किंग

यूएमएस, इसके विपरीत, स्वेच्छा से उपज के लिए धागे पर निर्भर करता है। UMS विंडोज कर्नेल को पूरी तरह से आवश्यकता से अधिक शामिल करने के लिए यह दृष्टिकोण लेता है। एक ऐसी प्रणाली में जहां मजदूरों के धागों को पैदावार के रूप में गिना जा सकता है, जब उन्हें चाहिए, एक सहकारी अनुसूचक वास्तव में एक पूर्वगामी की तुलना में अधिक कुशल हो सकता है क्योंकि शेड्यूलिंग प्रक्रिया को एप्लिकेशन की विशिष्ट आवश्यकताओं के अनुरूप बनाया जा सकता है। जैसा कि मैंने पहले कहा था, UMS जानता है कि ऑपरेटिंग सिस्टम की तुलना में SQL सर्वर की समयबद्धता की जरूरत बेहतर हो सकती है।

UMS शेड्यूलिंग पर कैसे ले जाता है

अगर UMS को Windows को ऐसा करने की अनुमति देने के बजाय SQL सर्वर की शेड्यूलिंग की जरूरतों को संभालना है, तो UMS को किसी भी तरह से OS को हर दूसरी प्रक्रिया के साथ ऐसा करने से रोकना चाहिए: सिस्टम के प्रोसेसर पर थ्रेड शेड्यूल करें और बंद करें जैसा कि वह ठीक है। आप कैसे करते हैं कि एक प्रारंभिक ओएस में? UMS ने विंडोज इवेंट ऑब्जेक्ट्स के साथ कुछ चालाक ट्रिक के माध्यम से इसे खींच लिया। UMS के अंतर्गत प्रत्येक थ्रेड में एक संबद्ध ईवेंट ऑब्जेक्ट होता है। शेड्यूलिंग के प्रयोजनों के लिए, विंडोज थ्रेड्स को अनदेखा करता है, यह व्यवहार्य नहीं मानता है-वे धागे जो नहीं चल सकते क्योंकि वे एक अनंत प्रतीक्षा अवस्था में हैं। यह जानकर, UMS सोने के लिए धागे लगाता है कि वह अपने संबंधित ईवेंट ऑब्जेक्ट पर WaitForSingleObject को कॉल करके और टाइमआउट मान के लिए INFINITE पास करके शेड्यूल नहीं करना चाहता है ।

एक ही प्रोसेसर पर विंडोज को कई थ्रेड्स शेड्यूल करने से रोकने के लिए और इस तरह संदर्भ स्विच के ओवरहेड और खर्च को रोकने के लिए, यूएमएस केवल एक थ्रेड को व्यवहार्य रखने का प्रयास करता है - जो कि एक अनन्त प्रतीक्षा स्थिति में नहीं है- प्रति प्रोसेसर।

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