web-dev-qa-db-ja.com

libataカーネルパラメーターの改造の特定のドライバーをターゲットにするにはどうすればよいですか?

22個のディスクセットアップを実行しています。そのうち19個はZFSアレイ、15個はsata_sil24モジュールで駆動されるSATAコントローラーに接続された3つのポートマルチプライヤでバックアップされています。フルスピード(SATA2、3 Gbps)で実行している場合、操作は非常に奇妙です。単純な読み取りエラーは、ポート乗算器全体を長時間にわたって痙攣させ、時には非常にひどい結果になります。カーネルパラメーターlibata.force=1.5Gを使用して起動し、SATAコントローラーを強制的に「レガシー」速度にすると、ポートマルチプライヤに関するすべての問題が完全に修正されます。つまり、私のZFSプールはICH10Rコントローラー上の高速キャッシュSSDによって支えられています。この同じコントローラー上の別のSSDがシステムを保持しています。

libata.force=1.5Gを実行すると、SSDの転送速度がすぐに約100 MB/s削られます。ルートドライブにとってはそれほど大したことではありませんが、ZFSキャッシュSSDにとってはそうです。これにより、キャッシュドライブがない場合よりも、持続的な転送のためにzpool全体が事実上遅くなります。もちろん、ランダムアクセスとfsツリールックアップは依然として有益です。 sata_sil24のモジュールオプションを一覧表示しますが、そのようなオプションは存在しません。

libata.force=1.5Gモジュールに支えられている3つのSATAコントローラーだけにsata_sil24パラメーターを渡す方法

あ!わかった!

http://www.kernel.org/doc/Documentation/kernel-parameters.txt には、

    libata.force=   [LIBATA] Force configurations.  The format is comma
        separated list of "[ID:]VAL" where ID is
        PORT[.DEVICE].  PORT and DEVICE are decimal numbers
        matching port, link or device.  Basically, it matches
        the ATA ID string printed on console by libata.  If
        the whole ID part is omitted, the last PORT and DEVICE
        values are used.  If ID hasn't been specified yet, the
        configuration applies to all ports, links and devices.

        If only DEVICE is omitted, the parameter applies to
        the port and all links and devices behind it.  DEVICE
        number of 0 either selects the first device or the
        first fan-out link behind PMP device.  It does not
        select the Host link.  DEVICE number of 15 selects the
        Host link and device attached to it.

        The VAL specifies the configuration to force.  As long
        as there's no ambiguity shortcut notation is allowed.
        For example, both 1.5 and 1.5G would work for 1.5Gbps.
        The following configurations can be forced.

        * Cable type: 40c, 80c, short40c, unk, ign or sata.
          Any ID with matching PORT is used.

        * SATA link speed limit: 1.5Gbps or 3.0Gbps.

        * Transfer mode: pio[0-7], mwdma[0-4] and udma[0-7].
          udma[/][16,25,33,44,66,100,133] notation is also
          allowed.

        * [no]ncq: Turn on or off NCQ.

        * nohrst, nosrst, norst: suppress hard, soft
                      and both resets.

        * dump_id: dump IDENTIFY data.

        If there are multiple matching configurations changing
        the same attribute, the last one is used.

そのため、注意が必要なのは、どのポートXとデバイスY(dmesg ataX.YY)がどのコントローラーとドライブであるかを見つけることです。私は思う-その表記はPORT [.DEVICE]と一致しますが、W:X:Y:Z表記もあります。私はataX.YYを推測しています:)

幸いなことに、私は先週手動でこのマッピングを行いました(痙攣を起こし、ホストコントローラーをリセットしているドライブを特定しようとしているため)、完全なリストが既にあります:) YまたはW:X:Y:Zがリストされているので、SATAケーブルを抜き取り、/ var/log/messagesにどのataX.YYメッセージが現れるかを見てしまいました;)

だから、私のセットアップでは、私がする必要があるようです

libata.force=1:1.5G,2:1.5G,3:1.5G

私のZFSスクラブが終了したらすぐにそれを試して、報告する必要があります:)素晴らしい!これが他の誰かに役立つことを願っています:)