8.1.4. Контроллеры дисковых накопителей.
Контроллеры современных накопителей представляют собой сложные устройства, построенные на основе микропроцессоров. В состав контроллера входят узлы, непосредственно связанные с обработкой и формированием сигналов яблока HDA, — коммутатор головок, схемы кодирования-декодирования данных усилителями сигналов, схемы управления позиционированием, шпинделем и, если надо, сменой носителя. Кроме того, контроллер может содержать буферную память (кэш), объем которой может достигать сотен килобайт, хотя и это не предел. Рассмотрим, на что расходуется «интеллект» контроллера. Хранение данных на магнитном носителе всегда сопровождается появлением Ошибок, причин у которых может быть множество: дефект поверхности носителя, случайное перемагничивание участка носителя, попадание посторонней частицы под головку, неточность позиционирования головки над треком, колебание
головки по высоте, вызванное внешней вибрацией (ударом) корпуса накопителя уходом различных параметров (из-за старения, изменения температуры, давления и т. п.). Независимо от причин, ошибки должны быть выявлены и по возможности исправлены. Для контроля достоверности хранения применяется CRC-код для поля данных, который позволяет фиксировать ошибки некоторой кратности, а ЕСС-код при большей избыточности даже исправлять ошибки. Если сектор считывается с ошибкой, контроллер автоматически выполнит повторное считывание, и при случайности ошибки велик шанс правильного считывания сектора. Однако, если ошибка вызвана, например, неточностью позиционирования головки на середину трека, связанной с уходом параметров, повторное считывание может и не дать положительного эффекта. Накопитель с шаговым приводом головки в этой ситуации может только повторить позиционирование — вернуться на нулевой трек и снова «дошагать» до нужного — иногда это помогает. У привода с подвижной катушкой больше возможностей для поиска положения головки, оптимального для считывания данных. Для этого следящая система может покачать головку относительно центрального положения, заданного сервометками, и найти точку, где данные читаются верно. Если данные так и не удается считать верно, контроллер обязан сигнализировать об этом установкой бита ошибки контрольного кода в байте состояния, на что программа может отреагировать сообщением вида «CRC Data Error». Однако на практике довелось столкнуться с винчестером, который не сообщал об ошибках данных, — возможно, у него была неисправна схема контроля CRC-кода. «Уличить» в недостоверности хранения этот накопитель оказалось нелегким делом — все тесты, естественно, проходили успешно. Только при форматировании диска обнаружились ошибки, по которым и удалось добраться до виновника нестабильной работы компьютера (эта нестабильность скорее напоминала ошибки оперативной или кэш-памяти).
Если контроллеру никак не удается достоверно прочитать записанные в сектор данные, такой сектор должен быть исключен из дальнейшего использования. Если этого не сделать, бесчисленные повторные попытки обращения к этому сектору будут отнимать массу времени, а результата все равно не будет. На уровне накопителя отметка о дефектности блока делается в заголовке сектора, запись в который, как известно, производится только во время низкоуровневого форматирования. Однако современные встроенные контроллеры дисков сами обрабатывают обнаружение дефектных секторов и вместо них подставляют резервные, так что для пользователя дефектные секторы у дисков АТА и SCSI не видны. Контроллер помечает дефектный сектор специальной пометкой в заголовке, а вместо него использует сектор из резервной области, которая имеется в конце каждого трека. Однако простая подстановка номера отказавшего сектора в заголовок сектора из резервной области приведет к нарушению последовательности секторов и, следовательно, к падению производительности при обращении к длинному блоку данных. Более «хитрые» контроллеры производят сдвиг данных во всех секторах, следующих за дефектным, на один сектор назад (Defective Sector Slipping), после чего обращение к последовательной цепочке секторов снова станет «гладким» (без скачков вперед-назад) и быстрым. Конечно, со временем настанет момент, когда все резервные блоки будут использованы, и тогда появление видимого дефектного блока будет сигналом к замене накопителя.
Надежность считывания в большой степени зависит от точности позиционирования головок относительно продольной оси трека. Позиционирование, обеспечиваемое сервоприводом (особенно с выделенной сервоповерхностью), может быть и не оптимальным для каждой головки и требовать коррекции. Главным образом, эта коррекция необходима из-за изменения рабочей температуры. «Умный» контроллер хранит карту отклонений для цилиндров и головок, которую он создает и периодически корректирует в процессе работы. Процесс автоматической термокалибровки накопителя (Thermal Calibration, или T-Cal) запускается встроенным контроллером автоматически, и для системы, в которую он установлен, момент запуска этого процесса случаен. Процесс автоматической термокалибровки заметен пользователю: винчестер, к которому нет обращений, вдруг «начинает жить своей жизнью», выполняя серию позиционирований (слышно по характерным звукам). Во время рекалибровки доступ к данным накопителя приостанавливается, что не всегда допустимо. Накопители, предназначенные для мультимедийных целей, а также используемые как мастер, диски для записи данных на лазерный диск, должны обеспечивать довольно длительный непрерывный поток передали данных. Их контроллеры не должны позволять себе «вольности» термокалибровкой приостанавливать сеансы передачи данных.
Кроме термокалибровки, есть еще один процесс, асинхронно запускаемый контроллером диска, — так называемое свипирование (Sweeping): если к диску долгое время отсутствуют обращения, он перемещает головки в новое, случайным образом определенное положение. Этот процесс напоминает «хранитель экрана» монитора (Screen Saver) и предназначен для выравнивания степени износа поверхности диска.
Современные контроллеры имеют встроенную кэш-память, от размера которой и алгоритма использования сильно зависит производительность обмена данными. Общепринятой технологией кэширования диска является упреждающее Считывание (Read Ahead). Суть его проста: если контроллер получает запрос на чтение сектора, то он автоматически считает в буфер и секторы, следующие за запрошенным. Весьма вероятный запрос к следующему сектору будет обслужен из буфера без задержки (Latency), которая возможна из-за естественной синхронизируемости действий операционной системы и приложений с вращением диска. Более «ловкие» контроллеры идут дальше: они считывают в буфер весь трек, как только выполнится команда позиционирования, а когда придет следующая за ней команда чтения, данные уже будут в буфере. Такие хитрости (Zero Latency — нулевая задержка) позволяет система команд интерфейса SCSI. Как и для всякой кэш-памяти, для эффективности встроенного кэша накопителя существенным фактором является алгоритм выделения памяти и замещения старых записей. Как обычно, замене понежат наиболее старые записи. Вопрос о размере выделяемых областей для упреждающего чтения может решаться исходя из текущей статистики обращений. Контроллер с адаптивным кэшированием, заметив, что последние запросы чтения являются одиночными, перестанет выделять большие области под упреждающее чтение. Если характер запросов изменится, адаптивный контроллер примет соответствующие решения. Кроме того, отпечаток на алгоритм кэширования накладывает и многозадачный характер современных операционных систем и их дисковых запросов. Таким образом, многозадачность проникает и во встроенные контроллеры дисков.
Дисковые накопители являются, пожалуй, той частью компьютера, отказ которой оборачивается самыми крупными убытками (если потерянные данные не имеют дублей). Естественно, надежность их пытаются повышать всеми возможными способами, но отказы все-таки случаются. Отказы разделяются на предсказуемые и непредсказуемые. Предсказуемые отказы (Predictable Failure) появляются в результате постепенного ухода каких-либо параметров от номинальных значений, когда этот уход перейдет некоторый порог. Если наблюдать за такими параметрами накопителей, как время разгона до заданной скорости, время позиционирования, процент ошибок позиционирования, высота полета головок, производительность (зависящей и от числа вынужденных повторов для успешного выполнения операций), количество использованных резервных секторов и других параметров, то становится возможным предсказание отказов. Сообщение об их приближении операционной системе и (или) пользователю позволяет предпринять необходимые меры и предотвратить крупный ущерб. Целям предупреждения отказов служит технология S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology — технология самонаблюдения, анализа и сообщения), применяемая в современных накопителях. Эта технология, разработанная фирмой Seagate, имеет корни в технологии IntelliSafe фирмы Compaq и PFA (Predictive Failure Analysis — анализ предсказуемых отказов) фирмы IBM.
Задачи слежения за параметрами накопителя возлагаются на контроллер, а программному обеспечению компьютера остается только периодически интересоваться, все ли в порядке в накопителе, или грядет беда. Спецификации S. M.A. R.T. существуют в двух версиях — для интерфейсов АТА и SCSI, которые различаются как по системам команд, так и по способам сообщений состояния. Конечно, остаются и непредсказуемые отказы (Non-Predictable Failure), которые случаются внезапно. Они чаще всего вызываются разрушениями электронных схем под действием импульсных помех, механические части страдают от ударов. Снижать вероятность непредсказуемых отказов позволяет совершенствование технологий производства компонентов.


