Контроль над параллельным выполнением команд и перестройка очереди

Интерфейсы SATA и PATA, используемые на большинстве настольных персональных компьютерах ограничены выполнением одной транзакции на шине в определенный момент времени. Другими словами, интерфейс выполняет только одну операцию одновременно, и даже не имеет представления о предыдущих и последующих операциях и запросах на шине. В тоже время современные SCSI жесткие диски имеют возможность множественного одновременного выполнения десятков операций. Эта возможность называется командная очередь и реорганизация. Она очень полезна на серверах и других системах хранения информации, которые широко используются.

Если логика жёсткого диска получает несколько запросов на чтение или запись, она должна обработать их, чтобы выяснить, в каком месте пластины находятся интересующие данные. Некоторые запросы могут быть обработаны прямо из внутреннего КЭШа — тогда это практически мгновенный ответ.

Итак, контроллер должен решить, в какой последовательности надо будет обработать запросы. В настоящее время все современные накопители, так или иначе, пытаются оптимизировать процессы чтения-записи. Так как операции случайного чтения или записи занимают в тысячи раз больше времени, чем операции вычисления, производители разработали десятки и сотни различный алгоритмов, которые определяют, в какой последовательности наиболее выгоднее по времени считывать и записывать данные, запрошенные компьютером. Эти алгоритмы можно разделить на следующие категории:

  1. Первый вошел — первый вышел: Винчестер обрабатывает запросы по принципу "первый вошел — первый вышел". Это наиболее простой алгоритм обрабатывания запросов, в случае накопителей на жёстких дисках, наиболее плохой с точки зрения производительности. Давайте представим себе очень высокое 100 этажное здание и лифт, стоящий на 1 этаже. Человек на этаже № 77 нажимает кнопку вызова лифта для езды вверх, после чего нажимается верхняя кнопка на 31, 94 и 20 этаже. Лифт первым обслужит человека, стоящего на 77 этаже, затем поедет к человеку, стоящему на 31 этаже и т.д. В данной ситуации дольше всех придется ждать человеку, находящемуся на 20-м этаже, самому близкому к лифту и желающему ехать наверх.
  2. Оптимизация времени поиска: Накопитель анализирует все не обслуженные запросы и перестраивает их в порядке удаления нужного цилиндра от того, на котором сейчас находятся головки. Этот механизм похож на работу умного лифта, так, в предыдущем случае, лифт первым должен был поехать к человеку на 20-м этаже.
  3. Оптимизация времени доступа: Предыдущий механизм оптимизации не учитывал задержку, связанную с ожиданием нужного сектора на треке, т.е. когда головка вышла на нужный трек, накопителю необходимо подождать, пока нужный сектор окажется под головкой. Два запроса могут быть на соседних цилиндрах, но в разных местах трека, в тоже время третий запрос, который находится на расстоянии 10 цилиндров, но намного ближе в плане общего времени доступа, чем предыдущие два. Почти все современные накопители очень аккуратно анализируют приходящие запросы и все время их перестраивают, чтобы сократить время считывания всего пакета запросов в целом. Оптимизация основана на уменьшении суммарного времени перехода на нужный трек и ожидания нужного сектора. Этот метод оптимизации называется: "Контроль над параллельным выполнением команд и перестройка очереди". Данный метод требует очень серьезной вычислительной мощности, т.к. винчестеру нужно точно знать текущее положение головки, точное положение интересующего нам сектора, текущую точную скорость вращения шпиндельного двигателя, время пролета до нужного трека, время стабилизации головок на треке и т.д. Всего одна небольшая ошибка в данных расчетах будет приводить к тому, что винчестеру придется простаивать драгоценное время, ожидая, пока сектор пройдет почти целый оборот.

05 05 1

Статьи

© ООО «Спас-Инфо», 2000-2006

Rambler's Top100