Стоимость создания объекта boost :: file_mapping? - PullRequest
2 голосов
/ 20 марта 2019

У меня есть анализатор файлов, который загружает файл как объект сопоставления файлов, а затем отображает регион в зависимости от требований вызывающего. К файлам можно получить доступ локально или по сети.

Это чтение файла является последовательным.

У меня было 2 подхода -

Подход 1

Создайте объект file_mapping, скажем, f.

Создание сопоставленных регионов с использованием 'f', где одновременно активен только один mapped_region.

Подход 2

Создание нового объекта file_mapping (для того же файла) каждый раз, когда mapped_region должен быть создан.

Подход 2, основанный на предположении, что file_mapping предназначен для межпроцессного взаимодействия, поэтому создание нескольких объектов file_mapping для одного файла не будет проблемой.

Когда к файлу обращались локально, показывались показатели производительности, одинаковое время в обоих подходах (для файла 3 ГБ)

Однако, когда к файлам обращались из сети, Подход 2, выполненный в ~ 5 раз медленнее по сравнению с Подходом 1.

В обоих подходах mapped_region разрушается до создания нового.

Единственное отличие в подходе 2 состоит в том, что объект file_mapping создается и уничтожается для каждого mapped_region.

Стендовая разметка Процедура для последовательной операции чтения файла:
Размер файла: 3 ГБ
Количество созданных областей: 8600
Размер области карты: переменная, варьируется в диапазоне от 9КБ до 900КБ
Доступ к регионам: доступ ко всем регионам осуществляется сразу после их создание.
Частота создания областей: одна за другой в цикл, с некоторой обработкой данных, извлеченных из отображенной области. Обработка включает в себя заполнение рекурсивной структуры, хотя глубина максимальна 10. Это не очень интенсивно.

Я хочу понять:

Почему такая большая разница во времени?

Что именно происходит при создании объекта file_mapping?

Что именно происходит при создании возражения mapped_region?

Ищет ли ОС большой кусок памяти во время file_mapping создание или во время создания mapped_region?

Когда данные файла фактически загружаются в основную память?

Большое спасибо.

1 Ответ

0 голосов
/ 20 марта 2019

Невозможно ответить на этот вопрос, не зная процедуры тестирования, т. Е. Как часто вы создавали объекты mapped_region, насколько большими были отображенные части и к каким частям из них действительно обращались.

Также неясно, если в вашей реализации объект сопоставления файлов (boost::file_mapping) также явно открывает дескриптор файла, или файл открывается вами.

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

...