BFQ zamanlayıcı nasıl etkinleştirilir ve kullanılır?


16

Ubuntu 17.04 üzerine ukuu (Ubuntu Çekirdek Güncelleme Yardımcı Programı https://doc.ubuntu-fr.org/ubuntu_kernel_upgrade_utility ) kullanarak Linux çekirdek 4.12 sürümünü yükledim .

Mesele şu ki, mevcut I / O zamanlayıcılarını kontrol ettiğimde, BFQ veya Kyber I / O zamanlayıcısını bulamıyorum:

cat /sys/class/block/sda/queue/scheduler
> noop deadline [cfq]

Peki bu Linux sürümünde yeni zamanlayıcılardan biri nasıl kullanılır?

Yanıtlar:


22

Ubuntu'da değilim, ancak Fedora'da yaptığım şey size yardımcı olabilir.

Önyükleme işlemi, düzenleme / etc / default / grub dosyasını en blk-mq etkinleştirmek ve eklemem gerekiyor böylece BFQ, bir blk-mq (Çok Kuyruk Blok IO Queuing Mekanizması) scheduler scsi_mod.use_blk_mq=1adresinden Müşteri GRUB_CMDLINE_LINUX, bu benim grub dosyası olarak, olduğu Bir örnek:

GRUB_TIMEOUT=3
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=false
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="quiet vt.global_cursor_default=0 scsi_mod.use_blk_mq=1"
GRUB_DISABLE_RECOVERY="true"

Bundan sonra grubunuzu güncellemelisiniz. Fedora'da , önyükleme yöntemine bağlı olaraksudo grub2-mkconfig -o /path/to/grub.cfg değişen kullanmalıyız . Ubuntu'da şunları çalıştırabilirsiniz:

sudo update-grub

Yeniden başlatın ve bunu alırsanız:

cat /sys/block/sda/queue/scheduler
[mq-deadline] none

Muhtemelen çekirdeğiniz bir modül olarak BFQ ile derlenmiştir ve bu Kyber için de geçerli olabilir.

sudo modprobe bfq
sudo cat /sys/block/sda/queue/scheduler
[mq-deadline] bfq none

/etc/modules-load.d/bfq.confİçeren bir dosya ekleyerek önyükleme sırasında ekleyebilirsiniz bfq.

Blk_mq dönüşünü etkinleştirmenin blk_mq olmayan zamanlayıcıları kullanmanın imkansız olduğunu unutmamak önemlidir, böylece noop cfq ve mq olmayan son tarihi kaybedersiniz

Görünüşe göre blk_mq zamanlama sistemi grubdaki asansör bayraklarını desteklemiyor, daha tanımlı bir kontrol sunma bonusu ile bunun yerine udev kuralları kullanılabilir.

Mevcut /etc/udev/rules.d/60-scheduler.rulesdeğilse oluşturun ve ekleyin:

ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"

Belirttiği gibi burada gerekirse Udev özelliğini kullanan kurallarını size dönme (HDD'ler) ayırt olmayan dönme (SSD) cihazları olabilir ATTR{queue/rotational}. BFQ geliştiricisi Paolo Valente'nin LinuxCon Europe'ta BFQ'nun düşük gecikme garantileri açısından noopveya deadlinezamanlayıcılardan daha iyi bir seçim olabileceğini , SSD'ler için de kullanılması iyi bir tavsiyede bulunduğunu unutmayın.

Paolo'nun karşılaştırması: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be

Kaydet ve yeniden yükle ve tetikle udev rules:

sudo udevadm control --reload
sudo udevadm trigger

3
Sadece şunu belirtmek istiyorum: Linux'u <4.15 olan bilgisayarlarda bunu askıya alabileceğinizi beklemeyin; <4.15 tüm G / Ç'yi özgeçmişe asacaktır, çünkü "güvenli SCSI sorgulama" düzeltmeleri yoktur.
Ivan Kozik

Ayrıca, çekirdek 4.14'te, blk-mq'yi etkinleştirmenin, çekirdeği bazı sistemlere yüklemenin hemen başında bir çekirdek "oops" verdiği görünüyor olabilir (tam bir durdurma paniği değil, çekirdek içinde boş bir dereference). Eğer aramıyorsanız kaçırırsınız ama paranoyaksanız bir şeyin kırıldığının bir işareti olabilir.
CR.

1
Biraz daha doğru bir udev kuralı kullanmanızı öneririm. Burada gösterileni denediğimde, udev, adları bu modelle eşleşen, ancak BFQ zamanlayıcısını kullanabilen SCSI blok cihazları olmayan bazı cihazlar için zamanlayıcıyı ayarlamaya çalıştı. ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq"Sonunda bulduğum kural şudur: Cihazların adlarına karşı desen eşleşmesini önler, bu da eşleştirmeyi daha doğru hale getirir. "Kuyruk / zamanlayıcı" özniteliğine sahip olmadıkları için bölüm aygıtlarıyla eşleşmez.
Dan Moulding

3
Ayrıca dikkat edilmesi gereken önemli bir nokta, 4.15-4.16 çekirdekleri, BFQ kullanırken bir sürücünün bölüm şemasını güncellemenin tam bir G / Ç kilitlemesine yol açabileceği oldukça ciddi bir hatadan muzdarip olmasıdır. Cf .: lkml.org/lkml/2017/12/1/80
Glutanimate

1

Mükemmel RomuloPBenedetti cevabını genişletmek için :

Udev PROGRAM=="/bin/grep -E -q '(^|[[:space:]])bfq($|[[:space:]])' '$sys$devpath/queue/scheduler'"kuralını kullanarak bfq zamanlayıcısının belirli bir cihazda gerçekten kullanılabilir olup olmadığını test edebilirsiniz . Bu etkili bir şekilde yerini alacak DRIVERS=="sd|sr"ve sadece unutulursa ateş etmeyecekscsi_mod.use_blk_mq=1

Diğer bilgiler:

  • PROGRAM- Bir eşleşme olup olmadığını belirlemek için bir program yürütmek; program başarılı bir şekilde geri dönerse anahtar doğrudur; Hiçbir mutlak yol verilmezse, programın / lib / udev'de yaşaması beklenir.
  • $sys- Sysfs bağlama noktası ( /sys).
  • $devpath - Cihazın geliştirilmesi (/ device / pci / ...).
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.