Использование нескольких дисковых устройств

 

Пропускную способность системы можно существенно повысить, если заменить один дисковый привод с блоком головок, «связанных» в единое целое, несколькими (т.е. контроллер дисков будет одновременно управлять несколькими накопителями). При подобном подходе общее время осуществления дисковых операций уменьшается пропорционально количеству дисковых устройств.

Пусть исходная аппаратная конфигурация система изменена таким образом, что один дисковый накопитель заменён четырьмя.

В этих условиях логично разделить множество записей между имеющимися четырьмя дисками, причём так, чтобы на каждом диске данные хранились на 196 соседних цилиндрах (в таком случае можно воспользоваться результатами предыдущего метода).

Первая фаза: при заполнении ОП в ходе первой фазы под данные, считываемые с каждого диска (6400/4=1600), стоит отводить 1/4 часть памяти. Т.к. система способна обслуживать одновременно 4 диска, то на заполнение 100 Мб ОП потребуется 1,6сек./4=0,4 сек. или 400 млсек.

Аналогично, выполняя запись данных в ходе первой фазы, можно распределить содержимое любого из отсортированных подсписков по четырём дискам и 13 соседним цилиндрам каждого диска, сохранив тот же четырёхкратный выигрыш в скорости.

Общее время чтения на первой фазе:

 

 

Время выполнения первой фазы целиком составит:

 

 

 

Вторая фаза: блоки по-прежнему необходимо считывать с первых позиций отсортированных подсписков в порядке, близком к «случайному». Так как невозможно гарантировать, что при чтении данных второй фазы будут использоваться все четыре диска параллельно в течение всего периода сортировки (это зависит от того, как реализована программа обработки данных), то используют эмпирическим путём установленный коэффициент прироста производительности из интервала 2-3. Если принять, что значение коэффициента равно 2, экономия составит 18 минут.

Таким образом, замена одного диска четырьмя и использование стратегии группирования данных по цилиндрам в совокупности дают возможность снизить общее время сортировки с 74 минут до 18 минут 13 секунд.

 

Создание зеркальных копий

 

Один из доводов в пользу применения зеркальных дисков состоит в том, что в случае выхода из строя одного диска данные удастся считать с другого.

Помимо основного предназначения, связанного с повышением уровня надёжности хранения информации, зеркальные диски позволяют увеличить пропускную способность системы. Т.е. имея n копий данных, можно считывать параллельно любые n блоков. Более того, если единовременной загрузке подлежат менее n блоков, появляется возможность увеличения скорости работы системы путём тщательного выбора диска, с которого данные могут быть считаны быстрее: достаточно, например, проанализировать, головки какого из дисков, не занятых в данный момент выполнением других операций, находятся наиболее близко к тому цилиндру, где расположена требуемая информация.

Применение зеркальных дисков не позволяет ускорить процессы записи, хотя замедления работы в сравнении с теми ситуациями, когда используется единственный диск, также не наблюдается. Записываемый блок сохраняется сразу на всех дисках, но поскольку операции записи выполняются параллельно, они требуют примерно столько же времени, что и в системе с единственным диском. Следует отметить, что абсолютно точной синхронности операции записи на зеркальные диски достичь не удастся, т.к. головки одного диска, например, могут быть расположены «невыгодно» (т.е. непосредственно после сектора, начиная с которого следует записывать блок), а другого, наоборот – там, где необходимо. Но, в среднем, подобные различия во времени оборота довольно малы, и если наряду с созданием зеркальных копий применяется стратегия группирования данных по цилиндрам, этими различиями можно пренебречь.

 

Упорядочение дисковых операций и «алгоритм лифта»

 

Ещё один способ повышения пропускной способности системы связан с применением алгоритмов (уровня контроллера дисков), позволяющих упорядочить запросы на выполнение дисковых операций во времени и выбирать, какие из них должны обрабатываться первыми (динамические расписания обслуживания запросов). Это неприменимо, когда системе (как в случае с двухфазной сортировкой) приходится считывать и записывать данные в определённой последовательности, но даёт выигрыш в производительности, если система единовременно выполняет множество запросов, затрагивающих небольшие порции данных.

Один из простых и эффективных способов упорядочения запросов к диску во времени называется алгоритм лифта (движение головок аналогично движению лифта высотного здания): если один или несколько запросов предусматривают обращение к одному цилиндру, головки перемещаются к этому цилиндру и выполняют требуемые операции чтения-записи, затем головки продолжают движение в том же направлении до достижения очередного требуемого цилиндра; если среди поступивших запросов нет таких, которые предусматривали бы обращение к следующим по порядку цилиндрам, направление перемещения изменяется на противоположное.

 

Пример:

Среднее время поиска – 6,46 млсек., среднее время оборота – 4,17 млсек., среднее время передачи – 0,25 млсек. (см. исходные данные системы вначале лекции). Пусть к некоторому нулевому моменту времени поступили три запроса, предусматривающие обращения к блокам данных, расположенным на цилиндрах с номерами 2000, 6000 и 14000, а блок головок расположен напротив цилиндра 2000. В скором времени должны поступить ещё три запроса (данные представлены в таблице ниже). Например, запрос, предполагающий обращение к цилиндру 4000, поступает в момент времени 10 млсек. и т.д.

 

№ п/п Номер цилиндра Момент поступления, млсек. Номер цилиндра при обработке Момент времени начала обработки, млсек. Момент времени завершения, млсек. Пояснения
1. 4,42 4,17+0,25=4,42, поиск не требуется, запрос к цилиндру 4000 ещё не поступил
2. 9,42 13,84 4,42+5(4000/1000+1), головки «проскочили» цилиндр 4000, запрос ещё не поступил
3. 22,84 27,26 13,84+9=22,84, запрос по цилиндру 16000 уже поступил
4. 30,26 34,68 27,26+3=30,26, движение меняется на обратное
5. 41,68 46,10 34,68+7=41,68
6. 53,10 57,52 46,10+7=53,10