могу ли я перебрать размер tmpfs - PullRequest
10 голосов
/ 30 августа 2011

Я пытаюсь использовать / dev / shm tmpfs для записи моих файлов. По умолчанию используется половина физической памяти без подкачки. Когда я записываю что-то, превышающее размер этого монтирования, выдается ошибка «На диске не осталось места».

Мой вопрос: разве не следует использовать пространство подкачки, а не делать ошибки? Есть ли способ, которым я могу позволить своему приложению использовать больше, чем выделено для tmpfs, возможно, с помощью параметра?

Что произойдет, если один из моих процессов запущен и использует почти все пространство в / dev / shm, а у меня запущен другой процесс (кроме / dev / shm), который также использует более 50% пространства ОЗУ ? Какой из них поменялся?

Например, допустим, моя общая физическая память составляет 40 ГБ, а tmpfs - 20 ГБ. Один из процессов использует / dev / shm и составляет около 20 ГБ. Теперь запущен еще один процесс, который занимает около 30 ГБ. Какой из процессов поменяется? Или это невозможно определить?

Ответы [ 2 ]

18 голосов
/ 30 августа 2011

tmpfs будет использовать пространство подкачки при необходимости (это может произойти, даже если размер tmpfs составляет половину размера ОЗУ, поскольку другие вещи тоже используют ОЗУ), а «половина ОЗУ» - это просто размер по умолчанию (довольно нормальный по умолчанию) файловой системы. Вы можете установить его на то, что хотите, при монтировании или перемонтировании, используя аргумент 'size':

Параметры монтирования для tmpfs

  size=nbytes

  Override  default  maximum  size of the filesystem.  The size is
  given in bytes, and rounded up to entire pages.  The default  is
  half  of  the memory. The size parameter also accepts a suffix %
  to limit this tmpfs instance to that percentage of your physical
  RAM:  the default, when neither size nor nr_blocks is specified,
  is size=50%

Если ваш дистрибутив использует fstab для монтирования tmpfs, вы можете добавить, например, «размер = 40G» там. Вы также можете перемонтировать его в любое время, используя:

mount -o remount,size=40G /dev/shm

Будьте осторожны, хотя. Если файлы в tmpfs занимают слишком много вашей виртуальной памяти (RAM + swap), приложения могут быть убиты (убийцей OOM), и вся система может выйти из строя.

Вернуться к вашим вопросам ...

Я не думаю, что легко определить, что будет заменено, так как AFAIK на этом уровне для Linux все (включая память данных процесса, кэшированные файлы на диске, файлы mmaped на диске, файлы tmpfs) - это то же самое, что и «виртуальный» объем памяти'. Linux может посчитать некоторые страницы более важными (недавно использованными), другие готовы к замене. Так что это может быть частью файла tmpfs, а часть другого процесса выгружена.

0 голосов
/ 03 октября 2018

Если вы переключитесь на ramfs, он будет динамически расти по мере необходимости .... пока не достигнет OOM.Будьте осторожны!

ramfs также не поменяются местами.

https://www.thegeekstuff.com/2008/11/overview-of-ramfs-and-tmpfs-on-linux/

В качестве дополнения к текущему ответу tmpfs будет использовать swap, нотолько до его текущего размера ограничения !!!То есть, если нагрузка на память высока, некоторые из монтирования tmpfs будут перенесены на диск, НО это не позволит ему превысить указанный предел.

...