Пути повышения производительности винчестера

Когда пользователь, наблюдая за песочными часами на мониторе, приходит к выводу, что его компьютер безбожно тормозит, и адресует свое негодование по этому поводу Microsoft, прав он только отчасти.
Чаще всего так раздражающее нас ожидание связано с загрузкой файлов с винчестера, а не с работой центрального процессора под руководством Microsoft Windows и ее приложений. Нет, конечно, это не снимает ответственности за задержки в работе компьютера с Microsoft и других, кстати, разработчиков программного обеспечения. Не с Луны же свалились на нашу голову эти бешеного размера файлы.
Но и сами мы виноваты. Радуемся красивым картинкам на экране? Приветствуем появление высококачественного звука, видеозаставок, игрушек с богатой графикой? Не возражаем, чтобы наши документы были оформлены как можно красивее, а в базах данных хранилась информация едва ли не обо всем на свете? Тогда не надо злиться, что файлы стали неподъемными.
Другое дело, что надо стремиться к сбалансированной производительности как аппаратных узлов компьютера, так и установленных на нем приложений. Мощной операционной системе и прикладным программам следует предоставить и процессор побыстрее, и винчестер не только емкий, но и более быстрый. Кстати, популярная рекомендация поставить побольше оперативной памяти, чтобы машина не тормозила, напрямую связана с недостаточной производительностью винчестера.

От чего зависит быстродействие винчестера
Накопитель на жестких магнитных дисках, он же винчестер, — устройство электронно-механическое. Если не вдаваться в подробности, можно считать, что механическая часть его включает приводы пластин (дисков), сборки головок чтения и записи. Электроника винчестера представлена головками чтения и записи, каналом чтения, контроллером интерфейса, буферной памятью, схемами управления приводами пластин и головок.
Соответственно, часть параметров винчестера характеризуют его механику, а другие — электронику. Эти характеристики, хотя и кажутся малозависимыми друг от друга, на самом деле тесно увязаны между собой. Чтобы добиться прогресса, скажем, во временных параметрах накопителя, характеризующих быстродействие его механики, необходимо значительно усовершенствовать и его электронику. И наоборот.
Итак, что же это за характеристики. Обо всех говорить не будем, остановимся на основных, по которым можно судить о производительности винчестера. В первую очередь всегда упоминают временные характеристики привода — среднее время поиска и ожидания. Первая величина говорит, сколько времени потребуется на перемещение головок к нужной дорожке. Вторая — сколько придется подождать, пока под головками окажется требуемый сектор, она напрямую связана со скоростью вращения пластин. Среднее время доступа к данным включает еще несколько величин.

Среди "электронных" характеристик чаще всего обращают внимание на внешнюю скорость передачи данных, которая на самом деле является пропускной способностью интерфейса, соединяющего накопитель с системной шиной компьютера. Данные с такой скоростью (или близкой к ней) передаются лишь в том случае, если они были считаны заранее и находились в буфере. Параметры интерфейса, разумеется, одинаковы у всех накопителей, им оборудованных.
Реже упоминают внутреннюю скорость передачи данных, которая как раз и показывает, как быстро работает канал чтения винчестера, то есть с какой скоростью данные считываются с пластин и помещаются в буфер. В последнее время с учетом роста интенсивности обращений программ к жесткому диску эта величина становится все важнее. Большое значение играет также емкость встроенного в накопитель буфера и его организация. Буфер призван сгладить несоответствие между внутренней и внешней скоростью передачи данных.
Чтобы разобраться, как все эти параметры связаны между собой, давайте поговорим о путях повышения производительности винчестеров. Проблема эта волнует все компании, производящие накопители на жестких дисках. Как свидетельствуют публикуемые в прессе обзоры, наибольших результатов в этом добилась сегодня корпорация IBM (по крайней мере, в секторе IDE-накопителей для настольных компьютеров). Поэтому в дальнейшем я воспользуюсь данными, приводимыми в технических документах этой компании.

Повышение скорости вращения пластин
При обслуживании случайных запросов на чтение или запись производительность винчестера на 90% определяется его механическими характеристиками, такими как время поиска (касается движения головок) и скорость вращения пластин (движение самих дисков). Под случайными запросами понимаются обращения к файлам, записанным на дисках в разных местах. Такой режим типичен для работы простых приложений Windows — текстовых редакторов, электронных таблиц, навигаторов Интернет, электронной почты и т.п.

На долю электронных факторов, включая внутреннюю скорость передачи данных по каналу чтения, выдачу их из буфера винчестера, внешнюю передачу данных по IDE-интерфейсу и прием операционной системой, остается 10%. Тут надо учитывать, что хотя внутренняя скорость передачи данных считается чисто электронным параметром, она серьезно зависит от скорости вращения пластин.
Из двух механических факторов — времени поиска и скорости вращения — наибольший эффект с точки зрения повышения производительности винчестера достигается при увеличении скорости вращения. Это подтверждается начавшимся переходом индустрии на IDE-винчестеры со скоростью вращения 7,200 оборотов в минуту (об./мин.) вместо широко применявшихся в последние годы накопителей с 5,400 об./мин.
Повышение скорости вращения, диктуемое требованиями к производительности винчестеров со стороны сегодняшних операционных систем и приложений, дает выигрыш как по среднему времени ожидания, так и по внутренней скорости передачи данных. Причем в первом случае в основном эффект достигается при случайных обращениях, а во втором — при чтении больших массивов последовательно записанных данных (графики, аудио или видео).
Из чего складывается время считывания данных с винчестера (I/O time) при типичных случайных запросах? Сначала его контроллеру необходимо время, чтобы обработать поступивший запрос, чтобы выдать команды на привод головок (command overhead time). Затем некоторое время уйдет на передвижение головок к заданному цилиндру (seek time). После этого придется подождать, пока диски повернутся и под головками окажутся необходимые секторы с данными (latency time). Потом начнется чтение и передача данных в компьютер (data transfer time). То есть

I/O time = command overhead time ++ seek time + latency time + data transfer time

В этом уравнении время ожидания полностью определяется скоростью вращения пластин и в среднем равно половине периода оборота дисков. У винчестеров со скоростью вращения 5,400 об./мин. среднее ожидание составляет 5.6 миллисекунды (мс), а при переходе к 7,200 об./мин. оно сокращается до 4.2 мс. Если принять остальные составляющие равными для обоих винчестеров (а так оно практически и есть), можно прикинуть прирост производительности, получаемый за счет перехода на 7,200 об./мин.
По данным IBM, у современных винчестеров для настольных РС время обработки команды составляет примерно 0.5 мс, среднее время поиска равно 9.5 мс, на передачу 4 килобайт данных уходит приблизительно 0.3 мс. Тогда получаем, что винчестеру со скоростью вращения пластин 5,400 об./мин. на чтение типичного 4-килобайтного блока данных (одного кластера FAT32) потребуется 15.9 мс, в то время как винчестер со скоростью вращения 7,200 об./мин. с этой задачей справится за 14.5 мс.
Итак, переход на 7,200 оборотов в минуту при выполнении операций чтения типичных 4-килобайтных блоков данных дает 10-процентный прирост производительности по сравнению с винчестерами на 5,400 об./мин.

Но это еще не все. Повышение скорости вращения пластин сказывается и на внутренней скорости передачи данных (disk transfer rate).
Теоретическая максимальная внутренняя скорость передачи данных (то есть скорость, с которой данные записываются на диск или считываются с него) определяется временем оборота дисковых пластин (revolution time), размером сектора (sector size), числом секторов на треке (sectors per track), числом треков в цилиндре, или числом рабочих поверхностей установленных в винчестере дисковых пластин (tracks per cylinder), и временем, необходимым для переключения между головками (временем перехода между треками в цилиндре). Для вычисления теоретической максимальной внутренней скорости передачи данных можно воспользоваться упрощенной формулой:
max. disk transfer rate = sectors per track * sector size / revolution time

Время оборота пластин в винчестере со скоростью вращения 7,200 об./мин. составляет 8.3 мс, а при 5,400 об./мин. — 11.1 мс. При равном для обоих накопителей числе секторов на трек и одинаковом размере сектора (в большинстве операционных систем это 512 байт) получаем, что переход на 7,200 об./мин. обеспечивает прирост внутренней скорости теоретической максимальной передачи данных на 33%.
Такой, или почти такой, прирост производительности наблюдается при считывании и записи больших последовательных блоков данных. Этот режим характерен для приложений графики, аудио и видео, баз данных.
Кстати, повышение скорости вращения иногда заставляет уменьшить число секторов на трек, то есть плотность записи данных. Это связано с тем, что электронный канал чтения обладает ограниченной пропускной способностью. При слишком высокой плотности записи и скорости вращения пластин она может оказаться недостаточной для обработки всех данных, проходящих в единицу времени под головками чтения/записи. Поскольку сегодня задача увеличения плотности записи и емкости винчестеров стоит не менее остро, накопители самой большой емкости пока выпускаются с меньшей скоростью вращения пластин.

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

Корпорация IBM, как и другие производители, постоянно совершенствует алгоритмы, оптимизирующие использование винчестерного кэш-буфера при работе в современных компьютерных системах. При этом учитывается, что серверы, рабочие станции и обычные персональные компьютеры, например, совершенно по-разному обращаются к дискам. Поэтому выпускаемые для них винчестеры оснащаются разными интерфейсами, буферами разной емкости.
Повышения эффективности кэш-буфера добиваются, во-первых, наращиванием его емкости и, во-вторых, применением хитроумных алгоритмов сегментирования. Под сегментированием буфера понимается разделение его на несколько частей (сегментов), используемых независимо друг от друга — для обслуживания параллельных очередей запросов чтения, поступающих от разных программ, например. Адаптивное сегментирование предусматривает гибкий подбор числа сегментов и их емкости.
Чем выше внутренняя скорость передачи данных, чем более быстрым интерфейсом оснащен винчестер, тем больший ему требуется буфер. На жестких дисках для персональных компьютеров со скоростью вращения пластин 5,400 об./мин. в большинстве случаев устанавливались 256-килобайтные буферы. Сегодня высокопроизводительные винчестеры со скоростью вращения 7,200 об./мин. и интерфейсами Ultra ATA-33/66 оснащаются как минимум 512-килобайтными буферами. SCSI-винчестеры, предназначенные для рабочих станций и серверов, нуждаются в буферах емкостью 1, 2 и даже 4 мегабайта. Причем 4-мегабайтные буферы SCSI-винчестеров IBM Ultrastar разделяются на 4 сегмента по 920 килобайт каждый (количество сегментов конфигурируется).
Тут все зависит от характера применяемых программных приложений и, следовательно, обращений к винчестеру. При работе баз данных с большими записями чтение и запись носят последовательный характер, и тогда целесообразно разделять буфер на несколько емких сегментов. Когда преобладают случайные обращения, может понадобиться разделение буфера на большее число сегментов. В идеале количество сегментов должно чуточку превышать число параллельно обслуживаемых винчестером потоков ввода/вывода.

Прерывание потока данных, поступающего по внешнему интерфейсу винчестера, происходит тогда, когда при записи буфер оказывается полным, а при чтении — пустым. И в том, и в другом случае это происходит из-за более низкой скорости передачи данных по каналу чтения, чем по внешнему интерфейсу. Уменьшить количество таких прерываний позволяет увеличение емкости сегментов буфера. Наибольший эффект ощущается при обслуживании мощных потоков данных, таких как последовательное чтение или запись громоздких графических файлов, аудио- и видеоданных.
Предположим, что с винчестера считывается 256-килобайтный поток данных. Если на нем установлен буфер емкостью 1 мегабайт, разделенный на 4 сегмента по 160 килобайт каждый, емкости такого сегмента окажется недостаточно для поддержания непрерывности потока данных. А 4-мегабайтный буфер, поделенный на 4 сегмента по 920 килобайт, справится с задачей легко. В этом случае практически всегда следующая запись, за которой обратится программа, будет считана с диска загодя и выдана с максимальной скоростью из буфера. Буфер не будет опорожняться, а SCSI-интерфейс — отключаться.
И еще один момент. Операционные системы тоже организуют кэширование данных, считываемых или записываемых на винчестер. Причем в их распоряжении вся системная память компьютера, из которой можно спокойно выделить для этих целей и 4 мегабайта, и в несколько раз больше. Зачем тогда устанавливать еще один большой буфер на винчестер? Дело в том, что размещение буфера на винчестере позволяет в несколько раз сократить нагрузку на интерфейс. В частности, по нему не будут передаваться данные, считываемые с упреждением, а ведь заранее неизвестно, пригодятся они или нет.

Роман Соболенко


Компьютерная газета. Статья была опубликована в номере 04 за 1999 год в рубрике hard :: технологии

©1997-2024 Компьютерная газета