Setra blockdev persisten membaca pengaturan di depan

14

Saya telah memasang beberapa SSD pada /dev/sda1dan /dev/sdb1di server SLES 11 SP2, dan saya dapat mengubah pengaturan baca depan dengan 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

Bagaimana cara mempertahankan pengaturan ini saat boot? Secara khusus, apakah ada pengaturan yang sesuai sysctl.conf, atau saya harus puas dengan skrip rc untuk mewujudkannya?

Banjer
sumber
2
Saya tidak tahu apakah ada solusi 'tepat' untuk ini, tetapi aturan udev tentu akan lebih tepat daripada skrip RC.
Patrick
3
Mengapa Anda ingin meningkatkan read-ahead pada SSD BTW? Saya tidak bisa melihat titik mengingat bahwa SSD memiliki waktu pencarian yang kecil.
Stéphane Chazelas

Jawaban:

16

Saya sarankan Anda menggunakan udev untuk mengatur parameter untuk disk SSD. Dengan cara ini Anda dapat mengkonfigurasi penjadwal antrian tertentu yang lebih sesuai untuk SSD, dll. Anda juga dapat menerapkan parameter hanya untuk beberapa perangkat, berdasarkan banyak parameter.

Anda dapat memperoleh atribut spesifik yang diperlukan untuk mencocokkan perangkat Anda (mis. Model disk dan pabrikan) dengan menjalankan:

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

dan memeriksa semua pasangan ATTR untuk perangkat blok Anda.

Manfaat lain adalah kemampuan untuk mengatur parameter untuk disk yang dapat dicolokkan (mis. Dalam penutup atau ruang hotswap) dan pengaturan akan diterapkan ke semua perangkat baru, asalkan parameter perangkat cocok.

Berikut adalah contoh untuk menerapkan penjadwal khusus untuk Intel SSD, nilai readahead yang Anda inginkan (4096 blok = 2048 kb), dan juga menerapkan penjadwal yang berbeda untuk semua SSD lainnya:

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"

Setelah menyimpan file, Anda dapat menguji apakah aturan Anda akan cocok dengan perangkat dan apa yang akan udev lakukan dengan menggunakan udevadm:

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

Ini mencetak semua aturan yang memuat udev, apa yang cocok, apa yang tidak, dan keputusan apa yang akan udev buat saat perangkat dicolokkan.

Semoga ini membantu.

zorlem
sumber
Info bagus Saya akan mencoba beberapa aturan udev serupa ketika saya mendapatkan kesempatan dan kembali kepada Anda. Kami menggunakan OCZ vertex 3, tetapi saya pikir aturan yang Anda sarankan tidak spesifik untuk Intel, kecuali untuk bidang model, benar?
Banjer
Ya, tidak ada yang spesifik untuk intel SSD, saya menggunakannya sebagai contoh untuk memfilter berdasarkan atribut saja. Anda perlu menggunakan udevadm infountuk menemukan parameter khusus untuk perangkat keras Anda.
zorlem
10

Perhatikan bahwa baca-depan dapat diatur setidaknya melalui /sys( /sys/class/block/sda/queue/read_ahead_kb), blockdevdan hdparm( hdparm -a).

hdparmpada Debian dan turunannya dilengkapi dengan hdparm.confatribut per-perangkat yang ditentukan untuk diatur saat boot, dan pada hot-plug (melalui udevaturan).

Jadi, Anda dapat memiliki:

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

(lebih baik menggunakan ID daripada sdayang dapat berubah dari satu boot ke yang berikutnya).

Stéphane Chazelas
sumber
Saya melihat hdparmpada SLES 11, tetapi tampaknya tidak dapat menemukannya hdparm.conf. Google tampaknya memberi tahu saya skrip rc diperlukan agar hdparmpengaturan apa pun tetap ada, setidaknya pada SuSE.
Banjer
@ Banjer, ya, sepertinya itu adalah ekstensi Debian (sedikit dimodifikasi di Ubuntu): skrip shell dijalankan saat boot awal dan plug hot perangkat yang mem-parsing file dan panggilan tersebut hdparm. Saya sudah memperbarui jawabannya.
Stéphane Chazelas
+1 untuk menentukan /sysjalur meskipun udevaturan zorlem cukup bagus untuk konfigurasi bootup.
Totor
-1

Tidak ada yang sesuai sysctl, jadi, ya, /etc/rc.localitu jalan, atau sama. Dan berhati-hatilah, - Saya pribadi memperhatikan bahwa di Ubuntu, - perubahan-perubahan itu melayang lebih jauh bahkan ditetapkan sekali setelah boot, jadi, bahkan mungkin masuk akal untuk menggunakannya crontab.

poige
sumber