Время чтения и записи - PullRequest
6 голосов
/ 14 мая 2009

Какая операция занимает больше времени - чтение с диска или запись на диск для того же объема данных и той же области памяти?

Ответы [ 3 ]

18 голосов
/ 14 мая 2009

Это на самом деле довольно сложный вопрос, и он требует понимания того, как настроена ваша система ввода-вывода. Простой пример, который вы цитируете (чтение / запись фиксированного объема данных в определенное место на диске), не так реалистичен, как вы думаете. Вот краткое изложение того, что может повлиять на производительность ввода-вывода.

  1. Скорость диска
    Скорость жесткого диска обычно выражается в единицах скорости вращения ( об / мин или оборотов в минуту), что говорит о том, как быстро вращаются пластины внутри привода. Типичные значения от 5400 до 10000 об / мин. Типичные скорости передачи от 1 до 1,6 Гбит / с и могут поддерживать скорость передачи до 125 МБ / с.

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

    Еще одна вещь, которую следует учитывать, - это то, что вы (и большинство компаний) можете получить более высокую скорость передачи данных, используя несколько дисков в конфигурации RAID . Пропускная способность дисков RAID зависит от того, какую комбинацию чередования, зеркалирования и четности вы выбрали. Проверьте статью Википедии для всех тонкостей. Здесь слишком много параметров, чтобы объяснить их полностью.

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

    Большинство современных ОС используют буферный кеш , чтобы данные с диска можно было хранить в памяти, и ОС могла планировать, когда он обращается к диску. Записи приложения будут казаться быстрыми, так как они могут идти прямо в память, а ОС может подождать, чтобы очистить буфер, пока ему больше нечего делать. На практике операционные системы будут пытаться сбрасывать записи довольно своевременно, чтобы сбой питания не убивал все ваши данные. Таким образом, пока есть свободное место в буфере, запись будет казаться быстрой. Если вы заполните буферный кеш или у ОС недостаточно свободной памяти для работы, вы можете увидеть снижение производительности ввода-вывода, поскольку ОС вынуждена чаще очищать буферы.

    Скорость чтения, как и скорость записи, зависит от того, как данные кэшируются. Большинство современных жестких дисков имеют аппаратные кэши, которые могут увеличить устойчивую скорость передачи данных. Аналогично, ОС использует буферный кеш для хранения файлов, к которым вы обращались. Любой из них может использовать некоторую стратегию предварительной выборки для извлечения данных с диска заранее, если кажется, что это может быть необходимо. При кэшировании начальное чтение может быть медленным, но последующее чтение (особенно чтение того же самого) займет меньше времени, если данные для чтения уже находятся где-то в кэше.

  3. Filesystem
    Наконец, стоит рассмотреть файловую систему . Большая запись может не все идти в одно и то же место, поэтому вы не можете просто учитывать скорость передачи при оценке того, сколько времени это займет. Файлы не всегда соприкасаются на диске, и ваша файловая система должна рассчитать, как они должны быть расположены, что может существенно повлиять на производительность в зависимости от того, сколько места доступно и насколько фрагментировано вашего диска.

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

3 голосов
/ 14 мая 2009

Краткий ответ: многое зависит.

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

Файловая система может существенно повлиять на скорость чтения и записи ... часто при записи требуется выполнить дополнительные операции, но если вы добавляете файл, который может идти быстрее.

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

1 голос
/ 14 мая 2009

Буферы сильно влияют на время чтения и записи. Буферы могут поддерживаться операционной системой в ОЗУ, и многие накопители также содержат внутренние буферы, которые являются частью контроллера диска.

Учтите, что операционная система может кэшировать части файла в ОЗУ, так что чтение из этих частей может завершиться очень быстро. Кроме того, операционная система может кэшировать записи в ОЗУ до тех пор, пока не будет достаточного объема для записи на диск. Вызов функции «запись» может вернуться после копирования данных только в другую область памяти.

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

...