Deadline scheduler
समय सीमा अनुसूचक लिनक्स कर्नेल के लिए एक आई/ओ अनुसूचक है जिसे 2002 में जेन्स एक्सबो द्वारा लिखा गया था। अवलोकन डेडलाइन शेड्यूलर का मुख्य लक्ष्य किसी अनुरोध के लिए सेवा शुरू करने के समय की गारंटी देना है। यह अनुरोधों की भुखमरी को रोकने के लिए सभी आई/ओ संचालन पर एक समय सीमा लागू करके ऐसा करता है। यह क्रमबद्ध कतारों (पढ़ने और लिखने दोनों) के अलावा दो समय सीमा कतारों को भी बनाए रखता है। समय सीमा कतारों को मूल रूप से उनकी समय सीमा (समाप्ति समय) के अनुसार क्रमबद्ध किया जाता है, जबकि क्रमबद्ध कतारों को क्षेत्र संख्या के अनुसार क्रमबद्ध किया जाता है। अगला अनुरोध करने से पहले, समय सीमा अनुसूचक यह तय करता है कि किस कतार का उपयोग करना है। पढ़ने की कतारों को उच्च प्राथमिकता दी जाती है, क्योंकि प्रक्रियाएं आमतौर पर पढ़ने के संचालन को अवरुद्ध करती हैं। इसके बाद, समय सीमा अनुसूचक जाँच करता है कि समय सीमा कतार में पहला अनुरोध समाप्त हो गया है या नहीं। अन्यथा, अनुसूचक क्रमबद्ध कतार से अनुरोधों का एक समूह प्रदान करता है। दोनों ही मामलों में, अनुसूचक क्रमबद्ध कतार में चुने गए अनुरोध के बाद अनुरोधों का एक समूह भी प्रदान करता है। डिफ़ॉल्ट रूप से, पढ़ने के अनुरोधों का समाप्ति समय 500 एमएस होता है, लिखने के अनुरोध 5 सेकंड में समाप्त हो जाते हैं। अनुसूचक का एक प्रारंभिक संस्करण जनवरी 2002 में जेन्स एक्सबो द्वारा प्रकाशित किया गया था। मापों से पता चला है कि समय सीमा आई/ओ शेड्यूलर कुछ मल्टीथ्रेडेड वर्कलोड के लिए सी. एफ. क्यू आई/ओ शेड्यूलर से बेहतर प्रदर्शन करता है। एस. आई. एस. एफ. एस. ट्यूनेबल फीफो _ बैच (पूर्णांक) समय सीमा "बैचों" की अवधारणा के माध्यम से आई/ओ संचालन (आई. ओ. पी.) को निष्पादित करती है जो क्षेत्र की बढ़ती संख्या के संदर्भ में आदेशित संचालन के समूह हैं। यह ट्यूनेबल निर्धारित करता है कि डिस्क पर अनुरोधों की कतार लगने से पहले एक बैच कितना बड़ा होना चाहिए (वर्तमान में निर्मित बैच की समाप्ति को छोड़कर)। छोटे बैच यह सुनिश्चित करके विलंबता को कम कर सकते हैं कि नए अनुरोधों को जल्द से जल्द निष्पादित किया जाए (संभवतः अधिक अनुरोधों के आने की प्रतीक्षा करने के बजाय), लेकिन ड्राइव हेड की समग्र गति को बढ़ाकर समग्र थ्रूपुट को कम कर सकते हैं (क्योंकि अनुक्रमण एक बैच के भीतर होता है न कि उनके बीच)। इसके अतिरिक्त, यदि आई. ओ. पी. की संख्या काफी अधिक है तो बैचों को वैसे भी समय पर निष्पादित किया जाएगा। रीड _ एक्सपायर (पूर्णांक) 'रीड _ एक्सपायर' समय मिलीसेकंड में अधिकतम समय है जिसके बाद रीड को 'एक्सपायर' माना जाता है। इसे दूध के डिब्बे पर समाप्ति तिथि की तरह सोचें। समाप्ति तिथि से पहले दूध का सबसे अच्छा उपयोग किया जाता है। डेडलाइन शेड्यूलर के साथ भी ऐसा ही है। यह सुनिश्चित करने का प्रयास नहीं करेगा कि सभी आई. ओ. इसकी समाप्ति तिथि से पहले जारी किए गए हैं। हालाँकि, यदि आई. ओ. की अवधि समाप्त हो चुकी है, तो इसे प्राथमिकता में उछाल मिलता है। सावधानियों के साथ। पढ़ने की समाप्ति कतार की जाँच केवल तभी की जाती है जब समय सीमा अनुसूचक पढ़ने की कतार का पुनः मूल्यांकन करता है। रीड्स के लिए इसका मतलब है कि हर बार स्ट्रीमिंग io के मामले को छोड़कर एक सॉर्ट किए गए रीड को भेजा जाता है। जबकि शेड्यूलर पढ़ने की कतार से io स्ट्रीमिंग कर रहा है, पढ़ने की अवधि समाप्त होने का मूल्यांकन नहीं किया जाता है। जब पढ़ने की कतार का पुनर्मूल्यांकन किया जाता है, तो यह देखने के लिए कि क्या कैश किए गए रीड पॉइंटर वैध हैं (इसलिए स्ट्रीमिंग नहीं होने पर भी, कैश किए गए पॉइंटर को प्राथमिकता दी जाती है ताकि क्रमबद्ध कतार को एक स्वीप में टिप से टेल तक पार किया जा सके) क्रमबद्ध कतार से पहले रीड को उठाएं (दूसरे स्वीप के लिए फिर से टिप से शुरू करें) यदि समाप्त हो चुके रीड हैं, तो पहले वाले को फीफो से खींच लिया जाता है। ध्यान दें कि यह एक्सपायर रीड तो रीड सॉर्ट ऑर्डरिंग के लिए नया नेक्सस है। कैश किए गए अगले पॉइंटर को इस एक्सपायर होने के बाद सॉर्ट कतार से अगले io की ओर इंगित करने के लिए सेट किया जाएगा। ध्यान देने वाली बात यह है कि एल्गोरिथ्म केवल अपनी समाप्ति तिथि पार करने के बाद सभी समाप्त होने वाले आई. ओ. को निष्पादित नहीं करता है। यह समय सीमा समाप्त होने के बाद पढ़ने की कतार को फिर से देखने से पहले 'राइट _ स्टार्व्ड' क्रमबद्ध रीड्स को एक साथ जोड़कर कुछ उचित प्रदर्शन बनाए रखने की अनुमति देता है। तो, पढ़ने की अवधि समाप्त होने के बीच किए जा सकने वाले io की अधिकतम संख्या 2 * 'फिफो _ बैच' * 'राइट्स _ स्टार्व्ड' है। 'फिफो _ बैच' स्ट्रीमिंग का एक सेट पहले समाप्त होने के बाद पढ़ा जाता है और यदि यह स्ट्रीम लेखन की भूख की स्थिति का कारण बनती है, तो संभवतः एक और 'फिफो _ बैच' स्ट्रीमिंग लिखती है। यह बदतर स्थिति है, जिसके बाद पढ़ने की अवधि समाप्त होने वाली कतार का पुनर्मूल्यांकन किया जाएगा। सबसे अच्छा, समाप्त हो चुकी पढ़ने की कतार को छोड़ने से पहले एक पंक्ति में 'लिखें _ भूखे' समय का मूल्यांकन किया जाएगा क्योंकि लिखने की कतार का उपयोग किया जाएगा। लिखें _ एक्सपायर (पूर्णांक) पढ़ने _ एक्सपायर के लिए समान है लेकिन लेखन संचालन के लिए (रीड्स से अलग बैचों में समूहीकृत)। जैसा कि पहले कहा गया है, समय सीमा लिखने के बजाय पढ़ना पसंद करती है। नतीजतन, यह ऐसी स्थितियों को जन्म दे सकता है जहां संचालन को निष्पादित किया जाता है और लगभग पूरी तरह से पढ़ा जाता है। यह एक महत्वपूर्ण ट्यूनेबल बन जाता है क्योंकि लिखें _ एक्सपायर लंबा होता है या समग्र बैंडविड्थ संतृप्ति तक पहुंचता है। इसे कम करने से पढ़ने के संचालन की कीमत पर लिखने (अपेक्षाकृत बोलने) के लिए अधिक बैंडविड्थ मिलती है। यदि अनुप्रयोग कार्य-भार, हालांकि, केवल कभी-कभार लिखने के साथ पढ़ने में भारी है (उदाहरण के लिए अधिकांश एचटीटीपी या निर्देशिका सर्वर), तो इसे बढ़ाकर औसत आईओपी की विलंबता में कमी हासिल की जा सकती है (ताकि डिस्क पर लिखने वाले समूह की कतार से पहले अधिक पढ़ने की आवश्यकता हो)। फ्रंट _ मर्ज (बूल पूर्णांक) एक "फ्रंट मर्ज" एक ऑपरेशन है जहां आई/ओ शेड्यूलर, छोटे अनुरोधों को कम (बड़े) संचालन में संघनित (या "विलय") करने की मांग करता है, एक नया ऑपरेशन करेगा फिर सक्रिय बैच की जांच करेगा और संचालन का पता लगाने का प्रयास करेगा जहां प्रारंभिक क्षेत्र समान है या किसी अन्य ऑपरेशन के शुरुआती क्षेत्र के तुरंत बाद है। एक "बैक मर्ज" इसके विपरीत है, जहां सक्रिय बैच में अंतिम क्षेत्रों को उन क्षेत्रों के लिए खोजा जाता है जो या तो समान हैं या वर्तमान संचालन के शुरुआती क्षेत्रों के तुरंत बाद हैं। विलय वर्तमान बैच से सक्रिय बैच में संचालन को मोड़ता है, जिससे थ्रूपुट बढ़ाने के लिए "निष्पक्षता" कम हो जाती है। जिस तरह से फाइलों को आम तौर पर रखा जाता है, उसके कारण पीछे के विलय सामने के विलय की तुलना में बहुत अधिक आम हैं। कुछ काम के बोझ के लिए, आपको यह भी पता हो सकता है कि अनुरोधों को विलय करने के प्रयास में किसी भी समय बिताना समय की बर्बादी है। फ्रंट _ मर्ज को 0 पर सेट करने से यह कार्यक्षमता अक्षम हो जाती है। सामने का विलय अभी भी कैश किए गए लास्ट _ मर्ज संकेत के कारण हो सकता है, लेकिन चूंकि यह मूल रूप से शून्य लागत पर आता है, इसलिए यह अभी भी किया जाता है। यह बूलियन केवल फ्रंट सेक्टर लुकअप को अक्षम कर देता है जब I/O शेड्यूलर मर्जिंग फंक्शन को कॉल किया जाता है। डिस्क विलय योग प्रति-ब्लॉक उपकरण/प्रोक/डिस्कस्टैट्स में दर्ज किए जाते हैं। अन्य आई/ओ शेड्यूलर सी. एफ. क्यू. शेड्यूलर पूर्वसूचक शेड्यूलर नोअप शेड्यूलर संदर्भ डिस्क शेड्यूलिंग एल्गोरिदम