In welchem ​​Sinne spricht SATA über SCSI? Wie viel wird zwischen SCSI und ATA geteilt?

27

Dies ist zumindest für mich nichts Neues, da SATA tatsächlich SCSI "spricht", weshalb diese SATA-Geräte unter Linux als SCSI-Geräte angezeigt werden.

Zuvor wurde eine verwandte Frage gestellt, z. B. Warum werden meine SATA-Geräte unter / proc / scsi / scsi angezeigt?

Was jedoch nicht erwähnt wird, ist, in welchem ​​Sinne sich SATA auf SCSI bezieht und wie sich diese unterscheiden.

Ich gehe davon aus, dass sie sich auf der physischen Ebene unterscheiden, da sie keine kompatiblen Kabel verwenden.

Was ist jedoch mit höher auf dem Stapel? Mir ist bekannt, wie Linux SATA- und sogar IDE-Festplatten auf modernen Kerneln als SCSI für das SCSI-Subsystem darstellt. Aber was ist mit dem eigentlichen Protokoll, das auf dem Bus verwendet wird?

Ich weiß auch, dass ATAPI eine Kapselung für SCSI ist, aber was ist mit regulärem ATA? Ich habe festgestellt, dass Funktionen von SCSI wie NCQ, FUA, DPO usw. (wenn ich mich nicht falsch erinnere) von SCSI übernommen wurden. Es ist jedoch unklar, wie "viel" des SCSI-Befehlssatzes tatsächlich gemeinsam genutzt wird oder ähnlich ist.

Implementieren moderne SATA-Geräte mit ihrer ATA-Spezifikation eine Teilmenge des SCSI-Befehlssatzes, jedoch gekapselt (wie in ATAPI)? Ein identischer Satz? Eine Obermenge? Oder werden nur ausgewählte Features als Varianten implementiert, die nicht direkt identisch sind?

Wo finde ich klare Informationen dazu und insbesondere in Bezug auf den Linux-Kernel? Eine Art Tutorial für die Treiberentwicklung wäre nett, aber auch nur eine Übersicht, die nicht alle Details vollständig überspringt, würde ausreichen. Ich bin mir bewusst, dass ich nur die tatsächliche Spezifikation lesen kann, aber das ist wiederum viel zu detailliert, schwer zu finden, wonach Sie wirklich suchen, und für mich und wahrscheinlich die meisten anderen Benutzer im zeitlichen Sinne einfach nicht realistisch.

AttributedTensorField
quelle

Antworten:

42

SCSI und ATA sind völlig unterschiedliche Standards. Sie werden derzeit beide unter der Schirmherrschaft der INCITS- Normungsorganisation entwickelt, jedoch von verschiedenen Gruppen. SCSI untersteht dem technischen Komitee T10 , während ATA dem Komitee T13 untersteht . 1

ATA wurde nur für Festplattenlaufwerke entwickelt. SCSI ist sowohl umfangreicher als auch älter und eine Standardmethode zur Steuerung von Massenspeichergeräten, Bandlaufwerken, Wechseldatenträgern (CD, DVD, Blu-Ray ...), Scannern und vielen anderen Gerätetypen .

Mitte der 1980er Jahre - als IDE in die PC-Welt eingeführt wurde - war nicht klar, dass SCSI an den Rand der Computerwelt gedrängt werden würde. SCSI war gut etabliert und leistungsfähiger. Unix-Workstations und Macintosh- Computer werden seit Jahrzehnten mit SCSI-Festplatten ausgeliefert. High-End-PCs verfügten häufig über eine SCSI-Karte für Peripheriegeräte und häufig auch für die Systemfestplatte. Die frühen CD-ROM- und Bandlaufwerke für PCs wurden zuerst in SCSI-Form herausgebracht.

In der PC-Branche gab es jedoch einen Drang, den kostengünstigeren ATA-Standard anstelle von SCSI zu verwenden. Der ursprüngliche Kompromiss hieß ATAPI , eine Erweiterung von ATA, mit der ein Gerät, das SCSI intern versteht, diese SCSI-Befehle über eine ATA-Schnittstelle empfangen kann. Mehr dazu weiter unten.

Einige Jahre später erhielt SCSI die ATA-Befehls-Pass-Through- Funktion, die im Grunde genommen die Umkehrung von ATAPI ist und ATA-Befehle über einen SCSI-Bus ermöglicht. Eine Verwendung für diese Funktion ist das Tunneln von ATA SMART- Befehlen über SCSI. smartmontoolstut dies zum Beispiel.

Noch später entwickelte das INCITS T10-Komitee einen Standard namens SCSI / ATA Translation (SAT), der SCSI-Befehle in ATA-Befehle und umgekehrt übersetzt. 2 Die libataBibliothek des Linux-Kernels bietet unter anderem eine SAT-Implementierung für Linux .

Die SCSI- und ATA-Protokolle überlappen sich logisch, da sie beide Festplatten steuern. Beide benötigen offensichtlich eine Möglichkeit, nach einem bestimmten Festplattensektor zu suchen, den Inhalt dieses Sektors abzurufen usw. Dennoch sind die Befehlsformate völlig unterschiedlich. Andernfalls würden wir diese Übersetzungs- und Weiterleitungsmechanismen nicht benötigen.

SATA "spricht" tatsächlich über SCSI

Das ist ungefähr so ​​wahr wie die Behauptung "Autos sind pink". Einige Autos sind rosa.

ATAPI, ATA Pass-Through und SAT sind nur ein Teil der Geschichte. Weiter lesen.

Ich gehe davon aus, dass sie sich auf der physischen Ebene unterscheiden, da sie keine kompatiblen Kabel verwenden.

Dies war in der alten Parallel-SCSI- Welt der Fall , aber genau wie SATA PATA ersetzte, ersetzte SAS Parallel-SCSI.

SAS und SATA haben dieselben Laufwerksanschlüsse und sind elektrisch kompatibel. Ein SAS-Controller kann mit SAS- und SATA-Geräten kommunizieren, ein SAS-Laufwerk kann jedoch nicht mit einem Nur-SATA-Controller arbeiten. Der Unterschied liegt in der Verhandlung und in den Befehlen, die Sie verwenden können, um herauszufinden, mit welchen Geräten an jedem Ende des Kabels gesprochen wird.

Tatsächlich sind viele "SATA RAID" -Controller wirklich SAS RAID-Controller. Solche Controller haben häufig einen oder mehrere SFF-8087 SAS -Gegenstecker auf der Karte, aber Sie können SATA-Laufwerke mit einem SFF-8087 bis 4 × SATA-Breakout-Kabel an diese anschließen. Eine SAS / SATA-RAID-Karte mit zwei passenden SFF-8087-Anschlüssen steuert also bis zu 8 Laufwerke. 3

Eine andere häufige Situation ist ein Hot-Swap-Laufwerkgehäuse oder ein Computergehäuse mit einer SAS- Rückwandplatine . Auf der Rückwandplatine befindet sich normalerweise ein SFF-8087-Anschluss, über den ein einfaches 8087-zu-8087-Kabel von der Rückwandplatine zum Plattencontroller verwendet werden kann. Wenn die Laufwerke in den Hot-Swap-Fächern SATA sind, spielt das keine Rolle. Der SAS-Controller kann über die SAS-Verkabelung mit ihnen sprechen, da sie in Laufwerksschlitten sitzen, mit denen die Laufwerke an die SAS-Rückwandplatine angeschlossen werden. Die Laufwerke sind weiterhin SATA-Laufwerke, sprechen jedoch das ATA-Protokoll, nicht SCSI.

Ich weiß auch, dass ATAPI eine Kapselung für SCSI ist

Richtig, aber ATAPI wird nur für andere Geräte als Festplattenlaufwerke verwendet. Der Hauptgrund, warum dieser Standard existiert, besteht darin, dass eine ATA-Schnittstelle SCSI-Befehle wie die Streaming-Datenbefehle für ein Bandlaufwerk, den Befehl "Medien auswerfen" für ein optisches Laufwerk oder den Befehl "Titel abspielen" für eine CD-Audio-Disc transportieren kann .

Diese Tatsache verliert an Bedeutung, da die Nicht-Festplattengeräte, die früher SCSI über ATAPI sprachen, verschwinden oder auf andere Schnittstellen umsteigen. Low-End-Bandlaufwerke gibt es nicht mehr, daher sind jetzt alle Bandlaufwerke SAS. 4 Scanner sind heutzutage fast nur noch USB-fähig. Optische Laufwerke bewegen sich außerhalb des Computergehäuses, um über USB angeschlossen zu werden, oder verschwinden vollständig, sodass nur die zunehmend selteneren internen optischen Laufwerke ATAPI sprechen.

Unabhängig davon ist ein SATA-Gerät, das SCSI über ATAPI versteht, nur eingeschränkt ein "SCSI-Gerät". Solche Geräte profitieren nicht von den meisten Vorteilen von SAS gegenüber SCSI . Diese Fähigkeiten machen SAS ungeachtet von ATAPI im Vergleich zu SATA ausgesprochen wertvoll.

Wenn Sie eine andere Auto-Analogie wünschen, macht die Tatsache, dass ich mein Auto auf einer ovalen Rennstrecke fahren kann, es nicht zu einem Rennauto.

Ich habe festgestellt, dass Funktionen von SCSI wie NCQ, FUA, DPO usw. (wenn ich mich nicht falsch erinnere) von SCSI übernommen wurden. Es ist jedoch unklar, wie "viel" des SCSI-Befehlssatzes tatsächlich gemeinsam genutzt wird oder ähnlich ist.

Meist handelt es sich um eine einfache Mimikry. NCQ ist zum Beispiel nicht dasselbe wie TCQ . Sie erhalten eine Festplatte mit TCQ nur, wenn es sich um ein SAS-Gerät handelt. Schließen Sie ein NCQ-fähiges SATA-Laufwerk an einen SAS-Controller an, und es wird nicht plötzlich TCQ-fähig.

Allerdings ist ein modernes SATA-Gerät möglicherweise weitaus leistungsfähiger als ein SCSI-Gerät, das vor einem Jahrzehnt hergestellt wurde. Es wird sicherlich in der Lage sein, viel höhere E / A-Ebenen zu erreichen.

All dies ist verwirrend und überlappend, denn das ist die Natur der PC-Hardware-Welt. Es gibt keine klaren Linien, da Hersteller von optischen Laufwerken - um nur eine Unterbranche herauszugreifen - wirklich nicht zwei völlig unterschiedliche Laufwerke bauen möchten, von denen eines SAS in höchstem Maße und das andere SATA spricht. Sie machen also Kompromisse. Sie setzen sich in den Komitees dafür ein, solche Standards zu definieren, um einen einzigen Standard zu schaffen, mit dem sie ihr SATA-Laufwerk auf einen SAS-Bus setzen können, und jeder ist größtenteils glücklich.

Wo finde ich klare Informationen dazu und insbesondere in Bezug auf den Linux-Kernel?

Letztendlich möchten Sie die Linux-Quellen lesen . Das libATAEntwicklerhandbuch sollte ebenfalls hilfreich sein.

Mir ist keine einfache Zusammenfassung bekannt, wie das alles funktioniert. Es sollte nicht einfach sein. Es wurde entwickelt, um drei Jahrzehnte Hardware-Evolution, konkurrierende Standards und unterschiedliche Ziele zu berücksichtigen. Außerdem wurde es ohne magische Voraussicht entwickelt. Kurz gesagt, es ist ein Durcheinander. Die einzigen Leute, die wirklich wissen müssen, wie das Chaos funktioniert, sind die, die den Betriebssystemkern aufbauen, die, die die Hardware entwerfen, und in geringerem Maße die, die die Treiber für den Betriebssystemkern schreiben. Für einen so kleinen Kader hochqualifizierter Leute reichen Standards und Arbeitsregeln aus.

Heute nennt Linux die meisten wiederbeschreibbaren Massenspeichergeräte /dev/sd?. "SD" stand einst für "SCSI-Festplatte" und existierte nur zur Unterscheidung von /dev/hd?"Festplatte", was jedoch in den meisten Fällen PATA implizierte. Diese Unterscheidung ist heute eine weitere praktische Irrelevanz. Jetzt haben wir SSDs, USB-Sticks, virtuelle Festplatten , iSCSI- Geräte und vieles mehr /dev/sd?. Ich schlage vor, Sie denken an "SD" als Abkürzung für "Speichergerät", anstatt sich Gedanken darüber zu machen, ob das Gerät ATA über SATA, ATA über Ethernet , SCSI über USB , SCSI über ATAPI, SCSI über SAS, SCSI über IP (iSCSI) spricht ) oder was hast du?

Das Hauptproblem besteht darin, dass Namensschemata häufig den Grund hinter dem Schema überdauern. Sie sehen das in /dev/scd0. Bei dem an diesen /devKnoten angeschlossenen Gerät handelt es sich heutzutage eher um ein DVD- oder Blu-Ray-Laufwerk als um ein CD-Laufwerk.

Die Alternative, bei der Sie jeden /devKnoten nach dem genauen Gerätetyp benennen , der mit ihm verbunden ist, hat ihre eigenen Probleme. Wäre es wirklich besser, wenn wir den /devKnoten nach dem verwendeten Low-Level-Protokoll benennen würden ? /dev/atapi0, /dev/sas0, Etc? Oder vielleicht bevorzugen Sie /dev/atapibluray0und solche? Was ist mit Multimedia-Laufwerken? Muss derselbe Treiber auch freigelegt werden, /dev/atapicd0wenn Sie eine Compact Disc in das Blu-Ray-Laufwerk einlegen? Das ersetzt nur ein verwirrendes Schema mit einem anderen.

Die /dev/sd?Abstraktion von Linux ist nicht perfekt, aber nützlich. Sie können beispielsweise feststellen, dass /dev/sdaes sich höchstwahrscheinlich um das Startlaufwerk handelt, ohne sich Gedanken darüber machen zu müssen, welche Kabel, Schnittstellenprotokolle und Medien sich hinter diesem Namen befinden. Wenn ich Ihnen sagen , dass eine bestimmte Linux - Box ein einziges System Laufwerk ausgestattet ist, ein optisches Laufwerk, und hat manchmal einen USB - Stick eingesteckt, können Sie getrost vermuten , dass sie genannt werden /dev/sda, /dev/sdbund /dev/sdcsind.


Fußnoten :

  1. SCSI und ATA teilten sich nicht zunächst eine übergeordnete Standardorganisation. Sie begannen beide als proprietäre Festplattencontroller. SCSI entwickelte sich aus Shugart Associates ' SASI und ATA / IDE entstammte aus einer viel späteren Design Zusammenarbeit zwischen Western Digital, Compaq und CDC.

    ANSI standardisierte beide später, wobei ATA-1 etwa 8 Jahre später SCSI-1 folgte.

    INCITS ist eine Art Schwesterorganisation von ANSI . INCITS veröffentlicht endgültige Standards über ANSI in den USA und ISO / IEC JTC 1 weltweit.

  2. Der aktuelle Standard ist SAT-3 , veröffentlicht im Mai 2015, wobei SAT-4 und SAT-5 in Bearbeitung sind, da ich dies Mitte Juli 2018 schreibe. Der letztere Link führt Sie zu Entwürfen der in Bearbeitung befindlichen Versionen.

  3. Ich ignoriere SATA-Port-Multiplikatoren , SAS-Expander usw.

  4. Ausgenommen die Modelle, die für die Kompatibilität mit alten parallelen SCSI-Systemen hergestellt wurden.

Warren Young
quelle
Es ist mir immer noch nicht klar, ob einige Funktionen / Befehlssätze in ATA und SCSI identisch sind und wie groß diese Union ist, wenn sie überhaupt existiert. Ich bin damit einverstanden, dass das Lesen des Linux-Quellcodes einige Antworten geben würde, aber es ist wahrscheinlich mit dem Lesen der ATA-Spezifikation selbst vergleichbar. Die Linux-Quelle würde wahrscheinlich auch keine sehr klare Vorstellung davon geben, wie viel geteilt wird und wie es zwischen ATA und SCSI geteilt wird. Die verwendeten Benennungskonventionen würden durch das Lesen der Linux-Quelle wahrscheinlich besser verständlich.
AttributedTensorField
@AttributedTensorField: Neueste Bearbeitungen anzeigen.
Warren Young
1
Wow, tolle Antwort. Nur eine Sache; / dev / atapi0, / dev / sas0 etc .; ist das nicht so ziemlich das, was die BSDs (zumindest FreeBSD) tun? Sowie Solaris IIRC. Und unter Linux gibt es normalerweise / dev / disk / by-path, was etwas ähnlich ist.
einen
@ MichaelKjörling: Klar. Der Sinn des Kommentars ist nicht, dass diese anderen Betrachtungsweisen falsch sind, sondern dass das Ändern des Benennungsschemas, damit es besser mit dem übereinstimmt, was darunter vor sich geht, das zugrunde liegende Problem nicht zum Erliegen bringt. Ich für meinen Teil schätze die /dev/sd?Abstraktion von Linux .
Warren Young
1
Beachten Sie, dass die meisten Distributionen heutzutage optische Laufwerke als / dev / srN verfügbar machen, wobei N eine Zahl ist.
Perkins