SLES 11 SP2サーバーの/dev/sda1
と/dev/sdb1
にいくつかのSSDをマウントしましたが、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
起動時にこの設定を保持するにはどうすればよいですか?具体的には、対応する設定がsysctl.conf
にありますか、またはこれを実現するためにrcスクリプトで解決する必要がありますか?
SSDディスクのパラメーターを設定するには、udevを使用することをお勧めします。このようにして、SSDなどにより適した特定のキュースケジューラを構成できます。多くのパラメーターに基づいて、一部のデバイスにのみパラメーターを適用することもできます。
次のコマンドを実行することにより、デバイス(ディスクモデルや製造元など)に一致するために必要な特定の属性を取得できます。
udevadm info -a -p /sys/block/sda
ブロックデバイスのすべてのATTRペアをチェックします。
もう1つの利点は、プラグ可能なディスク(エンクロージャーやホットスワップベイなど)のパラメーターを設定できることで、デバイスパラメーターが一致すれば、その設定がすべての新しいデバイスに適用されます。
Intel SSDに特定のスケジューラを適用する例、希望する先読み値(4096ブロック= 2048 kb)、および他のすべてのSSDに別のスケジューラを適用する例を次に示します。
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"
ファイルを保存した後、ルールがデバイスと一致するかどうか、およびudevadmを使用してudevが何を実行するかをテストできます。
udevadm test --action=add /sys/block/sda
これにより、udevがロードするすべてのルール、一致するもの、一致しないもの、デバイスが接続されたときにudevが行う決定がすべて出力されます。
お役に立てれば。
先読みは、少なくとも/sys
(/sys/class/block/sda/queue/read_ahead_kb
)、blockdev
およびhdparm
(hdparm -a
)を介して設定できることに注意してください。
Debianおよびその派生物のhdparm
には、ブート時およびホットプラグ時に(udev
ルールを介して)設定するデバイスごとの属性を指定するhdparm.conf
が付属しています。
だからあなたは持つことができます:
/dev/disk/by-id/my-disk... {
read_ahead_sect = 4096
}
(あるブートから次のブートに変更できるsda
よりもIDを使用する方が良い).