Почему при чтении размера файла изменяется скорость ввода-вывода файлов? - PullRequest
0 голосов
/ 14 июля 2020

Я создаю программу анализа памяти на C ++ на Windows 10, используя жесткий диск 7200 об / мин, который по сути сканирует ваш диск и сообщает, какие папки используют сколько места, что позволяет вам выяснить, где находится большая часть вашего дискового хранилища

Из соображений эффективности я использую C ++, и моя методология заключается в рекурсивном сканировании всего диска с последующим чтением размера каждого файла в другом потоке, чтобы я мог сканировать и анализировать размер одновременно . По очевидным причинам сканирование выполняется намного быстрее, чем отчет о размере, но я заметил, что скорость ввода-вывода сильно меняется. Иногда он считывает размер 5000 файлов в секунду, тогда как в других случаях он читает 10 файлов в секунду. Посмотрите видео по адресу по этой ссылке . Первое число - это количество прочитанных размеров файлов, а второе число - сколько файлов было найдено всего. Первое число - вот что здесь важно.

Почему меняется скорость ввода-вывода моего файла и что я могу с этим сделать?

1 Ответ

1 голос
/ 14 июля 2020

У вас есть много узких мест, которые необходимо учитывать, как на стороне процессора, так и на стороне жесткого диска.

Определение местоположения данных

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

Данные Шина

Данные должны быть go в памяти P C. Обычно для данных используется только одна шина. Эта шина совместно используется многими объектами в вашей системе, процессором и контроллером жесткого диска, и это лишь некоторые из них. Если вам повезет, ваш P C имеет контроллер прямого доступа к памяти (DMA) для жесткого диска. Контроллер может передавать данные с порта жесткого диска в память, минуя процессор. Однако контроллер DMA должен совместно использовать шину данных с процессором (и друзьями). Арбитраж шины - еще одно замедление и несогласованность.

Совместное использование диска

Многие операционные системы используют жесткий диск в качестве виртуальной памяти; замена блоков памяти. Эти файловые запросы нужно будет смешивать с запросами вашей программы.

Последовательный доступ

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

Прерывания и планирование

Внутри вашего P C выполняется множество действий из inte rnet или связь по Wi-Fi для воспроизведения аудио и видео (а также выполнение других системных задач). Все это нужно запустить. Неважно, сколько у вас ядер, их недостаточно. Большинство операционных систем будут запускать задачи по времени и приоритету. Очень редко одна задача будет иметь исключительное право собственности на процессор до ее завершения. Ваша задача будет смешиваться с другими выполняемыми задачами. Таким образом замедляется ваша программа.

Chunking It

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

Вероятно, есть больше причин, по которым ваша программа выполняется медленно или имеет несогласованные тайминги, но приведенная выше информация должна дать вам лучшее представление о поведении вашего P C.

...