рассчитать среднее время чтения байтов на диске

291
Charlie_K

Вопрос дает мне следующие параметры:

время поиска трека = 10 мс (миллисекунда).

Скорость вращения диска = 9000 оборотов в минуту

Секторов на каждой дорожке = 600

Каждый сектор может хранить 512 байт данных.

Вопрос просит подсчитать среднее время чтения 1024 байта.

Мне нужно знать, правильно ли я это сделал. Я был бы признателен, если бы кто-то мог, пожалуйста, взглянуть на мое решение.

решение

уравнение для времени поиска от Уильяма Сталлингса, Компьютерная архитектура и организация 10e

1
Мы не делаем домашнюю работу. DavidPostill 5 лет назад 0

2 ответа на вопрос

1
Akina

Чтобы прочитать 1024 байта (1024/512 = 2 сектора), вам необходимо:

  • искать трек с 1-го сектора. 10мс
  • подождите, пока 1-й сектор не достигнет положения головы. Подождите это - 0 мс минут, 60 * 1000/9000 = 6,67 мс, максимум, 3,33 мс в среднем
  • читать сектор. 1 / (600 * (9000/60)) = 0,011 мс. Пренебрежение.
  • 2-й сектор может быть на той же дорожке или на другой дорожке. Время поиска - 0 мс мин, 10 мс макс, 5 мс в среднем
  • подождите, пока второй сектор достигнет положения головы. Ожидание - 0 мс, максимум 6,67 мс, среднее значение 3,33 мс
  • читать сектор. Пренебрежение.

Итого: 10 + 3,33 + 5 + 3,33 ~ 21,7 мс

PS. Не думайте: «Если нет поиска между секторами, время ожидания равно 0». Никто не говорит, что сектора смежные.

0
DaaBoss

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

По-прежнему важно понимать, что вызывает, а не вызывает проблемы с производительностью.

Средняя «скорость чтения данных» для баз данных будет в основном зависеть от размера ввода-вывода, который вы перемещаете за один раз, и от того, является ли он непрерывным или нет. Он также зависит от самого диска, сообщая о его реальных аппаратных параметрах, которые часто только моделируются. (Например, действительно ли 600 секторов на дорожку? Поскольку внешняя дорожка диска намного больше, любой диск за последние 30 лет будет иметь намного больше секторов на внешней дорожке, чем внутри.) Вот несколько примеров производительности, если это были истинные параметры:

Чтение базы данных: обычно означает, что номера секторов будут считываться случайным образом по всему диску (предположительно, 1024 байта из 2 последовательных 512 секторов), и ни один из секторов не находится в памяти или любом другом кеше: в этом случае ваша средняя скорость передачи данных равна собирается быть:

10 мс = изменение положения поиска головы: (Обратите внимание, что это означает, что вы можете выполнить только 100 операций поиска за 1 секунду, и поэтому 100 КБ / с будут самыми БЫСТРЫМИ, которые вы можете когда-либо прочитать 1024 случайным образом.)

1? MS = командные накладные расходы = неизвестно: раньше это было значительным, до 8 мс. Сегодня она, вероятно, будет в большей степени зависеть от вашей ОС, эффективно обрабатывая ваши запросы. Таким образом, если ваша система также вытеснит много МБ на диск, ваша система будет значительно замедлена. Количество операций ввода-вывода и дисков сегодня, вероятно, меньше, чем у MS. Это можно легко проверить с помощью SSD, чтобы имитировать вращающуюся шину HD и служебные данные прошивки. Включенное здесь, как правило, время переключения считывающих головок, если вы уже на правильном пути или цилиндре. Это также включает в себя возврат перемещенных данных в ОС. Следите за тем, чтобы общее время прерывания процессора оставалось <1%, что может указывать на аппаратную проблему диска. Грубое предположение? <1 мс, что все еще может быть значительным.

3,3 мс = вращаться, пока сектор не окажется под головками: 9000 об / мин / 60 с = 6,67 мс. Вероятность быть ближайшим или самым дальним составляет 50%, поэтому задержка в 3,33 мс для каждого ввода / вывода. Примечание. Это означает, что случайное чтение, если головка уже установлена ​​на правильной дорожке, все равно будет составлять 3,33 мс, а ваша максимальная скорость передачи данных никогда не может превышать 300 КБ / с при 1 кОм ввода-вывода.

0,022 мс = время чтения головки: 6,67 мс / 600 секторов * 2 = 1024 считывания ==> 0,022 мс. Это означает, что максимальная скорость передачи данных на этом диске составляет 1 / 0,022 MS = 45 000 * 1024 = 46 МБ / с. Для операций чтения / запроса базы данных это совершенно несущественно, в то время как при перемещении всей базы данных это будет наиболее значимым фактором.

Таким образом, в этом случае ваша скорость «чтения базы данных» будет ~ 14.355 мс = 70 кб / с. Обратите внимание, что если IO было 512 (без учета 0,022 мс), скорость составляет половину этого. Используя 2048 и ставка удваивается. Поэтому наиболее значимым параметром является размер смежных секторов до тех пор, пока вы не доберетесь до полного чтения дорожки (при условии, что все сектора диска являются смежными).