В каком смысле SATA «говорит» SCSI? Сколько делится между SCSI и ATA?

27

По крайней мере, для меня в этом нет ничего нового: SATA фактически «говорит» о SCSI, поэтому эти устройства SATA отображаются в Linux как устройства SCSI.

Ранее был задан связанный вопрос, например, почему мои SATA-устройства отображаются в / proc / scsi / scsi?

Однако то, что не упомянуто там, где я видел это, обсуждалось ранее, это как раз то, в каком смысле SATA относится к SCSI и как они отличаются.

Я предполагаю, что считается само собой разумеющимся, что они отличаются на физическом уровне, так как они не используют совместимые кабели.

Однако как насчет выше по стеку? Я знаю, как Linux представляет диски SATA и даже IDE в современных ядрах как SCSI для подсистемы SCSI. Но как насчет реального протокола, который используется на шине?

Я также знаю, что ATAPI является инкапсуляцией для SCSI, но как насчет обычного ATA? Я заметил, что функции от SCSI, такие как NCQ, FUA, DPO и т. Д. (Если я не правильно помню), были приняты от SCSI. Но неясно, насколько «большая часть» набора команд SCSI на самом деле является общей или похожей.

Осуществляют ли современные устройства SATA со своей спецификацией ATA подмножество набора команд SCSI, но инкапсулированы (как в ATAPI)? Идентичный набор? Суперсет? Или, возможно, только выбранные функции реализованы как варианты, которые не являются непосредственно идентичными?

Где я могу найти некоторую ясную информацию об этом, и особенно, как это относится к ядру Linux? Было бы неплохо какое-то руководство по разработке драйверов, но даже просто обзор, который не полностью пропускает все детали, был бы достаточен. Я знаю, что могу просто прочитать фактическую спецификацию, но это опять-таки слишком детально, трудно найти то, что вы действительно ищете, и просто нереально для меня и, вероятно, большинства других пользователей во временном смысле.

AttributedTensorField
источник

Ответы:

42

SCSI и ATA - это совершенно разные стандарты. В настоящее время они оба разработаны под эгидой организации стандартов INCITS, но разными группами. SCSI подчиняется техническому комитету T10 , а ATA - T13 . 1

ATA была разработана только для жестких дисков. SCSI является более широким и старым, и является стандартным способом управления запоминающими устройствами, ленточными накопителями, съемными оптическими дисками (CD, DVD, Blu-Ray ...), сканерами и многими другими типами устройств .

В середине 1980-х годов, когда IDE была представлена ​​миру ПК, не было очевидно, что SCSI окажется на грани компьютерного мира. SCSI был устоявшимся и более способным. Рабочие станции Unix и компьютеры Macintosh поставлялись с жесткими дисками SCSI на протяжении десятилетий. Высококачественные ПК часто имели по крайней мере карту SCSI для периферийных устройств, и часто для системного жесткого диска. Первые CD-ROM и ленточные накопители для персональных компьютеров впервые появились в виде SCSI.

Тем не менее, индустрия ПК стала толчком к использованию менее дорогого стандарта ATA вместо SCSI. Первоначальный компромисс был назван ATAPI , расширением ATA, которое позволяет устройству, которое понимает SCSI внутри, получать эти команды SCSI через интерфейс ATA. Подробнее об этом ниже.

Несколько лет спустя SCSI получил функцию сквозного доступа к командам ATA, в основном обратную к ATAPI, позволяющую использовать команды ATA по шине SCSI. Одним из вариантов использования этого средства является туннелирование команд ATA SMART через SCSI. smartmontoolsделает это , например.

Позже комитет INCITS T10 разработал стандарт под названием SCSI / ATA Translation (SAT), который переводит команды SCSI в команды ATA и наоборот. 2 Ядро Linux в libataбиблиотеке предоставляет реализацию SAT для Linux, среди прочего .

Существует некоторое логическое совпадение в протоколах SCSI и ATA, поскольку они оба управляют жесткими дисками. Очевидно, что обоим необходимо найти конкретный сектор жесткого диска, извлечь содержимое этого сектора и т. Д. Тем не менее форматы команд совершенно разные; в противном случае нам не понадобятся эти механизмы перевода и передачи.

SATA на самом деле "говорит" SCSI

Это примерно так же верно, как утверждение, что «Автомобили розовые». Некоторые машины розовые.

ATAPI, ATA pass-through и SAT - это только часть истории. Читать дальше.

Я предполагаю, что считается само собой разумеющимся, что они отличаются на физическом уровне, так как они не используют совместимые кабели.

Это было верно в старом параллельном мире SCSI , но так же, как SATA заменил PATA, SAS заменил параллельный SCSI.

SAS и SATA используют одни и те же разъемы для дисков, и они электрически совместимы. Контроллер SAS может взаимодействовать с устройствами SAS и SATA, но диск SAS не может работать с контроллером только SATA. Разница заключается в согласовании и в командах, которые вы можете использовать после того, как устройства на каждом конце кабеля выяснят, с чем они разговаривают.

Фактически, многие контроллеры «SATA RAID» действительно являются контроллерами SAS RAID. Такие контроллеры часто имеют на плате один или несколько сопряженных SAS-разъемов SFF-8087 , но к ним можно подключать диски SATA с помощью соединительного кабеля SFF-8087 - 4 × SATA. Таким образом, плата SAS / SATA RAID с двумя сопряженными разъемами SFF-8087 управляет до 8 дисков. 3

Другая распространенная ситуация - это корпус дисковода с возможностью горячей замены или корпус компьютера с объединительной панелью SAS . На объединительной плате обычно имеется разъем SFF-8087, что позволяет использовать простой кабель от 8087 до 8087 от объединительной платы к контроллеру диска. Если диски в лотках горячей замены - SATA, это не имеет значения. Контроллер SAS может общаться с ними по кабелю SAS, так как они находятся в салазках для дисков, которые подключают диски к объединительной панели SAS. Диски все еще являются дисками SATA, хотя, говоря по протоколу ATA, а не SCSI.

Я также знаю, что ATAPI является инкапсуляцией для SCSI

Да, но ATAPI используется только для устройств, отличных от жестких дисков. Основная причина, по которой существует этот стандарт, заключается в том, что интерфейс ATA может передавать команды SCSI, такие как команды потоковой передачи данных для ленточного накопителя, команда «извлечение носителя» для дисковода оптических дисков или команда «дорожка воспроизведения» для аудиодиска CD. ,

Этот факт становится все менее актуальным, поскольку устройства без HDD, которые раньше говорили на SCSI через ATAPI, исчезали или переходили на другие интерфейсы. Неразъемные ленточные накопители больше не существуют, поэтому все ленточные накопители теперь являются SAS. 4 В наши дни сканеры работают только с USB. Дисководы для оптических носителей перемещаются за пределы корпуса компьютера для подключения через USB или полностью исчезают, оставляя только все более редкие внутренние оптические дисководы, говорящие на ATAPI.

В любом случае, устройство SATA, которое понимает SCSI через ATAPI, является «устройством SCSI» только в ограниченном смысле. Такие устройства не будут пользоваться большинством преимуществ SAS перед SCSI . Эти возможности делают SAS особенно ценным по сравнению с SATA, несмотря на ATAPI.

Если вам нужна аналогия с другим автомобилем, тот факт, что я могу управлять своей машиной на овальной гоночной трассе, не делает ее гоночной машиной.

Я заметил, что функции от SCSI, такие как NCQ, FUA, DPO и т. Д. (Если я не помню неправильно) были приняты из SCSI. Но неясно, насколько «большая часть» набора команд SCSI на самом деле является общей или похожей.

В основном это сводится к низкоуровневой мимике. Например, NCQ - это не то же самое, что TCQ . Вы получите жесткий диск с TCQ, только если это устройство SAS. Подключите диск SATA с поддержкой NCQ к контроллеру SAS, и он внезапно не получит возможность TCQ.

Тем не менее, современное устройство SATA вполне может быть гораздо более функциональным, чем устройство SCSI десятилетия назад. Это, безусловно, будет способно к гораздо более высоким уровням ввода / вывода.

Все это сбивает с толку и перекрывает друг друга, потому что такова природа аппаратного мира ПК. Не существует четких линий, потому что производители оптических приводов - просто чтобы выбрать одну из подотраслей - на самом деле не хотят создавать два совершенно разных привода, один из которых говорит на SAS в высшей степени выраженности, а другой - на SATA. Итак, они идут на компромисс. Они лоббируют в комитетах, определяющих такие стандарты, создание единого стандарта, который позволяет им подключать свои диски SATA к шине SAS, и все в основном довольны.

Где я могу найти некоторую ясную информацию об этом, и особенно, как это относится к ядру Linux?

В конечном счете, вы хотите прочитать исходники Linux . Руководство libATAразработчика также должно быть полезным.

Я не знаю ни одного простого описания того, как все это работает. Это не было разработано, чтобы быть легким. Он был разработан с учетом трех десятилетий эволюции аппаратного обеспечения, конкурирующих стандартов и несопоставимых целей. Кроме того, он был разработан без магических уровней предвидения. Короче, это беспорядок. Единственные люди, которые действительно должны знать, как работает этот беспорядок, - это те, кто строит ядра ОС, те, кто проектирует оборудование, и, в меньшей степени, те, кто пишет драйверы для ядер ОС. Для такого небольшого количества людей с высокими способностями достаточно стандартов и рабочего кода.

Сегодня Linux называет большинство перезаписываемых запоминающих устройств большой емкости /dev/sd?. «SD» когда-то означал «диск SCSI» и существовал просто для того, чтобы отличать его от /dev/hd?общего значения «жесткий диск», но в большинстве случаев подразумевал PATA. Это различие является еще одной практической неуместностью сегодня. Теперь у нас есть SSD, флэш-накопители USB, виртуальные жесткие диски , устройства iSCSI и многое другое /dev/sd?. Я предлагаю вам начать думать о «SD» как о сокращении «устройство хранения», а не беспокоиться о том, говорит ли устройство ATA по SATA, ATA по Ethernet , SCSI по USB , SCSI по ATAPI, SCSI по SAS, SCSI по IP (iSCSI ) или что там у тебя.

Основная проблема заключается в том, что схемы именования часто превышают причину этой схемы. Вы видите это в /dev/scd0. Устройство, подключенное к этому /devузлу, скорее всего, будет дисководом DVD или Blu-Ray, чем дисководом компакт-дисков в наши дни.

Альтернатива - когда вы называете каждый /devузел после того, какой именно тип устройства подключен к нему - имеет свои проблемы. Неужели было бы лучше, если бы мы назвали /devузел по низкоуровневому протоколу, который он использовал? /dev/atapi0и /dev/sas0т. д.? Или может ты предпочёл бы /dev/atapibluray0и такое? А как насчет мультимедийных дисков? Нужно ли выставлять этот же драйвер на /dev/atapicd0случай, если вы вставите компакт-диск в привод Blu-Ray? Это просто заменяет одну запутанную схему другой.

/dev/sd?Абстракция Linux не идеальна, но полезна. Например, вы можете узнать тот факт, что /dev/sda, скорее всего, загрузочный диск, не беспокоясь о том, какие кабели, протокол интерфейса и носители стоят за этим именем. Если я скажу вам, что данный Linux-блок имеет один системный диск, оптический привод, а иногда к нему подключен флэш-накопитель USB, вы можете с уверенностью предположить, что они называются /dev/sda, /dev/sdbи /dev/sdc, соответственно.


Сноски :

  1. SCSI и ATA не начали совместно использовать родительскую организацию по стандартам. Они оба начинали как проприетарные контроллеры жестких дисков. SCSI эволюционировали от Shugart Associates " Саси и ATA / IDE вышел из более позднего дизайна сотрудничества между Western Digital, Compaq и CDC.

    Позднее ANSI стандартизировал оба, с ATA-1 после SCSI-1 около 8 лет спустя.

    INCITS является своего рода родственной организацией ANSI . INCITS публикует окончательные стандарты через ANSI в США и ISO / IEC JTC 1 по всему миру.

  2. Текущий стандарт - SAT-3 , опубликованный в мае 2015 года, с SAT-4 и SAT-5, находящимися в процессе разработки, поскольку я пишу это в середине июля 2018 года. Последняя ссылка ведет вас к черновикам текущих версий.

  3. Я игнорирую множители портов SATA , расширители SAS и т. Д.

  4. За исключением моделей, сделанных для совместимости со старыми параллельными системами SCSI.

Уоррен Янг
источник
мне все еще не ясно, идентичны ли некоторые функции / наборы команд в ATA и SCSI, и насколько велик этот союз, если он вообще существует. Я согласен, что чтение исходного кода Linux дало бы некоторые ответы, но это, вероятно, наравне с чтением самой спецификации ATA. Исходный код Linux, вероятно, также не дает четкого представления о том, сколько общего ресурса используется и как оно используется ATA и SCSI. Используемые соглашения об именах, вероятно, будут более понятными при чтении исходного кода Linux.
AttributedTensorField
@AttributedTensorField: последние изменения.
Уоррен Янг
1
Вау, отличный ответ. Только одна вещь; / dev / atapi0, / dev / sas0 и т. д .; разве это не то, что делают BSD (по крайней мере, FreeBSD)? Как и Солярис IIRC. А в Linux обычно есть / dev / disk / by-path, что несколько похоже.
CVn
@ MichaelKjörling: Конечно. Суть комментария не в том, что эти другие способы взглянуть на вещи неправильны, а в том, что изменение схемы именования, чтобы лучше соответствовать тому, что происходит внизу, не устраняет основную проблему. Я, например, ценю /dev/sd?абстракцию Linux .
Уоррен Янг
1
Обратите внимание, что в наши дни большинство дистрибутивов представляют оптические приводы как / dev / srN, где N - это число.
Перкинс