Deadline scheduler
காலக்கெடுவை திட்டமிடுபவர் லினக்ஸ் கர்னலுக்கான I/O திட்டமிடுபவர், இது 2002 இல் ஜென்ஸ் ஆக்ஸ்போவால் எழுதப்பட்டது. கண்ணோட்டம் காலக்கெடுவை திட்டமிடுபவரின் முக்கிய குறிக்கோள் ஒரு கோரிக்கைக்கு ஒரு தொடக்க சேவை நேரத்தை உறுதி செய்வதாகும். கோரிக்கைகள் பட்டினியால் வாடுவதைத் தடுக்க அனைத்து ஐ/ஓ செயல்பாடுகளுக்கும் காலக்கெடுவை விதிப்பதன் மூலம் இது அவ்வாறு செய்கிறது. வரிசைப்படுத்தப்பட்ட வரிசைகளுக்கு (படிக்கவும் எழுதவும்) கூடுதலாக, இது இரண்டு காலக்கெடுவை பராமரிக்கிறது. காலக்கெடு வரிசைகள் அடிப்படையில் அவற்றின் காலக்கெடுவால் (காலாவதி நேரம்) வரிசைப்படுத்தப்படுகின்றன, அதே நேரத்தில் வரிசைப்படுத்தப்பட்ட வரிசைகள் துறை எண்ணால் வரிசைப்படுத்தப்படுகின்றன. அடுத்த கோரிக்கையை வழங்குவதற்கு முன், எந்த வரிசையைப் பயன்படுத்த வேண்டும் என்பதை காலக்கெடுவை திட்டமிடுபவர் தீர்மானிக்கிறார். வாசிப்பு வரிசைகளுக்கு அதிக முன்னுரிமை அளிக்கப்படுகிறது, ஏனெனில் செயல்முறைகள் பொதுவாக வாசிப்பு செயல்பாடுகளைத் தடுக்கின்றன. அடுத்து, காலக்கெடுவின் வரிசையில் முதல் கோரிக்கை காலாவதியாகிவிட்டதா என்பதை காலக்கெடுவின் திட்டமிடுபவர் சரிபார்க்கிறார். இல்லையெனில், திட்டமிடுபவர் வரிசைப்படுத்தப்பட்ட வரிசையிலிருந்து ஒரு தொகுதி கோரிக்கைகளுக்கு சேவை செய்கிறார். இரண்டு நிகழ்வுகளிலும், வரிசைப்படுத்தப்பட்ட வரிசையில் தேர்ந்தெடுக்கப்பட்ட கோரிக்கையைத் தொடர்ந்து திட்டமிடுபவர் ஒரு தொகுதி கோரிக்கைகளையும் வழங்குகிறார். முன்னிருப்பாக, வாசிப்பு கோரிக்கைகள் 500 எம்எஸ் காலாவதி நேரத்தைக் கொண்டுள்ளன, எழுதும் கோரிக்கைகள் 5 வினாடிகளில் காலாவதியாகின்றன. திட்டமிடுபவரின் ஆரம்ப பதிப்பு ஜனவரி 2002 இல் ஜென்ஸ் ஆக்ஸ்போவால் வெளியிடப்பட்டது. காலக்கெடு I/O திட்டமிடுபவர் சில பன்முகப்படுத்தப்பட்ட பணிச்சுமைகளுக்கு CFQ I/O திட்டமிடுபவரை விட சிறப்பாக செயல்படுகிறார் என்பதை அளவீடுகள் காட்டுகின்றன. sysfs ட்யூனபிள்ஸ் ஃபிஃபோ _ பேட்ச் (முழு எண்) காலக்கெடு ஐ/ஓ செயல்பாடுகளை (ஐஓபி) "தொகுதிகள்" என்ற கருத்தாக்கத்தின் மூலம் செயல்படுத்துகிறது, அவை அதிகரித்து வரும் துறை எண்ணிக்கையின் அடிப்படையில் வரிசைப்படுத்தப்பட்ட செயல்பாடுகளின் தொகுப்புகளாகும். வட்டில் கோரிக்கைகள் வரிசைப்படுத்தப்படுவதற்கு முன்பு ஒரு தொகுதி எவ்வளவு பெரியதாக இருக்க வேண்டும் என்பதை இந்த ட்யூனபிள் தீர்மானிக்கிறது (தற்போது கட்டப்பட்ட தொகுதியின் காலாவதி தவிர). சிறிய தொகுதிகள் புதிய கோரிக்கைகள் விரைவில் செயல்படுத்தப்படுவதை உறுதி செய்வதன் மூலம் தாமதத்தைக் குறைக்கலாம் (அதிக கோரிக்கைகள் வருவதற்கு காத்திருப்பதை விட), ஆனால் இயக்கி தலைகளின் ஒட்டுமொத்த இயக்கத்தை அதிகரிப்பதன் மூலம் ஒட்டுமொத்த செயல்திறனை குறைக்கலாம் (ஏனெனில் வரிசைமுறை ஒரு தொகுதிக்குள் நிகழ்கிறது, அவற்றுக்கிடையே அல்ல). கூடுதலாக, ஐஓபிகளின் எண்ணிக்கை போதுமானதாக இருந்தால், தொகுதிகள் எப்படியும் சரியான நேரத்தில் செயல்படுத்தப்படும். ரீட் _ எக்ஸ்பைர் (முழு எண்) 'ரீட் _ எக்ஸ்பைர்' நேரம் என்பது மில்லி விநாடிகளில் அதிகபட்ச நேரமாகும், அதன் பிறகு ரீட் 'காலாவதியானது' என்று கருதப்படுகிறது. இதை ஒரு பால் அட்டைப்பெட்டியில் காலாவதி தேதி போல நினைத்துப் பாருங்கள். காலாவதி தேதிக்கு முன் பால் பயன்படுத்துவது சிறந்தது. காலக்கெடுவை திட்டமிடுபவருக்கும் இதே நிலைதான். அனைத்து ஐஓக்களும் அதன் காலாவதி தேதிக்கு முன்னர் வழங்கப்படுவதை உறுதி செய்ய இது முயற்சிக்காது. இருப்பினும், ஐஓ கடந்த காலாவதியானது என்றால், அது முன்னுரிமையில் ஒரு பம்ப் பெறுகிறது. எச்சரிக்கைகளுடன். காலக்கெடுவை திட்டமிடுபவர் வாசிப்பு வரிசையை மறு மதிப்பீடு செய்யும் போது மட்டுமே வாசிப்பு காலாவதி வரிசை சரிபார்க்கப்படுகிறது. ரீட்களுக்கு இது ஒவ்வொரு முறையும் ஸ்ட்ரீமிங் ஐஓ தவிர ஒரு வரிசைப்படுத்தப்பட்ட ரீட் அனுப்பப்படும். திட்டமிடுபவர் வாசிப்பு வரிசையில் இருந்து io ஐ ஸ்ட்ரீமிங் செய்யும் போது, வாசிப்பு காலாவதியானது மதிப்பீடு செய்யப்படவில்லை. ரீட் வரிசையை மறு மதிப்பீடு செய்யும் போது, காலாவதியான ரீட்களைச் சரிபார்க்க வேண்டும் (ஃபிஃபோ [நேர வரிசை] வரிசையின் தலைப்பைப் பார்க்கவும்) தற்காலிக சேமிப்பு ரீட் சுட்டிக்காட்டி செல்லுபடியாகுமா என்பதைச் சரிபார்க்கவும் (எனவே ஸ்ட்ரீமிங் இல்லையென்றாலும், தற்காலிக சேமிப்பு சுட்டிக்காட்டி இன்னும் முன்னுரிமை பெறுகிறது, எனவே வரிசைப்படுத்தப்பட்ட வரிசை ஒரு ஸ்வீப்பில் முனை முதல் வால் வரை பயணிக்கப்படுகிறது) வரிசைப்படுத்தப்பட்ட வரிசையில் இருந்து முதல் ரீட்டை எடுக்கவும் (மற்றொரு ஸ்வீப்பிற்காக மீண்டும் முனையில் தொடங்கவும்) காலாவதியான ரீட்கள் இருந்தால், முதல் ரீட் ஃபிஃபோவிலிருந்து இழுக்கப்படும். இந்த காலாவதியான ரீட் பின்னர் ரீட் வரிசைப்படுத்தலுக்கான புதிய நெக்ஸஸ் என்பதை நினைவில் கொள்க. இந்த காலாவதியான பிறகு வரிசைப்படுத்தப்பட்ட வரிசையிலிருந்து அடுத்த ஐஓவை சுட்டிக்காட்ட தற்காலிக சேமிப்பு அடுத்த சுட்டிக்காட்டி அமைக்கப்படும். கவனிக்க வேண்டிய விஷயம் என்னவென்றால், அல்காரிதம் காலாவதியான அனைத்தையும் அவற்றின் காலாவதி தேதியைக் கடந்தவுடன் செயல்படுத்தாது. காலாவதியான வாசிப்பு வரிசையை மீண்டும் சரிபார்க்கும் முன் 'எழுத _ பட்டி' வரிசைப்படுத்தப்பட்ட வாசிப்புகளை ஒன்றாக தொகுப்பதன் மூலம் சில நியாயமான செயல்திறனை பராமரிக்க இது அனுமதிக்கிறது. எனவே, காலாவதியான io வாசிப்புக்கு இடையில் செய்யக்கூடிய io இன் அதிகபட்ச எண்ணிக்கை 2 * 'ஃபிஃபோ _ பேட்ச்' * 'ரைட்ஸ் _ ஸ்டார்வேட்' ஆகும். 'ஃபிஃபோ _ பேட்ச்' ஸ்ட்ரீமிங்கின் ஒரு தொகுப்பு முதல் காலாவதியான ரீட் ஐஓக்குப் பிறகு படிக்கிறது, மேலும் இந்த ஸ்ட்ரீம் எழுதும் பட்டினியால் ஏற்பட்டால், மற்றொரு 'ஃபிஃபோ _ பேட்ச்' ஸ்ட்ரீமிங் எழுதுகிறது. இது மோசமானது, அதன் பிறகு காலாவதியான வரிசை மீண்டும் மதிப்பீடு செய்யப்படும். எழுதும் வரிசை பயன்படுத்தப்படும் என்பதால், காலாவதியான வாசிப்பு வரிசை தவிர்க்கப்படுவதற்கு முன்பு தொடர்ச்சியாக 'எழுத _ பட்டினி கிடந்தது' முறை மதிப்பீடு செய்யப்படும். எழுத்து _ காலாவதி (முழு எண்) என்பது வாசிப்பு _ காலாவதிக்கு சமமானது, ஆனால் எழுதும் செயல்பாடுகளுக்கு (வாசிப்புகளிலிருந்து தனித்தனி தொகுதிகளாக தொகுக்கப்பட்டுள்ளது). எழுதுங்கள் _ பட்டினி (முழு எண்) முன்பு குறிப்பிட்டபடி, காலக்கெடு எழுதுவதை விட வாசிப்புகளை விரும்புகிறது. இதன் விளைவாக, செயல்பாடுகள் செயல்படுத்தப்படும் சூழ்நிலைகள் கிட்டத்தட்ட முழுமையாக படிக்கப்படும் சூழ்நிலைகளுக்கு இது வழிவகுக்கும். எழுத்து _ காலாவதி நீளமாக இருப்பதால் அல்லது ஒட்டுமொத்த அலைவரிசை செறிவூட்டலை அணுகுவதால் இது ஒரு முக்கியமான ட்யூனபிள் ஆகிறது. இதைக் குறைப்பது வாசிப்பு செயல்பாடுகளின் செலவில் எழுதுவதற்கு (ஒப்பீட்டளவில் பேசுகையில்) அதிக அலைவரிசையை வழங்குகிறது. இருப்பினும், பயன்பாட்டு பணிச்சுமை எப்போதாவது மட்டுமே எழுதப்பட்ட வாசிப்பு-கனமாக இருந்தால் (எடுத்துக்காட்டாக பெரும்பாலான HTTP அல்லது அடைவு சேவையகங்கள்), இதை அதிகரிப்பதன் மூலம் சராசரி IOP களின் தாமதம் குறைக்கப்படலாம் (இதனால் ஒரு எழுதும் தொகுதி வட்டில் வரிசைப்படுத்தப்படுவதற்கு முன்பு அதிக வாசிப்புகள் செய்யப்பட வேண்டும்). "முன் இணைத்தல்" என்பது ஒரு செயல்பாடாகும், இதில் I/O அட்டவணைப்படுத்துபவர், சிறிய கோரிக்கைகளை குறைவான (பெரிய) செயல்பாடுகளாக ஒடுக்க (அல்லது "ஒன்றிணைக்க") விரும்பி, ஒரு புதிய செயல்பாட்டை மேற்கொள்வார், பின்னர் செயலில் உள்ள தொகுதியை ஆராய்ந்து, தொடக்கத் துறை ஒரே மாதிரியாக இருக்கும் இடத்திலோ அல்லது மற்றொரு செயல்பாட்டின் தொடக்கத் துறைக்குப் பிறகு உடனடியாகவோ செயல்பாடுகளைக் கண்டறிய முயற்சிப்பார். ஒரு "பின் இணைப்பு" என்பது இதற்கு நேர்மாறானது, அங்கு செயலில் உள்ள தொகுப்பில் முடிவடையும் துறைகள் ஒரே மாதிரியான அல்லது தற்போதைய செயல்பாட்டின் தொடக்கத் துறைகளுக்குப் பிறகு உடனடியாகத் தேடப்படுகின்றன. இணைப்பது செயல்பாடுகளை தற்போதைய தொகுப்பிலிருந்து செயலில் உள்ள ஒன்றிற்கு திசை திருப்புகிறது, செயல்திறனை அதிகரிப்பதற்காக "நியாயத்தை" குறைக்கிறது. கோப்புகள் பொதுவாக அமைக்கப்பட்ட விதத்தின் காரணமாக, முன் இணைப்புகளை விட பின் இணைப்புகள் மிகவும் பொதுவானவை. சில பணிச்சுமைகளுக்கு, கோரிக்கைகளை ஒன்றிணைக்க முயற்சிக்கும் எந்த நேரத்தையும் செலவிடுவது நேரத்தை வீணடிப்பதாகும் என்பதை நீங்கள் அறிந்திருக்கலாம். முன் இணைப்புகளை 0 ஆக அமைப்பது இந்த செயல்பாட்டை முடக்குகிறது. தற்காலிக சேமிப்பு செய்யப்பட்ட லாஸ்ட் _ மெர்ஜ் குறிப்பு காரணமாக முன் இணைப்புகள் இன்னும் ஏற்படலாம், ஆனால் அது அடிப்படையில் பூஜ்ஜிய செலவில் வருவதால், அது இன்னும் செய்யப்படுகிறது. I/O ஷெட்யூலர் இணைக்கும் செயல்பாடு அழைக்கப்படும்போது இந்த பூலியன் முன் துறை தேடலை முடக்குகிறது. வட்டு ஒன்றிணைப்பு மொத்தங்கள் ஒரு தொகுதி சாதனத்திற்கு/புரோக்/டிஸ்க்ஸ்டாட்களில் பதிவு செய்யப்படுகின்றன. பிற I/O திட்டமிடுபவர்கள் CFQ திட்டமிடுபவர் முன்கூட்டிய திட்டமிடுபவர் Noop திட்டமிடுபவர் குறிப்புகள் வட்டு திட்டமிடல் வழிமுறைகள்