Ubuntu Server’da Disk I/O Scheduler Tuning

Ubuntu Server ortamlarında disk I/O performansı, sunucu verimliliğinin temel taşlarından biridir.

Reklam Alanı

Ubuntu Server ortamlarında disk I/O performansı, sunucu verimliliğinin temel taşlarından biridir. Disk I/O scheduler’lar, depolama alt sistemindeki okuma ve yazma işlemlerini yöneterek sistem kaynaklarını optimize eder. Ubuntu Server’da varsayılan olarak kullanılan scheduler’lar, iş yüküne göre ayarlanmadığında gecikmeler ve darboğazlar oluşabilir. Bu makalede, disk I/O scheduler tuning’inin adımlarını, mevcut seçenekleri ve pratik uygulamalarını ele alacağız. Özellikle veritabanı sunucuları, web uygulamaları veya yüksek trafikli sistemlerde bu ayarlamalar, throughput’ü artırarak %20-50 oranında performans kazancı sağlayabilir. Tuning işlemi, kernel parametreleri üzerinden yapılır ve kalıcı hale getirilmesi için systemd veya GRUB konfigürasyonları gerektirir. Aşağıdaki bölümlerde, adım adım rehberlik sunarak bu süreci netleştireceğiz.

Disk I/O Scheduler Türleri ve Seçim Kriterleri

Ubuntu Server’da desteklenen başlıca disk I/O scheduler’lar arasında CFQ (Completely Fair Queuing), Deadline, Noop ve modern NVMe diskler için mq-deadline veya none yer alır. CFQ, genel amaçlı iş yükleri için dengeli bir yaklaşım sunar ve her I/O isteğine adil zaman dilimi ayırır. Ancak, yüksek concurrency’li ortamlarda overhead yaratabilir. Deadline scheduler ise okuma/yazma işlemlerine deadline tabanlı öncelik verir; özellikle HDD’lerde latency’yi minimize eder ve veritabanı gibi okuma ağırlıklı uygulamalarda idealdir. Noop, basit bir FIFO kuyruk yönetir ve SSD’lerde önerilir çünkü donanım seviyesinde sıralama yapar, CPU yükünü azaltır. mq-deadline ise multi-queue desteğiyle modern kernel’lerde (Ubuntu 20.04+) yüksek performanslı depolama için uygundur.

Seçim yaparken disk tipini göz önünde bulundurun: HDD için Deadline veya CFQ, SSD/NVMe için Noop veya mq-deadline tercih edin. İş yükü analiziyle başlayın; örneğin, iostat veya iotop ile okuma/yazma oranlarını inceleyin. Bu scheduler’lar, /sys/block/[disk]/queue/scheduler dosyasında listelenir ve dinamik olarak değiştirilebilir. Tuning, sistem yeniden başlatılmadan test edilebilir, ancak kalıcı değişiklikler için /etc/default/grub dosyasında elevator=deadline gibi parametre ekleyin ve update-grub komutuyla uygulayın.

Mevcut Scheduler’ı Kontrol Etme ve Değiştirme Adımları

Mevcut Scheduler’ı Görüntüleme

Sisteminizdeki disk scheduler’ını belirlemek için lsblk komutuyla disk adlarını listeleyin (örneğin sda, nvme0n1). Ardından, echo ile scheduler durumunu kontrol edin: cat /sys/block/sda/queue/scheduler komutu, mevcut seçenekleri ve aktif olanı köşeli parantezle gösterir (örneğin [mq-deadline] noop none). Bu bilgi, /proc/version ile kernel sürümünüzü doğrulayarak tamamlayın. Ubuntu 22.04’te varsayılan genellikle mq-deadline’dir. Bu adımı root olarak çalıştırın ve birden fazla disk varsa her biri için tekrarlayın. İzleme için sar -d 1 5 gibi araçlar, I/O istatistiklerini gerçek zamanlı verir ve scheduler değişikliğinin etkisini önceden tahmin etmenizi sağlar.

Yeni Scheduler Atama İşlemi

Yeni scheduler atamak için echo deadline > /sys/block/sda/queue/scheduler komutunu kullanın; değişiklik anında geçerlidir ve yeniden başlatmada kaybolmazsa kalıcıdır. Kalıcılaştırmak adına /etc/udev/rules.d/60-schedulers.rules dosyası oluşturun ve içeriğine ACTION==”add|change”, KERNEL==”sd[a-z]|nvme[0-9]n[0-9]”, ATTR{queue/scheduler}=”deadline” yazın. Ardından udevadm control –reload-rules && udevadm trigger ile etkinleştirin. NVMe diskler için none scheduler’ı tercih edin: echo none > /sys/block/nvme0n1/queue/scheduler. Değişiklik sonrası fio veya dd ile test edin; örneğin dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct ile sequential yazma hızını ölçün. Bu işlem, 5-10 dakikada tamamlanır ve downtime gerektirmez.

Bu adımlar, üretim ortamlarında test sunucusunda doğrulanmalıdır. Scheduler değişikliği sonrası sistem loglarını (dmesg | grep scheduler) inceleyin ve beklenmedik hatalar için rollback planı hazırlayın.

İleri Düzey Tuning Parametreleri ve Optimizasyon

Scheduler seçildikten sonra parametre tuning’iyle ince ayar yapın. Deadline için /sys/block/sda/queue/iosched/ dosyasındaki read_expire ve write_expire değerlerini ayarlayın; örneğin echo 500 > /sys/block/sda/queue/iosched/read_expire (milisaniye cinsinden okuma deadline’i kısaltır). CFQ’de slice_idle’ı 0 yaparak latency düşürün. Multi-queue için nr_requests’i artırın: echo 128 > /sys/block/sda/queue/nr_requests. Bu ayarlar, blk-mq kernel özelliğiyle (Ubuntu 18.04+) ölçeklenir. Yüksek I/O yükünde, ionice -c 3 komutuyla önceliklendirme ekleyin. Tuning’i fio tool ile benchmark’layın: fio –name=test –ioengine=libaio –rw=randread –bs=4k –numjobs=4 –size=1g –runtime=60 –group_reporting.

Optimizasyon, donanım uyumuyla pekişir; RAID dizilerinde mdadm –grow ile stripe cache boyutunu ayarlayın. Uzun vadede, Prometheus ve Grafana ile I/O metriklerini izleyin. Bu yaklaşımlar, veritabanı query sürelerini kısaltır ve CPU kullanımını dengeler.

Disk I/O scheduler tuning’i, Ubuntu Server’ınızı iş yükünüze göre uyarlamanın etkili bir yoludur. Düzenli izleme ve testlerle bu ayarları refine edin; performans kazanımları, sistem kararlılığını artırır ve operasyonel maliyetleri düşürür. Uygulamadan önce yedek alın ve aşamalı rollout yapın.

Yazar: root
İçerik: 596 kelime
Okuma Süresi: 4 dakika
Zaman: Bugün
Yayım: 16-03-2026
Güncelleme: 16-03-2026
Benzer İçerikler
Dijital Dönüşüm kategorisinden ilginize çekebilecek benzer içerikler