Linux I/O Scheduler Nedir? Disk Performansı Nasıl Optimize Edilir?

Bir VDS sunucuda CPU ve RAM yeterli olduğu halde sistemin zaman zaman yavaşladığını fark edebilirsiniz. Özellikle veritabanı işlemleri, dosya transferleri, backup süreçleri ve yoğun log yazma işlemleri sırasında disk tarafında beklemeler oluşabilir. Linux I/O Scheduler nedir sorusunun cevabı tam olarak burada önem kazanır. Linux I/O Scheduler, işletim sisteminin disk üzerindeki okuma ve yazma isteklerini nasıl yöneteceğini ve sıralayacağını belirleyen mekanizmadır.
VDS performansında yalnızca SSD veya NVMe kullanmak yeterli değildir. Depolama cihazına gönderilen I/O isteklerinin nasıl yönetildiği de gecikme ve sistem davranışı üzerinde etkili olabilir.
VDS disk I/O ve IOPS performansı rehberimizde bu konunun temelini daha detaylı ele almıştık. I/O Scheduler ise bu yapının işletim sistemi tarafındaki önemli parçalarından biridir.
🔍 Linux I/O Scheduler Nedir?
Linux I/O Scheduler, uygulamalardan gelen disk okuma ve yazma isteklerinin işletim sistemi tarafından yönetilmesini sağlayan block layer bileşenlerinden biridir.
Basitleştirilmiş yapı şu şekilde düşünülebilir:
Uygulama → Dosya Sistemi → Linux Block Layer → I/O Scheduler → Depolama
Birden fazla uygulama aynı anda diske eriştiğinde çok sayıda I/O isteği oluşabilir. Scheduler, kullanılan yapıya göre bu isteklerin nasıl kuyruğa alınacağını ve depolama cihazına nasıl gönderileceğini belirler.
Özellikle VDS sunucularda web sunucusu, veritabanı, Docker, backup ve log servisleri aynı anda çalışıyorsa disk üzerinde çok sayıda I/O işlemi oluşabilir.
💡 İpucu:
VDS sunucunuzda disk kaynaklı yavaşlama yaşanıyorsa yalnızca disk modeline bakmak yerine I/O Wait, disk latency ve I/O yoğunluğunu birlikte inceleyin.
⚙️ I/O Scheduler Ne İşe Yarar?
Bir VDS üzerinde aynı anda birçok servis çalışabilir:
- MySQL veya MariaDB
- Web sunucusu
- PHP-FPM
- Docker container’ları
- Backup servisleri
- Log sistemleri
- Dosya transferleri
- Cache işlemleri
Bu işlemlerin tamamı depolama cihazına I/O isteği gönderebilir.
Scheduler’ın amacı, bu isteklerin belirli bir yöntemle yönetilmesini sağlamaktır.
Bazı scheduler’lar gecikmeyi kontrol etmeye, bazıları kaynakları daha adil paylaşmaya, bazıları ise gereksiz yeniden sıralama işlemlerini azaltmaya odaklanır.
Bu nedenle Linux I/O Scheduler nedir sorusunun yanında, kullanılan scheduler’ın hangi iş yüküne uygun olduğunu anlamak da önemlidir.
💾 Linux’ta Disk I/O Nasıl Çalışır?
Modern Linux sistemlerinde block I/O altyapısının önemli parçalarından biri blk-mq, yani Multi-Queue Block I/O yapısıdır.
Bu yapı özellikle SSD ve NVMe gibi yüksek paralellik sunabilen depolama cihazlarında birden fazla I/O kuyruğunun kullanılmasına olanak sağlar.
Örneğin bir web sunucusunda aynı anda onlarca işlem diske erişmeye çalışıyorsa Linux bu istekleri block layer üzerinden depolama cihazına iletir.
Burada scheduler seçimi devreye girebilir.
Disk tarafındaki gerçek davranışı incelemek için daha önce hazırladığımız iostat ile Linux disk I/O performansı ölçme rehberini de kullanabilirsiniz. iostat ile Linux Disk I/O Performansı Nasıl Ölçülür?

🧩 Linux I/O Scheduler Türleri Nelerdir?
Linux sisteminizde kullanılabilecek scheduler seçenekleri kernel sürümüne ve yapılandırmaya göre değişebilir.
Yaygın olarak karşılaşabileceğiniz seçenekler:
nonemq-deadlinebfqkyber
Ancak her sistemde bu seçeneklerin tamamının bulunması gerekmez.
Kendi sunucunuzdaki kullanılabilir scheduler’ları şu komutla görebilirsiniz:
cat /sys/block/sda/queue/schedulerÖrneğin:
[mq-deadline] none bfqçıktısında köşeli parantez içerisindeki scheduler aktif olan seçenektir.
🔍 Teknik Not:/sys/block/ altında bulunan cihaz isimleri sistemden sisteme değişebilir. Bu nedenle önce lsblk ile disk adlarını kontrol etmek daha güvenlidir.
🚀 None I/O Scheduler Nedir?
none, I/O isteklerini mümkün olduğunca yeniden sıralamadan ilgili kuyruğa gönderen scheduler yaklaşımıdır.
Özellikle modern SSD ve NVMe depolama cihazlarında değerlendirilebilecek seçeneklerden biridir.
Ancak:
“NVMe kullanıyorum, kesinlikle none kullanmalıyım.”
şeklinde genel bir kural yoktur.
Depolama cihazı, Linux kernel sürümü, workload ve sanallaştırma altyapısı birlikte değerlendirilmelidir.
VDS üzerinde kullanılan depolama altyapısının genel performansını değerlendirirken VDS sunucuda performansın en etkili 10 yolu rehberimizdeki optimizasyonları da göz önünde bulundurabilirsiniz.
⏱️ mq-deadline Nedir?
mq-deadline, I/O isteklerinin belirli gecikme sınırları içerisinde işlenmesine yardımcı olmak amacıyla tasarlanmış scheduler’lardan biridir.
Özellikle okuma ve yazma isteklerinin bekleme sürelerini kontrol altında tutmaya odaklanır.
VDS gibi web sunucusu, veritabanı ve arka plan işlemlerinin aynı depolama kaynağını kullandığı sistemlerde değerlendirilebilir.
💡 İpucu:
Scheduler seçimini yalnızca teorik özelliklere göre değil, gerçek sunucu workload’u üzerinde yapılan ölçümlerle değerlendirmek daha sağlıklıdır.
⚖️ BFQ Nedir?
BFQ, yani Budget Fair Queueing, I/O kaynaklarını farklı işlemler arasında daha kontrollü şekilde paylaşmayı amaçlayan scheduler’dır.
Özellikle latency ve kaynak paylaşımına önem veren iş yüklerinde kullanılabilir.
BFQ’nun düşük latency odaklı davranışı bazı durumlarda maksimum throughput ile farklı sonuçlar ortaya çıkarabilir. Bu nedenle kullanım senaryosu önemlidir.
🧠 Linux I/O Scheduler ile I/O Wait Arasındaki İlişki
Linux I/O Scheduler nedir sorusunu cevaplarken I/O Wait kavramını da anlamak gerekir.
iowait, CPU’nun I/O işlemlerinin tamamlanmasını beklediği zamanla ilişkilidir.
Örneğin:
vmstat 1veya:
topkullanarak sistem davranışını inceleyebilirsiniz.
Ancak yüksek iowait gördüğünüzde doğrudan scheduler’ın yanlış olduğunu düşünmek doğru değildir.
Disk performansı, RAID yapısı, sanallaştırma katmanı, host yoğunluğu ve uygulamanın I/O davranışı da etkili olabilir.
Bu konuyu daha ayrıntılı incelemek için I/O Wait nedir? VDS sunucuda disk beklemesi rehberimize göz atabilirsiniz.
🔬 Mevcut I/O Scheduler Nasıl Kontrol Edilir?
Öncelikle diskleri görüntüleyebilirsiniz:
lsblkArdından ilgili disk için:
cat /sys/block/sda/queue/schedulerÖrneğin:
[mq-deadline] none bfqBurada mq-deadline aktif scheduler’dır.
NVMe cihazlarda ise disk adı genellikle nvme0n1 şeklinde olabilir:
cat /sys/block/nvme0n1/queue/scheduler🔍 Teknik Not:
Komutlarda sda veya nvme0n1 değerini kendi sunucunuzdaki gerçek disk adıyla değiştirmelisiniz.
🛠️ I/O Scheduler Nasıl Değiştirilir?
Scheduler çalışma sırasında değiştirilebilir.
Örneğin:
echo mq-deadline | sudo tee /sys/block/sda/queue/schedulerDaha sonra:
cat /sys/block/sda/queue/schedulerile kontrol edebilirsiniz.
Alternatif olarak:
echo none | sudo tee /sys/block/sda/queue/schedulerkullanılabilir.
⚠️ Dikkat:
Bu yöntemle yapılan değişiklik sistem yeniden başlatıldığında kalıcı olmayabilir. Üretim sunucularında kalıcı yapılandırma yapmadan önce mevcut ayarı kaydetmek ve değişiklik sonrası performans ölçümü gerçekleştirmek önemlidir.
📊 Hangi I/O Scheduler Tercih Edilmeli?
Tek bir scheduler’ı bütün VDS sunucuları için en iyi seçenek olarak değerlendirmek doğru değildir.
| Scheduler | Genel yaklaşım | Kullanım odağı |
|---|---|---|
none | Minimum yeniden sıralama | Modern hızlı depolama |
mq-deadline | Gecikme kontrollü | Dengeli I/O |
bfq | Kaynak paylaşımı | Latency ve fairness |
kyber | Gecikme odaklı | Bazı düşük gecikmeli iş yükleri |
Linux I/O Scheduler nedir sorusunun yanında asıl önemli soru, kullanılan workload için hangi scheduler’ın daha uygun olduğudur.
Burada özellikle VDS’nin genel darboğaz durumunu da hesaba katmak gerekir. Örneğin VDS sunucuda darboğaz tespit etme rehberimizde CPU, RAM ve disk kaynaklarının birlikte nasıl analiz edileceğini ele alıyoruz.
🖥️ VDS Sunucularda I/O Scheduler
VDS ortamlarında fiziksel disk her zaman doğrudan sanal makineye ait değildir.
Genellikle yapı:
VDS → Sanal Disk → Hypervisor → Host Storage → SSD/NVMe/RAID
şeklindedir.
Bu nedenle VDS içerisinde scheduler değiştirmek, fiziksel host tarafındaki bütün I/O problemlerini çözmez.
Örneğin host üzerinde yoğun depolama kullanımı varsa guest işletim sisteminde scheduler değiştirmeniz sorunun tamamını ortadan kaldırmayabilir.
Bu noktada VDS performans sorunu analiz rehberimizde olduğu gibi CPU, RAM, disk, Load Average ve sanallaştırma katmanını birlikte değerlendirmek gerekir.
💡 NVMe Sunucularda Scheduler Değiştirmek Gerekir mi?
Her NVMe sunucuda scheduler değiştirmek gerekli değildir.
Modern NVMe cihazları yüksek paralellik ve çoklu queue yapılarından yararlanabilir. none gibi basit scheduler’lar bu tür depolama cihazlarında değerlendirilebilir.
Ancak gerçek performans sonucu workload’a göre değişebilir.
Bu nedenle önce:
cat /sys/block/nvme0n1/queue/schedulerile mevcut durumu kontrol edin.
Ardından gerçek kullanım senaryosunda ölçüm yapın.
🧪 Scheduler Değişikliğini Nasıl Test Etmeli?
Scheduler değiştirdikten sonra performansı ölçmek için:
iostat -xz 1kullanabilirsiniz.
Kontrollü disk testleri için ise:
fioaracı kullanılabilir.
Özellikle şu değerleri karşılaştırın:
- IOPS
- Ortalama latency
await- Disk utilization
- Read throughput
- Write throughput
- CPU kullanımı
Örneğin iostat ile disk I/O performansını ölçme rehberimizde gerçek sistem yükü altında disk davranışını nasıl inceleyebileceğinizi detaylandırıyoruz.
⚠️ Dikkat:
Sadece MB/s değerine bakmayın. Veritabanı gibi küçük ve rastgele I/O yapan uygulamalarda latency ve IOPS çok daha anlamlı olabilir.
🔗 I/O Scheduler ile VDS Darboğazı
Bir VDS yavaşladığında tek bir bileşene odaklanmak yerine bütün kaynakları değerlendirmek gerekir.
CPU yüksekse: CPU darboğazı araştırılmalı.
CPU Steal Time yüksekse: Hypervisor ve fiziksel CPU kaynak paylaşımı incelenmeli.
I/O Wait yüksekse: Depolama tarafı araştırılmalı.
Disk latency yüksekse: Depolama altyapısı incelenmeli.
IOPS sınırına ulaşılıyorsa: Depolama veya sanallaştırma limitleri kontrol edilmeli.
Özellikle CPU tarafında problem olup olmadığını anlamak için CPU Steal Time nedir? VDS sunucuda CPU bekleme sorunu rehberimize bakabilirsiniz.
Bu nedenle Linux I/O Scheduler, VDS performans analizinin yalnızca bir parçasıdır.
🧱 Sanallaştırma Katmanı da Neden Önemli?
VDS performansını değerlendirirken yalnızca sanal makinenin içerisindeki kaynaklara bakmak bazen yeterli değildir.
Fiziksel CPU kaynaklarının birden fazla sanal makine arasında paylaşılması, sanallaştırma altyapısının çalışma şekli ve kaynak tahsisi de sistem davranışını etkileyebilir.
Örneğin CPU Overcommit nedir? VDS sunucuda işlemci nasıl paylaştırılır? rehberimizde fiziksel işlemci kaynaklarının sanal makineler arasında nasıl paylaştırılabildiğini incelemiştik.
Benzer şekilde VDS içerisindeki sanal işlemci kaynaklarının ne anlama geldiğini anlamak için vCPU nedir? Fiziksel CPU’dan farkı nedir? rehberimize göz atabilirsiniz.
⚠️ Scheduler Değiştirirken Nelere Dikkat Edilmeli?
Değişiklik öncesinde mevcut ayarı kaydedin:
cat /sys/block/sda/queue/schedulerDiskleri kontrol edin:
lsblkBirden fazla depolama cihazınız varsa hangi cihaz üzerinde işlem yaptığınızdan emin olun.
Özellikle üretim ortamında değişiklikleri doğrudan uygulamak yerine mümkünse test ortamında denemek daha güvenlidir.
Ayrıca scheduler değişikliğini tek başına değerlendirmek yerine VDS’nin genel performansını da takip etmek gerekir.
❓ Sık Sorulan Sorular
Linux I/O Scheduler nedir?
Linux I/O Scheduler, disk üzerindeki okuma ve yazma isteklerinin işletim sistemi tarafından nasıl yönetileceğini belirleyen mekanizmadır.
Linux’ta I/O Scheduler nasıl kontrol edilir?
cat /sys/block/sda/queue/schedulerkomutuyla mevcut ve kullanılabilir scheduler’ları görebilirsiniz.
VDS için hangi I/O Scheduler daha iyidir?
Tek bir seçenek bütün VDS sunucuları için uygun değildir. Disk türü, workload, Linux kernel yapısı ve sanallaştırma altyapısı birlikte değerlendirilmelidir.
NVMe için none kullanılmalı mı?
none modern NVMe sistemlerinde değerlendirilebilir ancak otomatik olarak en iyi seçenek değildir.
I/O Scheduler değiştirmek VDS’yi hızlandırır mı?
Bazı workload’larda olumlu sonuç verebilir. Ancak VDS performans sorunlarının tamamı scheduler kaynaklı değildir.
Scheduler değişikliği kalıcı mıdır?
Sysfs üzerinden yapılan değişiklik genellikle çalışma zamanı değişikliğidir ve yeniden başlatma sonrasında kalıcı olmayabilir.

🏁 Sonuç
Linux I/O Scheduler nedir sorusunun temel cevabı, Linux’un disk I/O isteklerini yönetmek ve depolama cihazına nasıl gönderileceğini belirlemek için kullandığı mekanizmadır.
none, mq-deadline, bfq ve bazı sistemlerde kyber gibi seçeneklerle karşılaşabilirsiniz. Ancak scheduler seçimini yalnızca genel tavsiyelere göre yapmak yerine kendi VDS sunucunuzdaki gerçek workload’u analiz etmek daha doğru yaklaşımdır.
Özellikle VDS performansında I/O Wait, disk latency, IOPS, CPU Steal Time ve genel sistem darboğazlarını birlikte değerlendirmek gerekir.
Daha geniş bir optimizasyon kontrolü yapmak isterseniz VDS sunucuda performansın en etkili 10 yolu rehberimizi de tamamlayıcı kaynak olarak kullanabilirsiniz.
🚀 Kısacası amaç sadece scheduler değiştirmek değil, sunucunuzdaki gerçek I/O problemini tespit edip buna uygun yapılandırmayı seçmektir.