Tmpfs

Tmpfs - тимчасове файлове сховище у багатьох Unix-like ОС. Призначена для монтування файлової системи, але розміщується в ОЗУ замість фізичного диска. Подібна конструкція є RAM диском.


1. Семантика

Всі дані в Tmpfs є тимчасовими, в тому сенсі, що жодного файлу не буде створено на жорсткому диску. Після перезавантаження всі дані, що містяться в Tmpfs, будуть втрачені.

Пам'ять, яка використовується для Tmpfs, варіюється в розмірах залежно від кількості розміщених файлів в ній і може бути розширена за рахунок swap. Багато Unix дистрибутиви використовують Tmpfs за замовчуванням для розміщення / Tmp або для розділення пам'яті. Це можна побачити у виведенні команди df, наприклад:

 Filesystem Size Used Avail Use% Mounted on tmpfs 256M 688K 256M 1% / tmp 

2. Реалізації

2.1. SunOS / Solaris

SunOS 4 включала ранні розробки Tmpfs; вона вперше з'явилася в SunOS 4.0 в кінці 1987, разом з новим ортогональним управлінням адресним простором, що дозволяє розмістити будь-який об'єкт в пам'яті. [1] [2]

У Solaris / Tmp розміщувалася в Tmpfs, що стало стандартом у Solaris 2.1, що вийшла в листопаді 1994. Висновок команди df в Solaris показував swap як файлову систему будь-якого Tmpfs розділу:

 # Df-k Filesystem kbytes used avail capacity Mounted on swap 601592 0 601592 0% / tmp / test 

2.2. Linux

Tmpfs став підтримуватися Linux з версії 2.4 і більше. [3] Tmpfs (так само відома як shmfs) відрізняється від Linux RAM диска динамічним виділенням пам'яті і переміщенням невикористовуваних сторінок в swap. RAMfs, навпаки, не використовує swap (це може бути як перевагою, так і недоліком). До того ж, MFS і деякі старі версії RAMfs, не змінювали свій розмір динамічно, а залишалися того розміру, як були примонтировать.

Використання Tmpfs, наприклад:

 mount-t tmpfs-o size = 1G, nr_inodes = 10k, mode = 0700 tmpfs / space 

яка буде зростати до 1 GiB з 10240 Инод в ОЗУ / swap і доступна тільки власникові директорії / space. Максимальний розмір файлової системи може бути змінений "на льоту", наприклад:

 mount-o remount, size = 2G / space 

У Tmpfs можуть бути розміщені будь-які директорії, що зберігають тимчасові дані, що видаляються при перезавантаженні системи: / var / lock, / var / run, / tmp та ін Крім того, для зменшення кількості дискових операцій (з метою максимального підвищення продуктивності системи або економії ресурсу твердотільних накопичувачів) у Tmpfs іноді розміщують директорії, які зазвичай зберігають дані між перезавантаженнями, наприклад, / var / tmp (ця директорія нерідко очищається, хоча рекомендовано цього не робити [4]) або директорії кешування деяких програм (інтернет-браузерів).


2.3. BSD

Tmpfs була реалізована в NetBSD версії 4.0, 10 вересня 2005 [5]. У FreeBSD 7.0 з'явилася портована з NetBSD Tmpfs. [6] У DragonFly BSD, з версії 2.5.1, теж мається портована з NetBSD реалізація Tmpfs.

2.4. Microsoft Windows

У Windows мається приблизний аналог Tmpfs у вигляді "тимчасових файлів". Файли, створені з атрибутом FILE_ATTRIBUTE_TEMPORARY та прапором FILE_FLAG_DELETE_ON_CLOSE розміщуються в ОЗУ і записуються на жорсткий диск тільки якщо системі не вистачає оперативної пам'яті. Таким чином, "тимчасові файли" аналогічні Tmpfs, за винятком того, що при нестачі пам'яті вони записуються за вказаною при їх створенні шляху, а не в файл підкачки. Цей метод часто використовується на серверах з TransmitFile для підготовки контенту і його буферизацией перед відправкою клієнту.


Примітки

  1. Peter Snyder tmpfs: A Virtual Memory File System (PDF). Статичний з першоджерела 1 травня 2012.
  2. Hal L. Stern SunOS 4.1 Performance Tuning ( GZipped PostScript). Статичний з першоджерела 1 травня 2012 року.
  3. Daniel Robbins Advanced FileSystem implementor 's Guide (September 1, 2001). Статичний з першоджерела 1 травня 2012. Стаття, що описує реалізації в Linux
  4. Filesystem Hierarchy Standard
  5. Julio M. Merino Vidal NetBSD-SoC: Efficient memory file-system (February 24, 2006). Статичний з першоджерела 1 травня 2012.
  6. Derek Morr FreeBSD tmpfs manpage (December 2, 2008). Статичний з першоджерела 1 травня 2012.