Как настроить таргетинг на конкретный драйвер для модификации параметров ядра libata?

6

У меня установлена ​​22-дисковая установка, 19 из них в массиве ZFS, 15 из которых поддерживаются тремя умножителями портов, подключенными к контроллерам SATA, управляемым модулем sata_sil24 . При полной скорости (SATA2, 3 Гбит / с) операция довольно изворотливая. Простые ошибки чтения будут вызывать полный мультипликатор порта в спазмы в течение длительного времени, иногда с довольно ужасными результатами. Загрузка с параметром ядра libata.force=1.5G для принудительной установки контроллеров SATA на «устаревшие» скорости полностью устраняет все проблемы с помощью множителей портов. Дело в том, что мой пул ZFS поддерживается быстрым SSD-накопителем на моем контроллере ICH10R. Другой SSD на этом же контроллере содержит систему.

Выполнение libata.force=1.5G немедленно сбрасывает со скоростью 100 Мбайт / с от скорости передачи моих SSD. Для корневого диска это не так уж и важно, но для SSD-кэш-памяти SSD это так. Это эффективно делает весь zpool более медленным для длительных передач, чем без кеша. Случайный доступ и поиск в дереве fs, конечно, все равно приносят пользу. Перечисляя параметры модуля для sata_sil24 , такой опции не существует.

Как передать параметр libata.force=1.5G только на три контроллера SATA, поддерживаемых модулем sata_sil24 ?

    
задан DanielSmedegaardBuus 03.06.2012 в 18:23
источник

1 ответ

6

Ах! Я узнал!

В Ссылка говорится, что

    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:)

К счастью, я просто сделал это сопоставление вручную на прошлой неделе (пытаясь определить диск, который бросал спазмы и перезагружал хост-контроллер), поэтому у меня есть исчерпывающий список уже :) Я не мог найти нигде, что сопоставления из sdX к ataX.Y или W: X: Y: Z, где перечислены, поэтому я закончил просто вытаскивание кабелей SATA и просмотр сообщений ataX.YY в / var / log / messages;)

Итак, в моей настройке мне кажется, что мне нужно сделать

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

Собираюсь попробовать это, как только мой куст ZFS закончится, и отчитайся назад :) Удивительно! Надеюсь, это поможет кому-то еще:)

    
ответ дан DanielSmedegaardBuus 04.06.2012 в 12:36