web-dev-qa-db-fra.com

Comment cibler un pilote spécifique pour le modding de paramètre de noyau libata?

J'utilise une configuration à 22 disques, dont 19 dans une baie ZFS et 15 sur des multiplicateurs de ports associés à des contrôleurs SATA pilotés par le module sata_sil24. Lorsque vous utilisez la vitesse maximale (SATA2, 3 Gbps), l'opération est assez bizarre. De simples erreurs de lecture jetteront un sperme complet sur un multiplicateur de ports pendant longtemps, avec parfois des résultats assez terribles. Le démarrage avec le paramètre de noyau libata.force=1.5G pour forcer les contrôleurs SATA à des vitesses "traditionnelles" résout complètement tous les problèmes liés aux multiplicateurs de port. Le problème est que mon pool ZFS est soutenu par un SSD à cache rapide sur mon contrôleur ICH10R. Un autre disque SSD sur ce même contrôleur détient le système.

Faire libata.force=1.5G coupe immédiatement environ 100 Mo/s du débit de transfert de mes disques SSD. Pour le lecteur racine, ce n'est pas si grave, mais pour le cache SSD ZFS, ça l'est. Cela rend effectivement le zpool entier plus lent pour les transferts soutenus qu'il ne l'aurait été sans le lecteur de cache. L’accès aléatoire et les recherches dans l’arbre fs en bénéficient bien entendu. En énumérant les options de module pour sata_sil24, aucune option de ce type n'existe.

Comment passer le paramètre libata.force=1.5G uniquement aux trois contrôleurs SATA sauvegardés par le module sata_sil24?

6

Ah! J'ai découvert!

À http://www.kernel.org/doc/Documentation/kernel-parameters.txt , il est indiqué,

    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.

La partie délicate consiste donc à déterminer quel port X et quel périphérique Y (dmesg ataX.YY) correspond au contrôleur et au lecteur. Je pense que cette notation correspond à PORT [.DEVICE], mais il y a aussi la notation W: X: Y: Z. Je devine ataX.YY :)

Heureusement, la semaine dernière, j’ai fait ce mappage manuellement (en essayant d’identifier un lecteur qui jetait des spasmes et en réinitialisant un contrôleur d’hôte), donc j’ai déjà une liste exhaustive :) Je n’ai trouvé nulle part que les mappages de sdX à ataX. Y ou W: X: Y: Z étaient listés, alors je me suis contenté d'extraire des câbles SATA et de regarder quels messages ataX.YY apparaissaient dans/var/log/messages;)

Donc, dans ma configuration, il me semble que je dois faire

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

Je vais devoir essayer ça dès la fin de mon nettoyage ZFS et faire un compte rendu :) Super! J'espère que ceci aide quelqu'un d'autre :)

7