Bosh sahifa Wiki I/O Scheduler

I/O Scheduler

I/O Scheduler — storage yoki boshqa I/O qurilmaga yuboriladigan so‘rovlarning tartibi, birlashtirilishi va adolatini boshqaradigan qatlam. Maqsad qurilma throughputi va request latency o‘rtasida muvozanat yaratishdir.

So‘rovlarni tartiblash

Aylanadigan diskda seek masofasi katta bo‘lgani uchun yaqin block so‘rovlarini tartiblash va merge qilish foydali. SSD/NVMe parallel queue va seek yo‘qligi sabab boshqa modelga ega; scheduler ko‘proq fairness, batching va latency isolationga e’tibor beradi.

Read va write

Read latency interactive workload uchun muhim, write esa buffer va flush orqali kechiktirilishi mumkin. Barrier, flush va FUA durability tartibini belgilaydi; scheduler performance uchun ularni buzmaydi.

Tenantlar

Per-cgroup yoki process weight tenantlar orasida bandwidth taqsimlaydi. Deadline policy eski requestni cheksiz kutmasligini ta’minlaydi. Background compaction yoki backup foreground database so‘rovini bosib ketmasligi kerak.

Queue depth

Queue depth qurilmani band ushlab turadi, ammo juda katta depth tail latencyni oshiradi. NVMe’da hardware queue’lar CPUga yaqin taqsimlanadi. Merge qilish katta sequential transfer beradi, lekin deadline’ni kechiktirmasligi lozim.

Qatlamlar

I/O scheduler filesystem cache va device firmware scheduler bilan birga ishlaydi. Application async I/O va own queue ishlatsa bir nechta qatlamda navbat paydo bo‘lishi mumkin; observability har bosqich latencyni ajratadi.

Benchmark

Sinov random/sequential, read/write aralash, fsync va ko‘p tenant workloadlarida p50/p99 latency, throughput va fairnessni o‘lchaydi. Power-loss durability alohida tekshiriladi.

Amaliy boshqaruv

I/O Scheduler implementatsiyasida request queue va device model alohida va versiyalangan holat sifatida yuritiladi. Qaror uchun zarur inputlar yashirin global taxminga aylantirilmaydi: platforma, konfiguratsiya, identity yoki memory-order sharti tegishli obyekt bilan bog‘lanadi. Shu sabab incremental yangilanish, context almashishi yoki parallel hodisada eskirgan ma’lumotdan foydalanish kamayadi. Debug rejim qarorni hosil qilgan edge, state transition va parametrlarni ko‘rsatadi; production log esa maxfiy qiymatlarni xom shaklda yozmaydi.

Muhim xato sinfi — tail latency yoki durability barrierini buzish. Bunday vaziyatda tizim optimistik tarzda davom etmaydi: semantikaga qarab konservativ fallback, bounded retry, taskni bloklash yoki aniq error tanlanadi. Timeout correctness isboti emas; u faqat operatsion limitdir. Queue membership, reference count, lock ownership va visibility kabi invariantlar state bilan atomik yangilanadi. Cancellation yoki failure o‘rtada yuz bersa qisman o‘zgargan holat cleanup protokoli orqali tiklanadi.

Sifat nazorati mixed workload va power-loss testi orqali bajariladi. Test normal yo‘ldan tashqari bo‘sh navbat, bitta element, yuqori contention, timeout bilan bir vaqtdagi wakeup, resurs limiti va platforma variantlarini qamraydi. To‘g‘rilik performance’dan alohida tekshiriladi; keyin throughput, p99 latency, context switch, cache miss yoki artefakt hajmi kabi mavzuga mos ko‘rsatkichlar baseline bilan solishtiriladi. Topilgan minimal interleaving yoki kirish regressiya to‘plamida doimiy saqlanadi.

Database kabi latency-sensitive dastur scheduler tanlovini queue depth va I/O priority bilan moslaydi. Direct I/O page cache ta’sirini kamaytiradi, buffered I/O esa writeback threadlar orqali alohida navbat yaratadi. Benchmark working set RAMdan katta bo‘lib, cache hitni device samaradorligi bilan aralashtirmaydi.

Bog‘liq tushunchalar

block I/O, request queue, NVMe, disk scheduling, latency, throughput