Все ли экземпляры tmpfs в Linux имеют общий пул памяти? - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть встроенная система Linux, и в ней есть несколько монтировок tmpfs, определенных в fstab. Некоторые из этих монтировок задействованы в systemd.

Заказчик спрашивает, почему не существует единого крепления для всех энергозависимых компонентов RAM RAM.

Вопросы:

  1. Выделена ли физическая память для всех экземпляров tmpfs из одного и того же общего источника (кеш или что-то еще), чтобы нам не приходилось управлять этим вручную?
  2. Когда файлы на одном монтировании tmpfs удаляются, может ли память быть повторно использована другими монтировками?
  3. Существуют ли варианты Linux (или параметры конфигурации), где память для tmpfs выделяется статически?
  4. Распределяет ли tmpfs пространство виртуальной памяти в ядре или использует другие ценные ресурсы, пропорциональные определенному размеру tmpfs?

1 Ответ

0 голосов
/ 17 сентября 2018

Цитаты из man tmpfs .

  1. The tmpfs [...] contents reside in virtual memory. Виртуальная память - это большая тема, вы можете просматривать ее в сети.Источниками физической памяти могут быть ОЗУ (я не знаю, считаете ли вы отдельные модули ОЗУ как разные источники) или из раздела подкачки или из любого другого источника, если вы пишете свой драйвер для него.Виртуальная память построена на этом.Память может быть сжата "на лету" zswap и иметь больше возможностей (например, удаление дублирования KSM и т. Д.), Поэтому 5 МБ в виртуальной памяти не равно 5 МБ в физической памяти,Я думаю, что каждая точка монтирования tmpfs имеет свое собственное адресное пространство виртуальной памяти, но я думаю, что это действительно реализация.

  2. The [tmpfs] consumes only as much physical memory and swap space as is required to store the current contents of the filesystem..

  3. Я действительно не понимаю этого.Я не знаю, что означает «статическое распределение» на уровне tmpfs / virtual memory.Я предполагаю, что вы можете написать свое собственное ядро, которое не добавляет указанный модуль RAM в пул памяти или создает пул памяти только для этого модуля RAM, и написать свой собственный драйвер ядра, который использует указанный модуль RAM для ваших целей, который затемсмоделировать tmpfs.

  4. -

    4.1.Да, драйвер tmpfs выделяет виртуальную память из ядра.

    4.2.size=bytes Specify an upper limit on the size of the filesystem..Только настолько большие ресурсы в tmpfs.При желании вы можете указать верхний предел.Я предполагаю, что драйвер ядра tmpfs также потребляет некоторую память при загрузке, но это ничтожно мало.

  5. Существует не одна точка монтирования для tmpfs из-за грануляции разработчиков и программного обеспечения на вашем компьютере.компьютер.Если я напишу приложение, которое будет хранить большие куски файлов в памяти, я буду монтировать tmpfs только для моего приложения.Если вы напишите другое приложение, вы смонтируете другое tmpfs только для вашего приложения.Таким образом, мы не будем писать вместе в одной папке, у нас могут быть одинаковые имена файлов для разных приложений.Но стандартным способом является использование каталога /tmp в качестве временного места для файлов (POSIX.1-2008) и использование такой функции, как mktemp, для создания там файлов и папок, так что в действительности на диске смонтированы один или два tmpfs.ПК.

  6. Если вы имеете в виду proc , sysfs , cgroup или как devtmpfs (см. Udevd) и другие, они не tmpfs и являются отдельной темой.

...