|
|||||||||||||||||||||||||||||||||||||||||||
|
MaxTransfer et Mask : ces noms barbares des paramètres de transfert SCSI Tout possesseur d'une carte contrôleur SCSI, connectée à un ou plusieurs périphériques, s'est invariablement frotté au douloureux problème de la configuration de deux paramètres, cruciaux pour les transferts de données : Mask et MaxTransfer. En effet, la valeur correcte qu'on doit leur donner dépend intimement à la fois de la carte contrôleur, du pilote Amiga, et de chacun des périphériques SCSI qui lui sont connectés. Une mauvaise configuration est source de plantage ou de transferts bien plus lents que ce à quoi on s'attendait. En fouillant dans les manuels que je possède parlant un peu du sujet, et après quelques essais personnels, je me propose de faire un point utile à leur sujet. Définition Une carte contrôleur (SCSI, IDE ou autre) effectue des transferts de données entre l'Amiga et la "puce" électronique qui gère directement les divers périphériques qui lui sont rattachés. Dans la pratique, la pléthore de cartes SCSI sur le marché, montra que chaque fabricant s'en est allé de ses propres spécifications, comme utiliser le DMA (Direct Memory Access, accès direct à la mémoire vive sans passer par le microprocesseur) ou pas, utiliser telle ou telle puce SCSI etc. Chaque carte possède donc son propre pilote, qui constitue l'interface logicielle bas niveau entre le microprocesseur central (68000 ou autre) et ladite carte. Toutes les cartes ne sont donc pas sur un pied d'égalité devant le SCSI si je peux dire. Certaines, non DMA, ont un pilote qui monopolise le microprocesseur de manière intensive puisqu'il doit gérer tout seul les transferts de données sans le secours de le DMA. D'autres, gérant le DMA, soulagent davantage le microprocesseur lors des échanges, mais peuvent poser des problèmes d'accès à la mémoire Amiga liés à l'utilisation de le DMA. Pour palier dans une certaine limite à ces différences et aux problèmes liés à chaque carte et son pilote associé, Mask et MaxTransfer ont été introduits dans le système d'exploitation (transferts de fichiers) de l'Amiga. Ces deux paramètres sont à configurer impérativement selon les besoins de chacun, en fait selon la composition de la "chaîne" SCSI : contrôleur + pilote + périphériques. Mask Comme son nom (anglais) l'indique, il sert à "masquer" certaines adresses, pour empêcher le pilote de la carte d'effectuer des transferts de données dans des zones de mémoire auxquelles il ne doit, ne peut ni ne sait avoir accès. Ceci résulte en général d'une mauvaise conception de la carte, des autres cartes et/ou de la puce SCSI. Par exemple, un transfert DMA vers une zone de mémoire non adressable par DMA est interdit, et ceci doit être spécifié au pilote SCSI par la valeur adéquate de Mask. Toute zone de mémoire ainsi "écartée" par Mask forcera le pilote à transférer les données en mode entrées/sorties programmées (accès direct du processeur à la puce SCSI, le DMA étant désactivé) par l'intermédiaire de tampons (buffers) comme définis par le paramètre BUF (voir figure 1), TYPE BUFFER (voir figure 2), ou encore BUFMEMTYPE dans une liste de montage. Figure 1 : FaaastPrep Utility 1.98m de GVP MaxTransfer Il spécifie la quantité de données transférables en mémoire d'un seul tenant par le pilote. Si on demande une taille supérieure à ce que le pilote sait faire, le transfert sera "saucissonné" en autant de petits segments de taille maxi égale à MaxTransfer. Ceci résulte en général aussi d'une mauvaise programmation du pilote du contrôleur SCSI. C'est un entier long codé sur 32 bits signés (hmm... j'ai lu ça quelque part mais où ?), de 0 à 0x7FFFFFFF. Usage Les valeurs adéquates de Mask et MaxTransfer sont "en principe" spécifiées par le fabricant du pilote qui vient avec le contrôleur SCSI. Les valeurs passe-partout données ci-dessous en (1) et (2) devraient marcher pour tout contrôleur, sauf si celui-ci fait des bidouilles peu orthodoxes qui lui sont propres, ou bien si l'une ou l'autre carte Zorro a une conception notoirement pourrie. Noter que ces deux paramètres sont librement configurables séparément selon chaque périphérique (disque dur, lecteur de CD, DAT, scanner, etc.) mais en pratique toutes les valeurs seront identiques, sauf mention expresse. Les valeurs "standard" utilisables sur tout Amiga de base (processeur 68000) sont : (1) Mask = 0x00FFFFFE (hexadécimal). (2) MaxTransfer = 0x00FFFFFF (hexadécimal). (1) Cette valeur autorise les transferts DMA sur la totalité des 16 Mo d'espace adressable de l'Amiga de base, qui ne possède que 24 lignes d'adresses (soit 24 bits 6 chiffres hexa), mais uniquement alignés sur les adresses paires. C'est une limitation du 68000, qui a besoin que son code exécutable se trouve ainsi aligné sur les adresses paires (0, 2, 4, 6, etc.). (2) Cette valeur autorise toutes tailles de transfert de données, depuis un seul octet jusqu'à 16 Mo (espace adressable maximal du 68000). Par contre, le nouveau pilote de Ralph Babel s'affranchissant tout seul de tous les problèmes possibles, l'heureux possesseur d'une Guru ROM pourra utiliser les valeurs suivantes : (3) Mask = 0xFFFFFFFF (hexadécimal). (4) MaxTransfer = 0x7FFFFFFF (hexadécimal). (3) Cette valeur autorise les transferts DMA sur la totalité de l'espace adressable de tout Amiga de base (processeur 68000, 24 bits d'adresses = 16 Mo) ou "gonflé" (processeur 68030, 68040, etc., 32 bits d'adresses = 4 Go). Les données ne sont plus obligatoirement alignées sur les adresses paires, c'est le pilote (Guru ROM) qui déterminera tout seul la méthode de transfert la plus appropriée, en amont du système d'exploitation. (4) Cette valeur autorise toute taille de transfert de données, depuis un seul octet jusqu'à 2 Go (bit 31 à 0 car c'est un entier signé). Un dernier exemple de mauvaises valeurs sur un Amiga de base (68000), sauf avis contraire : (5) Mask = 0x001FFFFF (hexadécimal). (6) MaxTransfer = 0x0000FFFF (hexadécimal). (5) Cette valeur n'autorise les transferts DMA que sur l'espace mémoire correspondant à la mémoire Chip (premiers 2 Mo). Tous les transferts à destination de la mémoire Fast (adresses entre 0x200000 et 0x800000) ne tireront pas parti du DMA, et s'effectueront par l'intermédiaire de tampons, souvent en mémoire Chip, d'où une lenteur incroyable. De plus, cette valeur de Mask autorise le DMA sur les adresses paires comme impaires, car elle finit par "...F" (et non par "...E") et le 68000 n'aimera pas ça du tout. (6) Cette valeur n'autorise que les transferts par blocs de 64 ko maxi. Tout transfert de taille supérieure sera coupé en autant de blocs de 64 ko que nécessaire, d'où ralentissement supplémentaire. Utilitaires SCSI Pour changer la valeur de Mask et MaxTransfer, il faut passer par un des nombreux utilitaires de partitionnement des disques durs (qu'ils soient SCSI ou pas), comme ceux illustrés dans les photos d'écran jointes, avec ma propre configuration (GVP Combo 68030 + Guru ROM). Jouer avec ces valeurs avec un disque déjà formaté et contenant des données est tout à fait possible et sans danger pour les données, car seuls certains bits du RDB (Rigid Disk Block) du disque dur sont modifiés, pas le partitionnement ni la table d'allocation des fichiers. Figure 2 : ExpertPrep Utility 2.51 de GVP Figure 3 : HDToolBox de Commodore Bibliographie GVP Series II User's Guide. CBM Amiga Hard Drive User's Guide (Workbench 2.1). GVP Combo 68030 Manuel d'installation et d'utilisation. Schatztruhe Guru ROM v6. Annexe : conseils Suite à cet article, j'ai vite reçu un appel à l'aide alarmiste, consécutif à un bidouillage de ces valeurs entraînant un non-fonctionnement du disque dur. Je rappelle à tous et toutes ces notions élémentaires très importantes : 1. Avant tout changement, noter les précédentes valeurs qui marchaient jusqu'ici ! De préférence, sauvegarder également les données présentes sur le disque ! En cas de plantage total, c'est si facile de revenir en quelques minutes à une configuration éprouvée. 2. Ne pas changer quelque chose qui marche, sauf besoin précis. Si les valeurs actuelles donnent de bons résultats (à défaut d'être au "top" des performances), les conserver ! Les changements "au petit bonheur dans l'espoir que ça marche (mieux)" sont évidemment à proscrire ! (sauf si l'étape 1 a été dûment faite). 3. Ne pas utiliser au pied de la lettre les valeurs que j'ai données à titre d'exemple dans mon article : celles qui s'appliquent à ma propre configuration (ou à celle d'un Amiga de base) ne s'appliquent pas forcément au vôtre ! 4. Utiliser le logiciel de partitionnement/formatage fourni avec votre contrôleur, pas celui d'un autre constructeur (mauvais exemple à ne pas suivre : GVP ExpelPrep avec carte Blizzard et qui s'est planté pour une raison inconnue), ou bien utiliser l'utilitaire HDToolBox fourni avec le Workbench ! En théorie, le RDB (Rigid Disk Block, standard mis en place par feu Commodore) s'applique à tous les contrôleurs (sauf les vieux riblons genre A2090 ou TrumpCard) mais par sécurité, il vaut mieux changer le paramétrage avec le logiciel idoine. En conclusion, je reste prêt à vous aider en cas de pépin, mais je ne suis pas une assurance tous risques qui vous garantit contre vos propres mauvaises actions !
|