Deadline scheduler
ڈیڈ لائن شیڈولر لینکس کرنل کے لیے ایک I/O شیڈولر ہے جسے 2002 میں جینس ایکسبو نے لکھا تھا۔ جائزہ ڈیڈ لائن شیڈولر کا بنیادی مقصد درخواست کے لیے اسٹارٹ سروس ٹائم کی ضمانت دینا ہے۔ یہ درخواستوں کی فاقہ کشی کو روکنے کے لیے تمام آئی/او آپریشنز پر ڈیڈ لائن لگا کر ایسا کرتا ہے۔ یہ ترتیب شدہ قطاروں (پڑھنے اور لکھنے دونوں) کے علاوہ دو ڈیڈ لائن قطاروں کو بھی برقرار رکھتا ہے۔ ڈیڈ لائن قطاریں بنیادی طور پر ان کی ڈیڈ لائن (میعاد ختم ہونے کا وقت) کے مطابق ترتیب دی جاتی ہیں، جبکہ ترتیب دی گئی قطاریں سیکٹر نمبر کے مطابق ترتیب دی جاتی ہیں۔ اگلی درخواست پیش کرنے سے پہلے، ڈیڈ لائن شیڈولر فیصلہ کرتا ہے کہ کون سی قطار استعمال کرنی ہے۔ پڑھنے کی قطاروں کو زیادہ ترجیح دی جاتی ہے، کیونکہ عمل عام طور پر پڑھنے کی کارروائیوں کو روکتے ہیں۔ اگلا، ڈیڈ لائن شیڈولر چیک کرتا ہے کہ ڈیڈ لائن قطار میں پہلی درخواست کی میعاد ختم ہو گئی ہے یا نہیں۔ بصورت دیگر، شیڈولر ترتیب شدہ قطار سے درخواستوں کا ایک بیچ پیش کرتا ہے۔ دونوں صورتوں میں، شیڈولر ترتیب شدہ قطار میں منتخب کردہ درخواست کے بعد درخواستوں کا ایک بیچ بھی پیش کرتا ہے۔ پہلے سے طے شدہ طور پر، پڑھنے کی درخواستوں کا میعاد ختم ہونے کا وقت 500 ایم ایس ہوتا ہے، لکھنے کی درخواستیں 5 سیکنڈ میں ختم ہو جاتی ہیں۔ شیڈولر کا ابتدائی ورژن جنوری 2002 میں جینس ایکسبو نے شائع کیا تھا۔ پیمائشوں سے پتہ چلتا ہے کہ ڈیڈ لائن I/O شیڈولر بعض ملٹی تھریڈڈ کام کے بوجھ کے لیے CFQ I/O شیڈولر سے بہتر کارکردگی کا مظاہرہ کرتا ہے۔ ایس آئی ایس ایف ایس ٹیون ایبلز فیفو _ بیچ (انٹیجر) ڈیڈ لائن "بیچز" کے تصور کے ذریعے آئی/او آپریشنز (آئی او پیز) کو انجام دیتی ہے جو سیکٹر کی بڑھتی ہوئی تعداد کے لحاظ سے ترتیب دی گئی کارروائیوں کے سیٹ ہیں۔ یہ ٹیون ایبل اس بات کا تعین کرتا ہے کہ درخواستوں کو ڈسک پر قطار میں کھڑا کرنے سے پہلے ایک بیچ کتنا بڑا ہونا پڑے گا (فی الحال تعمیر شدہ بیچ کی میعاد ختم ہونے کے علاوہ)۔ چھوٹے بیچ اس بات کو یقینی بنا کر تاخیر کو کم کر سکتے ہیں کہ نئی درخواستوں کو جلد انجام دیا جائے (ممکنہ طور پر مزید درخواستوں کے آنے کا انتظار کرنے کے بجائے)، لیکن ڈرائیو ہیڈز کی مجموعی نقل و حرکت کو بڑھا کر مجموعی طور پر تھرو پٹ کو کم کر سکتے ہیں (چونکہ ترتیب ایک بیچ کے اندر ہوتی ہے نہ کہ ان کے درمیان)۔ مزید برآں، اگر آئی او پیز کی تعداد کافی زیادہ ہے تو بیچوں کو ویسے بھی بروقت انجام دیا جائے گا۔ ریڈ _ ایکسپائر (عدد) 'ریڈ _ ایکسپائر' کا وقت ملی سیکنڈ میں زیادہ سے زیادہ وقت ہوتا ہے جس کے بعد ریڈ کو 'ایکسپائرڈ' سمجھا جاتا ہے۔ اس کے بارے میں دودھ کے کارٹن پر میعاد ختم ہونے کی تاریخ کی طرح سوچیں۔ دودھ کا بہترین استعمال میعاد ختم ہونے کی تاریخ سے پہلے کیا جاتا ہے۔ ڈیڈ لائن شیڈولر کے ساتھ بھی ایسا ہی ہے۔ یہ اس بات کو یقینی بنانے کی کوشش نہیں کرے گا کہ تمام آئی او اس کی میعاد ختم ہونے کی تاریخ سے پہلے جاری کیے جائیں۔ تاہم، اگر آئی او کی میعاد ختم ہو چکی ہے، تو اسے ترجیح میں کمی مل جاتی ہے۔ انتباہات کے ساتھ۔ پڑھنے کی میعاد ختم ہونے والی قطار کو صرف اس وقت چیک کیا جاتا ہے جب ڈیڈ لائن شیڈولر پڑھنے کی قطار کی دوبارہ تشخیص کرتا ہے۔ ریڈز کے لیے اس کا مطلب ہے کہ ہر بار ایک ترتیب شدہ ریڈ بھیجا جاتا ہے سوائے اسٹریمنگ آئی او کے معاملے کے۔ جب کہ شیڈولر پڑھنے کی قطار سے io کو اسٹریم کر رہا ہے، پڑھنے کی میعاد ختم ہونے کا اندازہ نہیں کیا جاتا ہے۔ پڑھنے کی قطار کا دوبارہ جائزہ لیتے وقت، منطق یہ ہے کہ میعاد ختم ہونے والے ریڈز کے لیے چیک کریں (فیفو [ٹائم آرڈرڈ] قطار کے سر کو دیکھیں) یہ دیکھنے کے لیے چیک کریں کہ آیا کیشڈ ریڈ پوائنٹر درست ہے یا نہیں (لہذا اگر اسٹریمنگ نہ بھی ہو تو، کیشڈ پوائنٹر پھر بھی ترجیح لیتا ہے لہذا ترتیب دی گئی قطار کو سویپ میں ٹپ سے ٹیل تک منتقل کیا جاتا ہے) ترتیب دی گئی قطار سے پہلا ریڈ اٹھائیں (دوسری سویپ کے لیے دوبارہ ٹپ سے شروع کریں) اگر میعاد ختم ہو چکی ریڈز ہیں، تو پہلے کو فیفو سے کھینچ لیا جاتا ہے۔ نوٹ کریں کہ یہ میعاد ختم شدہ ریڈ پھر ریڈ سارٹ آرڈر کے لیے نیا گٹھ جوڑ ہے۔ کیش شدہ اگلا پوائنٹر اس کی میعاد ختم ہونے کے بعد ترتیب کی قطار سے اگلے آئیو کی طرف اشارہ کرنے کے لیے سیٹ کیا جائے گا۔ نوٹ کرنے کی بات یہ ہے کہ الگورتھم صرف ایک بار ان کی میعاد ختم ہونے کی تاریخ گزر جانے کے بعد تمام میعاد ختم ہونے پر عمل نہیں کرتا ہے۔ یہ میعاد ختم ہونے والی پڑھنے کی قطار کو دوبارہ چیک کرنے سے پہلے 'رائٹ _ اسٹارویڈ' کو ایک ساتھ ترتیب دے کر کچھ معقول کارکردگی کو برقرار رکھنے کی اجازت دیتا ہے۔ لہذا، آئی او کی زیادہ سے زیادہ تعداد جو پڑھنے کی میعاد ختم ہونے والے آئی او کے درمیان انجام دی جا سکتی ہے وہ 2 * 'فیفو _ بیچ' * 'رائٹس _ اسٹارویڈ' ہے۔ 'فیفو _ بیچ' اسٹریمنگ کا ایک سیٹ پہلی میعاد ختم ہونے کے بعد پڑھتا ہے اور اگر یہ سلسلہ تحریری بھوک کی حالت کا سبب بنتا ہے، تو ممکنہ طور پر دوسرا 'فیفو _ بیچ' اسٹریمنگ لکھتا ہے۔ یہ بدتر صورت حال ہے، جس کے بعد پڑھنے کی میعاد ختم ہونے والی قطار کا دوبارہ جائزہ لیا جائے گا۔ زیادہ سے زیادہ، میعاد ختم ہونے والی پڑھنے کی قطار کو چھوڑنے سے پہلے لگاتار 'رائٹ _ اسٹارویڈ' اوقات کا جائزہ لیا جائے گا کیونکہ لکھنے کی قطار استعمال کی جائے گی۔ رائٹ _ ایکسپائر (انٹیجر) ریڈ _ ایکسپائر کے لیے یکساں لیکن رائٹ آپریشنز کے لیے (ریڈز سے الگ بیچوں میں گروپ کیا گیا)۔ رائٹس _ اسٹارویڈ (انٹیجر) جیسا کہ پہلے بیان کیا گیا ہے، ڈیڈ لائن لکھنے کے لیے ریڈز کو ترجیح دیتی ہے۔ نتیجے کے طور پر، یہ ایسے حالات کا باعث بن سکتا ہے جہاں کارروائیوں کو انجام دیا جاتا ہے تقریبا مکمل طور پر پڑھا جاتا ہے۔ یہ ایک اہم ٹیون ایبل بن جاتا ہے کیونکہ رائٹ _ ایکسپائر لمبا ہوتا ہے یا مجموعی طور پر بینڈوتھ سیچوریشن تک پہنچ جاتا ہے۔ اس کو کم کرنے سے پڑھنے کی کارروائیوں کی قیمت پر لکھنے (نسبتا بولنا) کے لیے زیادہ بینڈوتھ ملتی ہے۔ اگر ایپلیکیشن کا کام کا بوجھ، تاہم، پڑھنے میں بھاری ہے (مثال کے طور پر زیادہ تر ایچ ٹی ٹی پی یا ڈائرکٹری سرورز) صرف کبھی کبھار لکھنے کے ساتھ، اس میں اضافہ کرکے اوسط آئی او پیز کی تاخیر میں کمی حاصل کی جا سکتی ہے (تاکہ تحریری بیچ کو ڈسک پر قطار میں کھڑا کرنے سے پہلے مزید ریڈز انجام دیے جانے چاہئیں)۔ فرنٹ _ مرجز (بول انٹیجر) ایک "فرنٹ مرج" ایک ایسا آپریشن ہے جہاں I/O شیڈولر، چھوٹی درخواستوں کو کم (بڑے) آپریشنز میں کنڈینس (یا "ضم") کرنے کی کوشش میں، ایک نیا آپریشن کرے گا پھر فعال بیچ کی جانچ کرے گا اور آپریشنز کا پتہ لگانے کی کوشش کرے گا جہاں ابتدائی سیکٹر ایک جیسا ہے یا کسی دوسرے آپریشن کے ابتدائی سیکٹر کے فورا بعد۔ ایک "بیک مرج" اس کے برعکس ہے، جہاں فعال بیچ میں اختتامی شعبوں کو ایسے شعبوں کے لیے تلاش کیا جاتا ہے جو یا تو ایک جیسے ہیں یا موجودہ آپریشن کے ابتدائی شعبوں کے فورا بعد ہیں۔ ضم کرنے سے کارروائیوں کو موجودہ بیچ سے فعال بیچ میں موڑ دیا جاتا ہے، جس سے تھرو پٹ کو بڑھانے کے لیے "انصاف پسندی" میں کمی آتی ہے۔ جس طرح سے فائلیں عام طور پر رکھی جاتی ہیں، اس کی وجہ سے بیک مرجز فرنٹ مرجز سے کہیں زیادہ عام ہیں۔ کچھ کام کے بوجھ کے لیے، آپ کو یہ بھی معلوم ہو سکتا ہے کہ درخواستوں کو ضم کرنے کی کوشش میں کسی بھی وقت گزارنا وقت کا ضیاع ہے۔ فرنٹ _ مرجز کو 0 پر ترتیب دینے سے یہ فعالیت غیر فعال ہو جاتی ہے۔ کیش شدہ آخری _ ضم اشارے کی وجہ سے فرنٹ انضمام اب بھی ہو سکتے ہیں، لیکن چونکہ یہ بنیادی طور پر صفر لاگت پر آتا ہے، اس لیے یہ اب بھی انجام دیا جاتا ہے۔ یہ بولین صرف فرنٹ سیکٹر لک اپ کو غیر فعال کر دیتا ہے جب I/O شیڈولر مرجنگ فنکشن کو کال کیا جاتا ہے۔ ڈسک کے انضمام کے مجموعے فی بلاک ڈیوائس/پروک/ڈسک اسٹیٹس میں ریکارڈ کیے جاتے ہیں۔ دیگر I/O شیڈولرز CFQ شیڈولر اینٹیسیپیٹری شیڈولر نواپ شیڈولر حوالہ جات ڈسک شیڈولنگ الگورتھم