Отображенные в память файлы и RAM-диск - PullRequest
4 голосов
/ 13 августа 2011

Для игры Minecraft основным подходом при запуске серверного приложения является запуск его на RAMDisk, поскольку оно использует сотни крошечных файлов для генерации мира, а скорость ввода-вывода является основным узким местом.

В недавней попытке я попытался использовать Dokan / ImDisk для программного создания RAMDisk для серверного приложения. Dokan был значительно медленнее, чем средний жесткий диск, и я не смог заставить ImDisk функционировать должным образом. Поскольку это единственные 2 драйвера файловой системы, которые я знаю, которые имеют .NET API, я сейчас ищу альтернативы.

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

  • Могут ли отображаемые в память файлы работать одинаково, т.е. создать виртуальный диск, на который я могу создать символическую ссылку? Например, G: \ Data_Files \?

  • Существуют ли другие альтернативы Dokan / ImDisk с плавающими вокруг .NET API / привязками?

Ответы [ 2 ]

3 голосов
/ 13 июля 2012

Изучив кучу решений и выполнив несколько тестов, мы не смогли пропустить RAMDisk от DataRam .Мы разбирались с кучей драйверов для Windows и некоторыми другими бесплатными решениями и в конечном итоге не смогли оправдать расходы по сравнению с крошечной ценой коммерческого решения.

2 голосов
/ 13 августа 2011

Есть несколько подходов, которые зависят от специфики вашей задачи.

Если вам нужно работать с файловой системой (то есть с помощью функций и классов API файловой системы), и вы хотите быстро, то (как я предложил в ответ на ваш предыдущий вопрос) вам нужно создать RAMDiskВодитель.Windows Driver Kit включает в себя пример драйвера, который (совпадение?) Имеет название «RamDisk».Однако разработка драйверов сложна, и если с образцом что-то не так или вам нужно его расширить, вам нужно углубиться в разработку в режиме ядра (или нанять кого-нибудь для выполнения этой работы).Почему режим ядра?Причина, как вы могли видеть с Dokan, переключение обратно в режим пользователя для хранения данных вызывает значительное замедление.

Если все, что вам нужно, - это удобное управление кучей файлов в памяти с помощью класса Stream (с возможностью записи всего этого на диск), то вы можете использовать одну из виртуальных файловых систем.Наша SolFS (Application Edition) является одним из таких продуктов, которые вы можете использовать (я также помню FileBase File System, но, похоже, они не предоставляют ознакомительную версию).SolFS, кажется, подходит для вашей задачи, поэтому, если вы тоже так думаете, вы можете связаться со мной в частном порядке (см. Мой профиль) для помощи.

Чтобы ответить на ваши вопросы:

  1. Нет, отображаемые в память файлы (MMF) - это буквально файлы на диске (включая виртуальный диск, если он у вас есть), доступ к которому можно получить не через API файловой системы, а напрямую, используя операции в памяти.MMF, как правило, быстрее для большинства файловых операций, поэтому они часто упоминаются.

  2. Наши продукты Callback File System или CallbackDisk (см. Строку virtual storage ) являются альтернативой, однако, как я упоминал в первом абзаце, они не решатВаша проблема из-за переключения контекста в пользовательском режиме.

Обновление: Я не вижу препятствий для того, чтобы драйвер имел копию в памяти и выполнял операции записи на диск асинхронно, когда это необходимо.Но для этого потребуется изменить образец драйвера RAMDisk (и это требует довольно много программирования в режиме ядра).

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

...