mkstemp и нагрузка на жесткий диск - PullRequest
0 голосов
/ 11 июля 2019

Синхронизированы ли временные файлы с mkstemp на диск?

Вот что у меня есть:

  1. Программа создает временный файл с помощью mkstemp и отправляет fdв другую программу.

  2. Этот временный файл mmap сформирован обеими программами и интенсивно используется (до 400 МБ / с операций записи и 400 МБ / с операций чтения; до60 операций чтения и записи в секунду).

  3. Я не могу использовать memfd_create (может не поддерживаться на целевых устройствах).

  4. Позволяет такжеПредположим (и это почти верно), что я не могу создать этот файл на tmpfs (как в /tmp).

Что мне нужно, это гарантировать, что такой файл не будет загружать жесткий диск,Я не могу позволить, чтобы это было записано на диск, даже если это происходит только раз в 5 секунд.Если я не смогу получить такую ​​гарантию, я поищу другой путь.

Дополнительная информация (не важно):

Я пишу Wayland CompoSitor для устройств Android.В настоящее время временные файлы (фактически, поверхности Wayland) создаются на tmpfs.И все работает нормально, пока SELinux не включен.Но если я включаю SELinux, это предотвращает передачу файлов с клиента на композитор.Единственное решение, которое я знаю в настоящее время, - это создание временных файлов в домашнем каталоге приложения.Но если такой путь опасен, я найду другой.

1 Ответ

1 голос
/ 11 июля 2019

Синхронизированы ли временные файлы, созданные с помощью mkstemp, на диск?

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

Что мне нужно, так это гарантировать, что такой файл не будет загружать жесткий диск.Я не могу позволить, чтобы это было записано на диск, даже если это происходит только раз в 5 секунд.Если я не могу получить такую ​​гарантию, я буду искать другой путь.

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

Что касается более крупной проблемы,

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

По умолчанию вновь созданные файлы наследуют тип SELinux своего родительского каталога.Ваши клиенты Wayland, по-видимому, не имеют достаточных прав для изменения меток SELinux создаваемых ими файлов, но вы должны иметь возможность административно создавать каталог там, где вам нравится, с меткой, соответствующей вашим потребностям.Например, вы можете создать подкаталог /dev/shm для этой цели (при каждой загрузке), а chcon ned иметь соответствующую метку.Если клиенты создают там свои временные файлы, они должны наследовать выбранный вами тип SELinux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...