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