Все ли экземпляры tmpfs в Linux имеют общий пул памяти?
У меня есть встроенная система Linux, и она имеет несколько монтировок tmpfs, определенных в fstab. Некоторые из этих монтирований участвуют в systemd.
Заказчик спрашивает, почему не существует единого крепления для всех нестабильных "RAM FS".
Вопросы:
- Выделена ли физическая память для всех экземпляров tmpfs из одного и того же общего источника (кеш или что-то еще), чтобы нам не приходилось управлять этим вручную?
- Когда файлы на одном монтировании tmpfs удалены, может ли память быть повторно использована другими монтируемыми файлами?
- Существуют ли варианты Linux (или параметры конфигурации), где память для tmpfs распределяется статически?
- Распределяет ли tmpfs пространство виртуальной памяти в ядре или потребляет другие ценные ресурсы, пропорциональные определенному размеру tmpfs?
1 ответ
Цитаты из man tmpfs.
The tmpfs [...] contents reside in virtual memory.
Виртуальная память - большая тема, вы можете просматривать ее в сети. Источниками для физической памяти могут быть ОЗУ (я не знаю, считаете ли вы отдельные модули ОЗУ как разные источники) или из раздела подкачки или из любого другого источника, если вы пишете свой драйвер для него. Виртуальная память построена на этом. Память может быть сжата "на лету" zswap и иметь больше возможностей (например, удаление дублирования KSM и т. Д.), Поэтому 5 МБ виртуальной памяти не равно 5 МБ физической памяти. Я предполагаю, что каждая точка монтирования tmpfs имеет свое собственное адресное пространство виртуальной памяти, но я думаю, что это действительно реализация.The [tmpfs] consumes only as much physical memory and swap space as is required to store the current contents of the filesystem.
,Я действительно не понимаю этого. Я не знаю, что означает "статическое распределение" на уровне tmpfs/virtual memory. Я предполагаю, что вы можете написать свое собственное ядро, которое не добавляет указанный модуль ОЗУ в пул памяти или создает пул памяти только для этого модуля ОЗУ, и написать свой собственный драйвер ядра, который использует указанный модуль ОЗУ для ваших целей, который затем имитировать TMPFS.
-
4.1. Да, драйвер tmpfs выделяет виртуальную память из ядра.
4.2.
size=bytes Specify an upper limit on the size of the filesystem.
, Только настолько большие ресурсы в tmpfs. При желании вы можете указать верхний предел. Я предполагаю, что драйвер ядра tmpfs также потребляет некоторую память во время загрузки, но это незначительно.Существует не только одна точка монтирования для tmpfs из-за грануляции разработчиков и программного обеспечения на вашем компьютере. Если я напишу приложение, которое будет хранить большие куски файлов в памяти, я буду монтировать tmpfs только для моего приложения. Если вы напишите другое приложение, вы смонтируете другое tmpfs только для вашего приложения. Таким образом, мы не будем писать вместе в одной папке, у нас могут быть одинаковые имена файлов для разных приложений. Но стандартным способом является использование
/tmp
каталог как временное место для файлов (POSIX.1-2008) и использовать функцию какmktemp
для создания файлов и папок там, так что на самом деле на ПК установлены один или два tmpfs.Если вы имеете в виду proc, sysfs, cgroup или т.п.
devtmpfs
(см. Udevd) и другие, они неtmpfs
и это отдельная тема.