Я пытаюсь понять встроенный кеш ввода-вывода в Windows. Если приложение записывает в файл, а затем читает / записывает его несколько раз подряд, кажется, что кеш ввода-вывода должен позволять этому происходить настолько быстро, насколько позволяет системная память? Тогда Windows будет постепенно записывать изменения обратно на физический диск неблокирующим образом?
Однако я встречал на этом сайте и другие вопросы, связанные с ramdisk, где пользователи видят значительный выигрыш, монтируя часть системной памяти в качестве жесткого диска. Если кеш ввода-вывода работает так, как я описал выше, зачем это вообще нужно? Есть ли в Windows настройки для этого?
Это приводит к моему реальному вопросу: есть ли смысл использовать ramdisk и вручную синхронизировать изменения с физическим диском даже через несколько минут или часов?
Редактировать: Исправлено неправильное представление о DMA и IO Cache, исправленное в ответе Эвана Андерсона.
Я думаю, вы путаете функциональность прямого доступа к памяти (DMA, аппаратная функция) с функциями, предоставляемыми Cache Manager в Windows.
DMA - это метод, позволяющий устройствам ввода-вывода напрямую обращаться к системной памяти без вмешательства процессора. Приложения не используют DMA - это делают драйверы устройств. Приложения далеки от процесса прямого доступа к памяти.
Запросы приложений на чтение / запись проходят через множество уровней на пути к устройству ввода-вывода. Cache Manager будет обрабатывать большую часть кеширования запросов через системную память. Драйверы самих устройств ввода-вывода также могут реализовывать кэширование.
Если ваше приложение плохо взаимодействует с Cache Manager, но работает с RAM-диском (который вы определите с помощью тестов производительности), то, во что бы то ни стало, используйте RAM-диск. Для меня нет особого смысла в академическом танце вокруг субъективного «хорошего» различных технологий. Что касается производственного развертывания, ключ к определению того, есть ли «смысл» в использовании данной технологии, должен основываться на тестах, максимально приближенных к реальным условиям, которые вы можете моделировать. Когда вы вносите изменения в ОС, стек драйверов, код приложения и т. Д., Вам следует повторить тесты, поскольку ваши старые предположения могут больше не соответствовать действительности.
Я часто сталкивался с множеством проблем с кешированием Windows, например с не сохранением некоторых недавних данных в кеш. Я видел странные видеофайлы размером 100 МБ в кэше Sysinternals RamMap на моем ноутбуке. Даже в периоды значительной нехватки памяти ...
Поэтому убедитесь, что ваши данные попадают в кеш. Сколько у вас кэш-памяти и с каким размером файлов вы экспериментируете?