Ubuntu Server ortamlarında disk I/O performansı, sistemin genel verimliliğini doğrudan etkileyen kritik bir unsurdur.
Ubuntu Server ortamlarında disk I/O performansı, sistemin genel verimliliğini doğrudan etkileyen kritik bir unsurdur. Disk I/O scheduler’lar, blok cihazlara yönelik okuma ve yazma işlemlerini sıraya koyarak yönetir ve bu sayede kaynakların en verimli şekilde kullanılmasını sağlar. Özellikle yüksek yük altında çalışan sunucularda, doğru scheduler seçimi gecikmeleri minimize eder, throughput’u artırır ve sistem kararlılığını güçlendirir. Bu makalede, Ubuntu Server’da disk I/O scheduler’larının ne olduğunu, mevcut seçenekleri ve pratik yapılandırma adımlarını detaylı olarak ele alacağız. Bu bilgiler, sistem yöneticilerinin donanım özelliklerine göre optimize edilmiş bir yapılandırma yapmalarına yardımcı olacaktır.
Disk I/O scheduler, Linux çekirdeğinde blok tabanlı I/O isteklerini işleyen bir alt sistemdir. Bu mekanizma, gelen I/O taleplerini bir kuyrukta tutar ve belirli algoritmalara göre önceliklendirerek diske iletir. Farklı scheduler’lar, çeşitli senaryolara göre tasarlanmıştır: örneğin, mekanik HDD’ler için seek süresini minimize edenler veya SSD’ler için basit ve hızlı olanlar. Ubuntu Server gibi kurumsal ortamlarda, scheduler seçimi donanım türüne (HDD, SSD, NVMe), iş yüküne (rastgele I/O, sıralı I/O, veritabanı işlemleri) ve çoklu çekirdek desteğine göre yapılmalıdır.
Scheduler’ların temel farkı, fairness (adillik), latency (gecikme) ve throughput dengesindedir. Yanlış seçim, CPU kullanımını artırabilir veya I/O tıkanıklığına yol açabilir. Örneğin, çok kullanıcılı bir web sunucusunda adil paylaşım ön plandayken, tek thread’li bir veritabanında düşük latency kritik hale gelir. Ubuntu’nun modern sürümlerinde (20.04 ve üzeri), varsayılan scheduler genellikle multi-queue tabanlıdır ve bu, yüksek performanslı blok cihazlar için optimize edilmiştir. Scheduler değişikliği, sistem yeniden başlatılmadan bile uygulanabilir, ancak kalıcı hale getirmek için ek adımlar gereklidir.
CFQ, varsayılan scheduler olarak uzun süre kullanılmış olup, I/O isteklerini süreç bazında adil bir şekilde dağıtır. Her I/O kuyruğunu bir “slice” ile sınırlar ve seek optimizasyonu yapar. HDD tabanlı sunucularda, özellikle birden fazla kullanıcı veya sanal makine barındıran ortamlarda uygundur. Ancak SSD’lerde overhead yaratabilir çünkü zaman tabanlı slice’lar gereksiz karmaşıklık getirir. Ubuntu’da CFQ’yu etkinleştirmek için kernel parametreleri ile uyumludur, fakat modern sistemlerde multi-queue desteği sınırlıdır. Performans testlerinde, CFQ rastgele okuma işlemlerinde %20’ye varan fairness sağlar, ancak yüksek throughput senaryolarında geride kalır.
Deadline, her I/O isteğine bir son tarih (deadline) atar ve read/write önceliklerini yönetir. Seek birleştirmesiyle HDD’lerde etkili olup, starasyon (açlık) önler. Ubuntu Sunucu’larda deadline, düşük latency’li iş yükleri için idealdir; örneğin, veritabanı sunucuları veya dosya paylaşım sistemleri. Yapılandırmada read_expire ve write_expire parametreleri ile ince ayar yapılabilir. Testlerde, deadline scheduler HDD’lerde CFQ’ya göre %15 daha düşük latency gösterir. SSD’ler için de kullanılabilir, ancak multi-queue versiyonu (mq-deadline) tercih edilir.
NOOP, en basit scheduler olup I/O isteklerini merge eder ve doğrudan alt katmana iletir. SSD ve NVMe cihazlarında mükemmeldir çünkü donanım kendi optimizasyonunu yapar. Ubuntu 5.0+ kernel’lerde mq-deadline ve none gibi multi-queue seçenekleri, NUMA ve çok çekirdek sistemlerde üstün performans sağlar. Bu scheduler’lar, bulut tabanlı Ubuntu Server’larda varsayılan olup, yüksek IOPS’li iş yüklerinde %30’a varan throughput artışı gözlenir. Kyber veya BFQ gibi gelişmiş seçenekler de derleme ile eklenebilir, ancak standart depolar yeterlidir.
Sisteminizdeki mevcut scheduler’ı kontrol etmek için terminalde şu komutu çalıştırın: cat /sys/block/sdX/queue/scheduler (sdX’i cihaz adıyla değiştirin, örneğin sda). Çıktı, köşeli parantezle işaretli aktif scheduler’ı gösterir. Tüm mevcut seçenekleri görmek için ls /sys/block/sdX/queue/scheduler*. Bu adım, donanımınıza en uygun olanı belirlemede ilk adımdır. Ayrıca, iostat -x 1 5 ile I/O istatistiklerini izleyerek mevcut performansı analiz edin. Bu veriler, scheduler değişikliğinin gerekip gerekmediğini netleştirir ve karar sürecini veri odaklı kılar.
Runtime değişikliği için root yetkisiyle echo “mq-deadline” > /sys/block/sdX/queue/scheduler komutunu kullanın. Değişiklik anında geçerlidir ve yeniden başlatmada kaybolur. Kalıcı yapılandırma için /etc/default/grub dosyasını düzenleyin: GRUB_CMDLINE_LINUX_DEFAULT satırına “elevator=mq-deadline” ekleyin, ardından update-grub çalıştırın ve reboot edin. NVMe cihazlar için /sys/block/nvmeXnY/queue/scheduler yolunu kullanın. Bu adımlar, SSD tabanlı sunucularda latency’yi %25 azaltabilir. Her değişiklik sonrası fio veya dd ile benchmark yaparak doğrulayın.
Disk I/O scheduler seçimi, Ubuntu Server’ınızın performansını önemli ölçüde etkiler. Donanımınıza ve iş yükünüze göre CFQ, deadline veya mq-deadline gibi seçenekleri değerlendirerek yapılandırma yapın. Düzenli izleme ve testlerle optimizasyonu sürdürün; bu yaklaşım, kurumsal ortamda kesintisiz hizmet sağlar ve kaynak israfını önler. Uygulamadan önce yedek alın ve test ortamında doğrulayın.