KVM, VMware ve bulut VPS sunucularında sanal disk kuyruk gecikmesini engelleyin; NVMe ve SSD depolamalarınız için 'none' doğrudan geçiş kurallarını ve kalıcı udev yapılandırmasını oluşturun.
Sanal sunucularda (VPS) disk zamanlamasını hipervizör yaptığı için konuk OS 'none' kullanmalıdır.
Veritabanı OLTP iş yüklerinde read_ahead_kb 32KB'a düşürülerek gereksiz disk önbellekleme gecikmesi önlenir.
NVMe sürücüler donanım düzeyinde 64.000 ayrı kuyruğa (multi-queue) sahiptir. Ayrıca KVM/Proxmox hipervizörü I/O yönetimini zaten yapmaktadır. Konuk Linux çekirdeğinde 'none' (doğrudan geçiş) seçildiğinde gereksiz çift kuyruklama (double scheduling) ve CPU kilitlenmesi önlenir; IOPS %8-12 oranında artar.
Doğrudan donanım/hipervizör geçişi (sıfır kilitlenme)
Çift kuyruklamanın (double scheduling) kaldırılmasıyla kazanılan verim
Veritabanı için gereksiz sıralı okumayı engeller
Aynı anda işlenebilecek I/O istek tavanı
# /etc/udev/rules.d/60-disk-scheduler.rules
# Yeniden Başlatmalarda Kalıcı Olan Linux I/O Zamanlayıcı Kuralı
# 1. NVMe Sürücüler İçin 'none' (Doğrudan Donanım Kuyruğu)
ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/scheduler}="none", ATTR{queue/nr_requests}="2048"
# 2. KVM / Proxmox / Cloud VirtIO Diskler (vda, vdb) İçin 'none'
ACTION=="add|change", KERNEL=="vd[a-z]", ATTR{queue/scheduler}="none", ATTR{queue/nr_requests}="2048"
# 3. SATA SSD Diskler (Rotational=0)
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none", ATTR{queue/nr_requests}="1024"
# 4. Mekanik Dönen Sabit Diskler (Rotational=1)
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="bfq", ATTR{queue/nr_requests}="512"
Geleneksel mekanik sabit diskler (HDD), tek bir okuma kafasına sahip olduğu için Linux çekirdeği gelen istekleri plaka dönüş sırasına göre sıralamak (asansör algoritması) zorundaydı. Ancak modern NVMe sürücüler donanımsal olarak 64.000 ayrı kuyrukve her kuyrukta 64.000 paralel komut çalıştırabilir. Ayrıca sanal sunucu (VPS/VDS) kullanıyorsanız, ana sunucu hipervizörü (KVM/QEMU) disk isteklerini zaten yönetmektedir.
Sanal sunucunuzda mq-deadline veya bfqkullanıldığında, konuk işletim sistemi I/O isteklerini önce kendi yazılımsal kuyruğunda bekletip sıralar, ardından hipervizöre iletir. Hipervizör de bu istekleri tekrar kuyruğa sokar. Bu durum CPU kilitlenmesine, gecikme sıçramalarına (await latency) ve rastgele IOPS performansında %8-%15 kayba yol açar. Çözüm, zamanlayıcıyı none (doğrudan geçiş / passthrough) yaparak isteklerin sıfır gecikmeyle doğrudan donanıma akmasını sağlamaktır.
Terminalden çalıştırılan echo none > /sys/block/nvme0n1/queue/schedulerkomutu sunucu yeniden başladığında veya çekirdek güncellendiğinde kaybolur./etc/udev/rules.d/60-disk-scheduler.rules dosyası, Linux çekirdeği her açıldığında donanım türünü (NVMe, VirtIO, SSD veya HDD) otomatik tespit ederek doğru zamanlayıcıyı kalıcı olarak atar.