Kalıcı blockdev setra ileri okuma ayarı


14

Bir SLES 11 SP2 sunucusuna /dev/sda1ve /dev/sdb1üzerine kurulu bazı SSD'lerim var ve önceden okuma ayarını değiştirebildim blockdev --setra:

sudo blockdev --setra 4096 /dev/sda
sudo blockdev --setra 4096 /dev/sdb
sudo blockdev --getra /dev/sda
4096
sudo blockdev --getra /dev/sdb
4096

Önyükleme sırasında bu ayarı nasıl saklayabilirim? Özellikle, içinde karşılık gelen bir ayar sysctl.confvar mı, ya da bunu yapmak için bir rc komut dosyası için yerleşmek zorunda kalacak mıyım?


2
Bunun için 'uygun' bir çözüm olup olmadığını bilmiyorum, ama udev kuralları bir RC betiğinden daha uygun olacaktır.
Patrick

3
Neden bir SSD BTW'de okunan değeri artırmak istersiniz ? SSD'lerin küçük arama süreleri olduğu düşünülemez.
Stéphane Chazelas

Yanıtlar:


16

SSD diskler için parametreleri ayarlamak için udev kullanmanızı öneririm. Bu şekilde, SSD, vb. İçin daha uygun olan belirli bir kuyruk zamanlayıcıyı yapılandırabilirsiniz. Parametreleri, birçok parametreye dayalı olarak yalnızca bazı cihazlara uygulayabilirsiniz.

Aşağıdaki işlemleri gerçekleştirerek aygıtlarınızla (ör. Disk modeli ve üreticisi) eşleştirmek için gereken belirli özellikleri edinebilirsiniz:

udevadm info -a -p /sys/block/sda

ve blok cihazınız için tüm ATTR çiftlerini kontrol etme.

Diğer bir avantaj, takılabilir diskler için parametreleri ayarlama yeteneğidir (örn. Muhafazalarda veya hotswap bölmelerinde) ve ayar, aygıt parametrelerinin eşleşmesi koşuluyla tüm yeni aygıtlara uygulanacaktır.

Aşağıda, Intel SSD'ler için belirli bir zamanlayıcı, istediğiniz okuma kafası değeri (4096 blok = 2048 kb) ve ayrıca tüm diğer SSD'ler için farklı bir zamanlayıcı uygulamak için bir örnek verilmiştir:

cat /etc/udev/rules.d/99-ssd.rules
# http://unix.stackexchange.com/a/71409/36574
# Setting specific kernel parameters for a subset of block devices (Intel SSDs)
SUBSYSTEM=="block", ATTRS{model}=="Intel SSDSC*", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="2048", ATTR{queue/scheduler}="deadline"
# for all other non-rotational block devices set a scheduler to 'noop' and readahead to 1024KB
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="1024", ATTR{queue/scheduler}="noop"

Dosyayı kaydettikten sonra kuralınızın cihazla eşleşip eşleşmeyeceğini ve udevadm kullanarak ne yapacağını test edebilirsiniz:

udevadm test --action=add /sys/block/sda

Bu, udev'in yüklediği tüm kuralları, neyle eşleştiğini, neyin uymadığını ve cihaz takıldığında udev'in hangi kararları alacağını yazdırır.

Bu yardımcı olur umarım.


İyi bilgi. Bir şans bulduğumda ve sana geri döndüğümde benzer udev kurallarını deneyeceğim. OCZ vertex 3'S kullanıyoruz , ancak model alan dışında önerilen kurallarınızın Intel'e özgü olduğunu düşünmüyorum, değil mi?
Banjer

Evet, intel SSD'lere özgü bir şey yok, yalnızca özelliklere göre filtreleme için örnek olarak kullandım. udevadm infoDonanımınıza özgü parametreleri bulmak için kullanmanız gerekecektir .
zorlem

10

Önden okuma en azından /sys( /sys/class/block/sda/queue/read_ahead_kb) blockdevve hdparm( hdparm -a) ile ayarlanabilir .

hdparmDebian ve türevleri hdparm.conf, önyüklemede ve çalışırken takma sırasında ( udevkurallar aracılığıyla ) ayarlanacak aygıt başına öznitelikleri belirten bir gelirle birlikte gelir .

Böylece sahip olabilirsiniz:

/dev/disk/by-id/my-disk... {
  read_ahead_sect = 4096
}

( sdabir önyüklemeden diğerine değişebilen kimlikleri kullanmak daha iyidir ).


hdparmSLES 11'de görüyorum , ancak bulamıyorum hdparm.conf. Google, herhangi bir hdparmayarın devam edebilmesi için en azından SuSE'de bir rc komut dosyasının gerekli olduğunu söylüyor .
Banjer

@Banjer, evet, bu bir Debian uzantısı (Ubuntu'da biraz değiştirildi) gibi görünüyor: erken önyükleme ve bu dosyayı ayrıştıran ve hdparmbuna göre çağıran cihaz hot plug üzerinde çalışan bir kabuk komut dosyası . Cevabı güncelledim.
Stéphane Chazelas

/sys@Zorlem udevkuralı önyükleme yapılandırması için oldukça güzel olmasına rağmen yolu belirtmek için +1 .
Ocak'ta Totor

-1

Buna karşılık gelen bir şey yok sysctl, yani, /etc/rc.localbir yol ya da benzer. Ve dikkat edin, - kişisel olarak Ubuntu'da fark ettim, - bu değişiklikler önyüklemeden sonra bile bir kez daha belirlendi, bu yüzden onu crontabtutmak için kullanmak mantıklı olabilir .

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.