Предварительный прогрев дискового кэша - PullRequest
0 голосов
/ 17 мая 2018

После некоторого теоретического обсуждения сегодня я решил провести некоторое исследование, но я не нашел ничего убедительного.

Вот проблема: Мы написали инструмент, который считывает около 10 Гб файлов изображений из набора данных в несколько терабайт. Мы хотим ускорить время выполнения за счет минимизации издержек ввода-вывода. Идея заключалась бы в том, чтобы «предварительно разогреть» дисковый кеш, так как мы заранее знали, из какого каталога мы будем читать при запуске инструмента. Существует ли какой-либо API или метод, чтобы дать эту подсказку Windows, чтобы она могла начать предварительный прогрев кеша диска, ускоряя будущий доступ к диску, так как файлы уже находятся в ОЗУ (которых достаточно на машинах, на которых мы запускаем инструмент )

Я знаю, что Windows читает только один файл, но что если у меня есть каталог с тысячами файлов?

Я не нашел никаких прямых интерфейсов Win32 API или инструментов командной строки, чтобы сделать это напрямую.

Что делать, если я запускаю фоновый поток с низким приоритетом, открывая все файлы для чтения и закрывая их? Конечно, я мог бы отобразить в памяти все файлы и закрепить их в ОЗУ, но это, вероятно, могло бы привести к тому, что основной рабочий поток ввода-вывода мог бы остановиться.

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

(Конечно, я мог бы сделать эталонный тест, и я это сделаю, но я бы хотел немного больше понять, как это работает, чтобы быть более научным и менее трудоемким).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...