永続的なblockdev setra先読み設定


14

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スクリプトで解決する必要がありますか?


2
これに対する「適切な」解決策があるかどうかはわかりませんが、udevルールはRCスクリプトよりも適切です。
パトリック

3
SSD BTWで先読みを増やす理由は何ですか?SSDのシーク時間が短いことを考えると、ポイントがわかりません。
ステファンシャゼル

回答:


16

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"

ファイルを保存した後、ルールがデバイスと一致するかどうか、およびudevがudevadmを使用して何を行うかをテストできます。

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

これにより、udevがロードするすべてのルール、一致するもの、一致しないもの、およびデバイスが接続されたときにudevが行う決定が出力されます。

お役に立てれば。


良い情報。機会があり、戻ってきたら、同様のudevルールを試してみます。私たちはOCZ vertex 3's を使用していますが、モデルフィールドを除き、提案されたルールはIntelに固有のものではないと思います。
バンジャー

はい、Intel SSDに特化したものはありません。属性によるフィルタリングのみの例として使用しました。udevadm infoハードウェアに固有のパラメーターを見つけるために使用する必要があります。
ゾレム

10

先読みは、少なくとも/sys/sys/class/block/sda/queue/read_ahead_kbblockdevおよびhdparmhdparm -a)で設定できることに注意してください。

hdparmDebianおよびその派生物には、hdparm.confブート時およびホットプラグ時に(udevルールを介して)設定されるデバイスごとの属性を指定するが付属しています。

だからあなたは持つことができます:

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

(IDを使用する方が、sdaブートごとに変更できるIDよりも優れています)。


hdparmSLES 11で表示されますが、を見つけられないようですhdparm.conf。Googleはhdparm、少なくともSuSEでは、設定を保持するにはrcスクリプトが必要だと言っているようです。
バンジャー

@Banjer、はい、それはDebian拡張機能のようです(Ubuntuで少し変更されています):初期起動時に実行されるシェルスクリプトと、そのファイルを解析してhdparmそれに応じて呼び出すデバイスホットプラグ。答えを更新しました。
ステファンシャゼル

/sysパスを指定するための+ 1。@ zorlem udevルールは、ブートアップ構成には非常に適しています。
トーター14年

-1

に対応するものは何もないsysctlので、うん、/etc/rc.local道は似ています。そして、私が個人的に気付いたのは、Ubuntuでは、これらの変更は起動後に一度設定されてもさらにドリフトするため、それcrontabを維持するために使用する意味さえあるかもしれないということです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.