Linux Sunucuda Disk Scheduler Karşılaştırması

Linux sunucularında disk I/O performansı, sistem verimliliğinin temel taşlarından biridir.

Linux sunucularında disk I/O performansı, sistem verimliliğinin temel taşlarından biridir. Disk scheduler’lar, blok cihazlara gelen okuma ve yazma isteklerini yöneterek gecikmeleri minimize eder, adaleti sağlar ve genel throughput’u optimize eder. Bu makalede, çeşitli disk scheduler algoritmalarını karşılaştırarak, kurumsal ortamlar için en uygun seçimleri inceleyeceğiz. Sunucu yöneticileri için pratik rehberlik sunarak, nasıl test edip uygulayacağınızı adım adım açıklayacağız. Özellikle yüksek yük altında çalışan veritabanı sunucuları, web sunucuları ve sanallaştırma ortamlarında scheduler seçimi kritik öneme sahiptir.

Disk Scheduler’ların Temel İşleyişi ve Önemi

Disk scheduler, kernel’in blok katmanında yer alan bir mekanizmadır ve I/O isteklerini kuyrukta sıralar. Bu sayede mekanik disklerin seek zamanlarını azaltır veya SSD’lerin paralel erişimlerini en iyi şekilde kullanır. Linux’ta varsayılan scheduler genellikle CFQ olsa da, modern kernel’lerde multi-queue (blk-mq) tabanlı seçenekler ön plana çıkmıştır. Kurumsal sunucularda yanlış scheduler seçimi, %20-50 oranında performans kaybına yol açabilir; örneğin, yoğun rastgele yazma işlemlerinde gecikmeler artar.

Scheduler’ların önemi, iş yüküne göre değişir. Yüksek throughput odaklı dosya sunucularında deadline tabanlı algoritmalar tercih edilirken, latency-sensitive uygulamalarda (örneğin OLTP veritabanları) fairness sağlayan BFQ gibi seçenekler idealdir. Seçim yaparken, donanım tipi (HDD vs SSD), I/O pattern’i (sequential vs random) ve concurrency seviyesini değerlendirin. Pratik takeaway: Scheduler’ı değiştirmeden önce, mevcut performansı iostat veya iotop ile ölçün ve baseline oluşturun.

Yaygın Disk Scheduler Algoritmalarının Karşılaştırması

CFQ (Completely Fair Queuing)

CFQ, Linux’un geleneksel varsayılan scheduler’ıdır ve her I/O kuyruğuna adil zaman dilimi atar. Bu, birden fazla işlem arasında fairness sağlar; örneğin, bir veritabanı sorgusu diğerlerini bloke etmez. Ancak, yüksek concurrency’de overhead yaratır ve SSD’lerde suboptimal kalır. Kurumsal kullanımda, legacy HDD tabanlı sunucularda uygundur. Testlerde, 4K random read’lerde 10-15ms latency gösterir. Dezavantajı: Mekanik disklerde seek optimizasyonu yetersiz kalabilir.

Deadline

Deadline, her I/O isteğine bir son tarih (deadline) atar ve okuma/yazma kuyruklarını ayrı tutar. Bu, starasyon önler ve düşük latency sağlar; özellikle multimedia sunucuları için idealdir. SSD’lerde mükemmel çalışır, throughput’u %30 artırabilir. Karşılaştırmada CFQ’ya göre daha öngörülebilir; örneğin, fio benchmark’larında 4K random write’ta 5ms altına iner. Kurumsal ortamda, deadline’ı etkinleştirmek için /sys/block/sda/queue/scheduler dosyasını kullanın.

MQ-Deadline ve BFQ

MQ-Deadline, multi-queue desteğiyle modern NVMe SSD’ler için tasarlanmıştır; her CPU core’u ayrı kuyruk yönetir, böylece ölçeklenir. BFQ ise desktop ve düşük latency senaryolarında üstündür, budget-fair queuing ile adaleti korur. Karşılaştırmada, mq-deadline yüksek throughput (sequential I/O’da 500MB/s+) verirken, BFQ random I/O’da latency’yi %40 düşürür. Seçim: NVMe RAID için mq-deadline, interactive workloads için BFQ.

Linux Sunucuda Scheduler Değiştirme ve Test Etme

Scheduler’ı değiştirmek oldukça basittir ve reboot gerektirmez. Önce mevcut scheduler’ı ls /sys/block/sdX/queue/scheduler ile kontrol edin (sdX diskinizle değiştirin). Değiştirmek için root olarak echo “mq-deadline” > /sys/block/sda/queue/scheduler komutunu çalıştırın. Kalıcı hale getirmek için /etc/udev/rules.d/60-scheduler.rules dosyasına “ACTION==add|change, KERNEL==sd*, ATTR{queue/scheduler}=’mq-deadline'” ekleyin ve udevadm control –reload-rules ile etkinleştirin.

Test için fio aracını kullanın: fio –name=randread –ioengine=libaio –rw=randread –bs=4k –numjobs=1 –size=4g –runtime=60 –group_reporting komutuyla baseline alın, scheduler değiştirip tekrarlayın. Karşılaştırmada, SSD’lerde noop veya mq-deadline %25 daha iyi IOPS verir. HDD’lerde deadline önerilir. Adım adım: 1) Kernel parametresi elevator= ile boot-time ayarı (GRUB’ta edit edin), 2) blk-mq etkinleştirin (elevator= mq-deadline), 3) Performansı sar iotop ile monitor edin. Bu adımlar, üretim sunucularında sıfır kesinti sağlar.

Sonuç olarak, Linux sunucunuzun disk scheduler’ını iş yükünüze göre optimize etmek, kaynak kullanımını maksimize eder ve SLA’ları korur. Donanım ve benchmark sonuçlarınıza dayanarak mq-deadline veya BFQ’yu tercih edin; düzenli testlerle ince ayar yapın. Bu yaklaşımla, kurumsal performansınızı önemli ölçüde yükseltebilirsiniz.

Kategori: Blog
Yazar: Editör
İçerik: 518 kelime
Okuma Süresi: 4 dakika
Zaman: 1 gün önce
Yayım: 08-03-2026
Güncelleme: 08-03-2026