Получают ли регулярные чтения пользу от mmap?

Если я использую mmap на некотором файловом дескрипторе fd, будут ли регулярные вызовы read() "знать", что существует отображение памяти файла и читать из памяти напрямую?

Что если mlock() используется после mmap(). Правильно ли утверждать, что ни один последующий read() файла не будет обращаться к диску?

0
18.02.2017, 03:10
1 ответ

Думаю, это зависит от того, что вы имеете в виду под словом «осведомленность».

Поскольку системный вызов read () является запросом к ядру для копирования содержимого файла, начиная с текущей позиции, в назначенный буфер памяти программы, read () для обычного файла выполнит эту задачу таким же образом, независимо от того, существует ли одновременно отображение файла в памяти. Нет никакого «осознания».

Теперь, если файл имеет формат mmap () ed и read () , вполне может быть достигнута оптимизация производительности. Например, если файл сначала read () , то считанные разделы файла, вероятно, уже находятся в кэше страниц, и для последующего доступа к отображению памяти не потребуется снова обращаться к ним с диска. . Или, наоборот, если есть отображение памяти, которое уже было выгружено, последующему read () не нужно будет снова переходить на диск. В этом смысле вы могли бы в некотором смысле считать, что mmap () и read () «осведомлены» друг о друге.

2
28.01.2020, 02:34

Теги

Похожие вопросы