Dans quel sens SATA "parle" SCSI? Combien est partagé entre SCSI et ATA?

27

Ce n'est pas nouveau pour moi au moins, que SATA "parle" SCSI, d'où la raison pour laquelle ces périphériques SATA apparaissent comme des périphériques SCSI sous Linux.

Une question connexe a déjà été posée, par exemple: pourquoi mes périphériques SATA apparaissent-ils sous / proc / scsi / scsi?

Cependant, ce qui ne parvient pas à être mentionné là où j'ai vu cela discuté auparavant, c'est exactement dans quel sens SATA se rapporte à SCSI, et comment ils diffèrent.

Je suppose qu'il est tenu pour acquis qu'ils diffèrent sur la couche physique, car ils ne partagent pas de câbles compatibles.

Mais qu'en est-il plus haut sur la pile? Je suis conscient de la façon dont Linux représente les disques SATA et même IDE sur les noyaux modernes en tant que SCSI pour le sous-système SCSI. Mais qu'en est-il du protocole réel utilisé sur le bus?

Je sais également que ATAPI est une encapsulation pour SCSI, mais qu'en est-il de l'ATA ordinaire? J'ai remarqué que des fonctionnalités de SCSI telles que NCQ, FUA, DPO, etc. (si je ne me souviens pas correctement) ont été adoptées par SCSI. Mais on ne sait pas dans quelle mesure «une grande partie» du jeu de commandes SCSI est réellement partagée ou similaire.

Les périphériques SATA modernes avec leur spécification ATA implémentent-ils un sous-ensemble du jeu de commandes SCSI, mais encapsulé (comme dans ATAPI)? Un ensemble identique? Un surensemble? Ou peut-être que seules les fonctionnalités sélectionnées sont implémentées en tant que variantes qui ne sont pas directement identiques?

Où puis-je trouver des informations claires à ce sujet, et en particulier comment cela se rapporte au noyau Linux? Une sorte de tutoriel pour le développement de pilotes serait bien, mais même juste un aperçu qui ne saute pas complètement tous les détails suffirait. Je suis conscient que je peux simplement lire les spécifications réelles, mais c'est encore beaucoup trop détaillé, difficile de trouver ce que vous cherchez vraiment, et tout simplement pas réaliste pour moi et probablement la plupart des autres utilisateurs dans le sens temporel.

AttributedTensorField
la source

Réponses:

42

SCSI et ATA sont des normes entièrement différentes. Ils sont actuellement tous deux développés sous l'égide de l' organisme de normalisation INCITS mais par différents groupes. SCSI est sous comité technique T10 , tandis que ATA est sous T13 . 1

ATA a été conçu uniquement pour les disques durs. SCSI est à la fois plus large et plus ancien, étant un moyen standard de contrôler les périphériques de stockage de masse, les lecteurs de bande, les lecteurs de supports optiques amovibles (CD, DVD, Blu-Ray ...), les scanners et de nombreux autres types de périphériques .

Il n'était pas évident au milieu des années 1980 - lorsque IDE a été introduit dans le monde du PC - que SCSI serait poussé en marge du monde informatique. SCSI était bien établi et plus compétent. Les stations de travail Unix et les ordinateurs Macintosh sont livrés avec des disques durs SCSI pendant des décennies. Les PC haut de gamme avaient souvent une carte SCSI pour les périphériques au moins et souvent pour le disque dur du système. Les premiers lecteurs de CD-ROM et de bandes pour ordinateurs personnels sont d'abord sortis sous forme SCSI.

L'industrie du PC étant ce qu'elle est, cependant, il y avait une pression pour utiliser la norme ATA moins chère au lieu de SCSI. Le compromis initial a été appelé ATAPI , une extension d'ATA qui permet à un périphérique qui comprend SCSI en interne de recevoir ces commandes SCSI sur une interface ATA. Plus d'informations ci-dessous.

Plusieurs années plus tard, SCSI a obtenu la fonction d' intercommunication de commandes ATA , essentiellement l'inverse d'ATAPI, permettant des commandes ATA sur un bus SCSI. L'une des utilisations de cette fonction consiste à tunneliser les commandes ATA SMART sur SCSI. smartmontoolsfait cela , par exemple.

Plus tard encore, le comité INCITS T10 a développé une norme appelée traduction SCSI / ATA (SAT), qui traduit les commandes SCSI en commandes ATA et vice versa. 2 La libatabibliothèque du noyau Linux fournit entre autres une implémentation SAT pour Linux .

Il existe un certain chevauchement logique dans les protocoles SCSI et ATA, car ils contrôlent tous les deux les disques durs. Les deux ont évidemment besoin d'un moyen de rechercher un secteur de disque dur particulier, de récupérer le contenu de ce secteur, etc. Néanmoins, les formats de commande sont entièrement différents; sinon, nous n'aurions pas besoin de ces mécanismes de traduction et de transmission.

SATA "parle" SCSI

C'est à peu près aussi vrai que l'affirmation selon laquelle «les voitures sont roses». Certaines voitures sont roses.

ATAPI, ATA pass-through et SAT ne sont qu'une partie de l'histoire. Continuer à lire.

Je suppose qu'il est tenu pour acquis qu'ils diffèrent sur la couche physique, car ils ne partagent pas de câbles compatibles.

C'était vrai dans l'ancien monde SCSI parallèle , mais tout comme SATA a remplacé PATA, SAS a remplacé SCSI parallèle.

SAS et SATA partagent les mêmes connecteurs de disque et sont électriquement compatibles. Un contrôleur SAS peut communiquer avec des périphériques SAS et SATA, mais un lecteur SAS ne peut pas fonctionner avec un contrôleur uniquement SATA. La différence réside dans la négociation et dans les commandes que vous pouvez utiliser après que les périphériques à chaque extrémité du câble déterminent à quoi ils parlent.

En fait, de nombreux contrôleurs "SATA RAID" sont en fait des contrôleurs RAID SAS. Ces contrôleurs ont souvent un ou plusieurs connecteurs d'accouplement SAS SFF-8087 sur la carte, mais vous pouvez leur connecter des disques SATA avec un câble de dérivation SFF-8087 à 4 × SATA. Ainsi, une carte RAID SAS / SATA avec deux connecteurs homologues SFF-8087 contrôle jusqu'à 8 disques. 3

Une autre situation courante est un boîtier de lecteur remplaçable à chaud ou un boîtier d'ordinateur avec un fond de panier SAS . Le fond de panier est généralement doté d'un connecteur SFF-8087, ce qui permet d'utiliser un simple câble 8087 vers 8087 entre le fond de panier et le contrôleur de disque. Si les lecteurs des plateaux remplaçables à chaud sont SATA, cela n'a pas d'importance. Le contrôleur SAS peut leur parler via le câblage SAS, car ils sont assis dans des traîneaux de lecteurs qui connectent les lecteurs au fond de panier SAS. Les disques sont toujours des disques SATA, cependant, parlant le protocole ATA, pas SCSI.

Je sais aussi que ATAPI est une encapsulation pour SCSI

Vrai, mais ATAPI n'est utilisé que pour les périphériques autres que les disques durs. La principale raison pour laquelle cette norme existe est de permettre à une interface ATA de transporter des commandes SCSI comme les commandes de streaming de données pour un lecteur de bande, la commande "éjecter le média" pour un lecteur de disque optique ou la commande "play track" pour un CD audio. .

Ce fait devient moins pertinent à mesure que les périphériques non HDD qui parlaient SCSI sur ATAPI disparaissent ou passent à d'autres interfaces. Les lecteurs de bande bas de gamme n'existent plus, les lecteurs de bande sont donc désormais tous SAS. 4 Les scanners sont à peu près uniquement USB de nos jours. Les lecteurs de supports optiques se déplacent à l'extérieur du boîtier de l'ordinateur pour être connectés via USB, ou disparaissent complètement, ne laissant que les lecteurs optiques internes de plus en plus rares qui parlent ATAPI.

Quoi qu'il en soit, un périphérique SATA qui comprend SCSI sur ATAPI n'est un "périphérique SCSI" que de manière limitée. Ces périphériques ne bénéficieront pas de la plupart des avantages de SAS par rapport à SCSI . Ces capacités font de SAS une valeur distincte par rapport à SATA, malgré ATAPI.

Si vous voulez une autre analogie avec une voiture, le fait que je puisse faire rouler ma voiture sur une piste de course ovale n'en fait pas une voiture de course.

J'ai remarqué que des fonctionnalités de SCSI telles que NCQ, FUA, DPO, etc. (si je ne me souviens pas correctement) ont été adoptées par SCSI. Mais on ne sait pas dans quelle mesure «une grande partie» du jeu de commandes SCSI est réellement partagée ou similaire.

Cela équivaut principalement à un mimétisme bas de gamme. NCQ n'est pas la même chose que TCQ , par exemple. Vous obtiendrez un disque dur avec TCQ uniquement s'il s'agit d'un périphérique SAS. Branchez un disque SATA compatible NCQ dans un contrôleur SAS, et il ne gagne pas soudainement la capacité TCQ.

Cela dit, un périphérique SATA moderne pourrait bien être beaucoup plus performant qu'un périphérique SCSI d'il y a dix ans. Il va certainement être capable de niveaux d'E / S beaucoup plus élevés.

Tout cela prête à confusion et se chevauche, car c'est la nature du monde du matériel PC. Il n'y a pas de lignes claires parce que les fabricants de lecteurs optiques - juste pour choisir un sous-secteur - ne veulent vraiment pas construire deux disques entièrement différents, l'un parlant SAS à sa plus haute expression et l'autre parlant SATA. Alors, ils font des compromis. Ils font pression dans les comités définissant ces normes pour créer une norme unique qui leur permet de déposer leur disque SATA sur un bus SAS, et tout le monde est généralement satisfait.

Où puis-je trouver des informations claires à ce sujet, et en particulier comment cela se rapporte au noyau Linux?

En fin de compte, vous voulez lire les sources Linux . Le libATAGuide du développeur devrait également être utile.

Je ne connais aucun résumé facile de la façon dont tout cela fonctionne. Ce n'était pas conçu pour être facile. Il a été conçu pour s'adapter à trois décennies d'évolution matérielle, à des normes concurrentes et à des objectifs disparates. De plus, il a été conçu sans niveaux de prévoyance magiques. Bref, c'est un gâchis. Les seules personnes qui doivent vraiment savoir comment fonctionne le désordre sont celles qui construisent les noyaux OS, celles qui conçoivent le matériel et, dans une moindre mesure, celles qui écrivent les pilotes pour les noyaux OS. Pour un si petit groupe de personnes hautement capables, les normes et le code de travail sont suffisants.

Aujourd'hui, Linux appelle la plupart des périphériques de stockage de masse réinscriptibles /dev/sd?. «SD» était autrefois synonyme de «disque SCSI» et n'existait que pour faire la différence avec le terme /dev/hd?générique «disque dur», mais impliquant PATA dans la plupart des cas. Cette distinction est une autre pertinence pratique aujourd'hui. Maintenant, nous avons des SSD, des clés USB, des disques durs virtuels , des périphériques iSCSI et plus encore tous appelés /dev/sd?. Je vous suggère de commencer à penser à "SD" comme abréviation de "périphérique de stockage", plutôt que de vous soucier de savoir si l'appareil parle ATA sur SATA, ATA sur Ethernet , SCSI sur USB , SCSI sur ATAPI, SCSI sur SAS, SCSI sur IP (iSCSI ), ou qu'avez-vous.

Le problème principal est que les schémas de dénomination survivent souvent à la raison derrière le schéma. Vous voyez cela dans /dev/scd0. Le périphérique connecté à ce /devnœud est plus susceptible d'être un lecteur DVD ou Blu-Ray qu'un lecteur de disque compact de nos jours.

L'alternative - où vous nommez chaque /devnœud d'après le type de périphérique exact qui lui est connecté - a ses propres problèmes. Serait-il vraiment préférable de nommer le /devnœud d'après le protocole de bas niveau qu'il a utilisé? /dev/atapi0, /dev/sas0, Etc? Ou peut-être que vous préférez /dev/atapibluray0et autres? Qu'en est-il des lecteurs multimédias? Le même pilote doit-il également être exposé /dev/atapicd0si vous faites glisser un disque compact dans le lecteur Blu-Ray? Cela remplace simplement un schéma déroutant par un autre.

L' /dev/sd?abstraction de Linux n'est pas parfaite, mais elle est utile. Par exemple, vous pouvez apprendre le fait qu'il /dev/sdas'agit très probablement du lecteur de démarrage sans vous soucier du câblage, du protocole d'interface et des supports derrière ce nom. Si je vous dis qu'un boîtier Linux donné a un seul lecteur système, un lecteur optique et parfois une clé USB connectée, vous pouvez deviner en toute confiance qu'ils sont appelés /dev/sda, /dev/sdbet /dev/sdc, respectivement.


Notes de bas de page :

  1. SCSI et ATA n'ont pas commencé à partager une organisation de normalisation parent. Ils ont tous deux commencé comme contrôleurs de disque dur propriétaires. SCSI a évolué à partir du SASI de Shugart Associates , et ATA / IDE est issu d' une collaboration de conception beaucoup plus récente entre Western Digital, Compaq et CDC.

    ANSI a ensuite normalisé les deux, l'ATA-1 suivant SCSI-1 environ 8 ans plus tard.

    INCITS est une sorte d'organisation sœur de l'ANSI . INCITS publie les normes finales via ANSI aux États-Unis et ISO / IEC JTC 1 dans le monde.

  2. La norme actuelle est SAT-3 , publiée en mai 2015, SAT-4 et SAT-5 étant en cours au moment où j'écris ceci à la mi-juillet 2018. Ce dernier lien vous amène aux ébauches des versions en cours.

  3. J'ignore les multiplicateurs de ports SATA , les expandeurs SAS , etc.

  4. À l'exception des modèles conçus pour la compatibilité avec les anciens systèmes SCSI parallèles.

Warren Young
la source
il n'est toujours pas clair pour moi si certaines fonctionnalités / jeux de commandes sont identiques en ATA et SCSI, et quelle est la taille de cette union si elle existe. Je suis d'accord que la lecture du code source Linux donnerait quelques réponses, mais c'est probablement à égalité avec la lecture de la spécification ATA elle-même. La source Linux ne donnerait probablement pas non plus une vue très claire de la quantité partagée et de la façon dont elle est partagée entre ATA et SCSI. Les conventions de nommage utilisées seraient probablement plus éclairées en lisant la source Linux.
AttributedTensorField
@AttributedTensorField: Voir les dernières modifications.
Warren Young
1
Wow, excellente réponse. Juste une chose; / dev / atapi0, / dev / sas0 etc.; n'est-ce pas à peu près ce que font les BSD (au moins FreeBSD)? Ainsi que Solaris IIRC. Et sous Linux, il y a généralement / dev / disk / by-path qui est quelque peu similaire.
un CVn
@ MichaelKjörling: Bien sûr. Le point du commentaire n'est pas que ces autres façons de voir les choses sont mauvaises, c'est que changer le schéma de nommage pour mieux correspondre à ce qui se passe en dessous ne fait pas disparaître le problème sous-jacent. Pour ma part, j'apprécie l' /dev/sd?abstraction de Linux .
Warren Young
1
Notez que la plupart des distributions de nos jours exposent les lecteurs optiques en tant que / dev / srN où N est un nombre.
Perkins