Что такое виртуальная файловая система
Перейти к содержимому

Что такое виртуальная файловая система

Записки IT специалиста

Linux — начинающим. Что такое пространства подкачки и как они работают

  • Автор: Уваров А.С.
  • 22.04.2022

linux-swap-000.pngПодкачка, она же swap или своп — понятие знакомое каждому, вне зависимости от того с каким семейством ОС приходится работать. Да и представление о процессе вроде бы имеется. Именно, что «вроде бы», если спросить, как работает пространство подкачки, то услышим стандартные фразы про недостаток памяти и сброс второстепенных страниц на диск. А можно и вообще услышать, что памяти сегодня много и подкачка не нужна. Так ли это на самом деле или происходящие процессы гораздо более глубоки? Давайте разбираться.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Начнем с того, что процессор может исполнять код и обрабатывать данные только после их помещения в оперативную память (далее просто память), которая организована в виде набора адресуемых сегментов — страниц. Минимальный размер страницы для 32-битного процессора x86 — 4 КБ, современные системы могут работать со страницами большего размера.

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

Собственно, для системы нет никакой разницы, где находится требуемая страница: в памяти — хорошо, в пространстве подкачки — придется предварительно считать ее оттуда в память. Чтение с дисков — операция медленная (по сравнению с доступом к памяти) и поэтому вы можете заметить, что, развернув свернутое приложение приходится некоторое время подождать пока оно начнет нормально работать и при этом идет интенсивный обмен с диском.

Конечно, тормоза многих раздражают, но лучше пусть система время от времени тормозит, нежели глухо виснет только потому, что вы случайно исчерпали всю доступную память. Это самые общие черты, которые знает практически каждый, а вот дальше уже идут тонкости.

Особенности использования памяти в Linux

Управление памятью — сложная тема, поэтому мы будем использовать максимально упрощенную модель, достаточную для понимания происходящих процессов. Начнем с памяти приложений, это просто и понятно — при запуске приложение загружает в память собственный код, код связанных библиотек, обрабатываемые данные. Именно этот объем памяти мы видим, как занятый в простых утилитах, таких как Системный монитор.

linux-swap-001.png

Чем больше мы запускаем приложений и чем больше данных они обрабатывают — тем выше будет объем занимаемой ими оперативной памяти, остальную память принято считать свободной, но это не так.

Почему? Обратимся к устройству файловой системы Linux, которая реализована в виде отдельного уровня абстракции — виртуальной файловой системы (VFS), которая позволяет работать с самыми различными носителями и физическими файловыми системами абсолютно прозрачно для ОС и приложений. Когда программа хочет что то прочитать или записать на диск, то ей абсолютно все равно что это такое: быстрый SSD с ext4 или флешка с FAT32, она обращается к VFS, а именно та уже через драйвер файловой системы осуществляет запись или чтение с нее.

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

Фактически за использование оперативной памяти в Linux постоянно конкурируют между собой приложения и кеш VFS, при этом однозначно отдать кому-то предпочтения нельзя, любая крайность будет негативно влиять на производительность.

Если мы возьмем более профессиональные инструменты, то сможем увидеть, что значительный объем «свободной» памяти используется под кеш.

linux-swap-002.png

А что будет, если оперативной памяти станет не хватать? Самый простой вариант — сбросить кеш, это можно сделать быстро и без особых затрат. Но это не всегда хороший вариант, да и как быть, если памяти не хватает VFS-кешу? Выгрузить какое-то приложение нельзя, для этого потребуется завершить процесс, что делать? И тут на помощь приходят пространства подкачки, зачем закрывать приложение, если можно выгрузить его страницы на диск, особенно если это приложение в данный момент не активно. Таким образом мы можем выделить нужное количество памяти под VFS-кеш без ущерба для производительности.

Именно этим объясняется использование пространств подкачки при наличии «свободной» оперативной памяти, этот момент приводит в недоумение многих начинающих администраторов. Но если же мы заглянем немного глубже, то увидим, что на самом деле «свободная» память далеко не свободна.

Проведем небольшой эксперимент. На его начало у нас было открыто и свернуто несколько приложений, включая браузер и графический редактор GIMP с загруженным в него 4К изображением. Посмотрим расклад по памяти:

linux-swap-003.png

Итак: занято 2,36 ГБ, используется кешем 1,3 ГБ и в подкачке 578 МБ. Теперь распакуем какой-нибудь достаточно большой архив, в нашем случае около 1 ГБ включающий около сотни файлов различных типов и размеров. И снова посмотрим на статистику:

linux-swap-004.png

А здесь мы увидим достаточно неожиданную картину: объем занимаемой памяти уменьшился, зато объем выделенный под кеш вырос, так же часть страниц была сброшена в своп. Если взять калькулятор и выполнить грубые прикидки, то увидим, что размер кеша вырос примерно на 400 МБ, часть этой памяти была взята из небольшого количества свободной, а другая часть была освобождена путем вытеснения части страниц в подкачку.

Благодаря этому система быстро выполнила требуемую дисковую операцию, но потом мы испытали некоторую задержку разворачивая GIMP. Но это вполне разумная плата за сохранение общей производительности системы.

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

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

Swappiness

Это параметр sysctl, задающийся в файле /etc/sysctl.conf и позволяющий установить приоритеты доступа к оперативной памяти. Он может принимать значения от 0 до 200, значение по умолчанию равно 60. Что это означает? При значении равным 100 считается что стоимость подкачки и стоимость дискового ввода-вывода равны и поэтому подкачка будет использоваться всегда, если кешу VFS требуется место в памяти, но точно также кеш будет сбрасываться, если память понадобилась приложениям.

При значениях менее 100 память приложений имеет приоритет, так при значении в 60 получается, что стоимость подкачки на 40% дороже, чем дисковый ввод-вывод и система будет стараться не свопить до определенного предела. Очень грубо этот параметр в диапазоне от 0 до 100 можно рассматривать как минимальный процент свободной оперативки при котором начнет работать подкачка.

При значении в 60 система начнет вытеснять страницы приложений в подкачку после того, как останется свободной менее 60% памяти, при 100 — подкачка будет работать всегда. Если выставить значение в ноль, то это не отключит подкачку, но она не будет использоваться до последнего, в критической ситуации система все-таки начнет сбрасывать страницы на диск, чтобы сохранить приемлемый уровень производительности.

Значения свыше 100 куда более интересны, хотя на первый взгляд практического смысла в них нет. Однако это не так, допустим у вас есть система, которая грузится с быстрого NVMe диска, но основная работа происходит с данными на HDD. Скорость современных жестких дисков доходит до 200 МБ/с, а даже самый простой NVMe свободно дает от 1500 МБ/с. Так может лучше скинуть своп на NVMe, чем вытеснять VFS-кеш?

Именно так, поэтому берем в руки калькулятор и считаем. По грубым прикидкам NVME в 8 раз быстрее. Поэтому:

Вычислить x несложно, его значение будет 22,22, теперь можем узнать 8x — это будет 177, именно это значение мы должны задать в опции swappiness если хотим агрессивно сбрасывать страницы приложений в быстрый своп ради сохранения высокой реальной производительности.

Например, вы работаете с виртуальными машинами VirtualBox расположенными на HDD, поэтому вам более интересно вытеснить в пространство подкачки данные приложений, скажем браузера, чем потерять кеш VFS, который вызовет тормоза в виртуальной машине. При этом NVMe обеспечит быструю скорость извлечения данных, и вы не почувствуете дискомфорта переключившись на браузер.

VFS cache pressure

Это еще одно значение sysctl, оно означает приоритет кеша VFS перед страницами приложений. Значение в 100% обозначает паритет, дисковый кеш и приложения имеют равный вес и вытесняются в зависимости от иных настроек.

Но если мы хотим это изменить, то нужно в /etc/sysctl.conf задать опцию

При увеличении этого числа мы получим более агрессивную политику ядра по отношению освобождения памяти занятой под дисковый кеш. Если мы хотим в 10 раз активнее освобождать кеш VFS, то следует задать значение опции равным 1000, в 100 раз — 10 000. При уменьшении значения ядро, наоборот будет избегать освобождения памяти занятой под кеш. И если установить данную опцию в ноль, то кеш VFS никогда не будет освобождаться, что может спровоцировать опасную ситуацию, когда память в системе действительно закончится.

Мы не рекомендуем изменять данный параметр без четкого понимания что именно вы делаете и зачем.

Создание и использование пространств подкачки

Классическим для Linux является использование раздела подкачки, который выделяется, обычно, в конце диска и особым образом размечается. Для этого используется особый тип файловой системы 82 (область подкачки Linux). Если вы создали раздел подкачки при установке системы, то больше ничего делать не нужно. Если же вы хотите добавить в подкачку еще один раздел, скажем sde5, то выполните одну простую команду:

Затем включите подкачку на этом разделе, перезагрузка системы не потребуется:

Чтобы автоматически подключать раздел подкачки при монтировании добавьте в /etc/fstab строку:

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

Затем изменим запись монтирования в fstab следующим образом:

Где вместо <UUID> подставьте полученный на предыдущем шаге идентификатор.

Современные системы все чаще отказываются от отдельного раздела подкачки отдавая предпочтению файлу. Это имеет ряд преимуществ в простоте и гибкости использования — изменить размер файла гораздо легче чем раздела. В остальном никакой разницы между ними нет, файл и раздел подкачки работают одинаково.

Для создания файла можно воспользоваться командой:

Или старым добрым dd:

В обоих случаях мы создадим файл размером 4 ГБ, сразу ограничим права на него:

А дальше точно также:

Для его постоянного монтирования добавьте в /etc/fstab запись:

Кстати, при помощи файла можно временно увеличить пространство подкачки, например, для выполнения какой-то ресурсоемкой разовой работы. Просто создайте и подключите еще один файл, а закончив — отключите его:

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

Для этого добавим в опции монтирования еще один параметр — приоритет: минимальный приоритет 0, максимальный 32767. Чем выше приоритет, тем предпочтительнее использование данного пространства, для нескольких пространств с одинаковым приоритетом будет использоваться чередование.

Таким образом вы можете создать пространство подкачки из множества частей и достаточно тонко настроить их использование. Скажем, небольшой файл на NVMе с максимальным приоритетом, файл побольше на обычном SSD и большой файл на HDD, приоритет которого установлен на минимум.

Пространства подкачки и SSD

В настоящий момент SSD не роскошь, а основной тип накопителя для ПК, рабочих станций и серверов и поэтому нужно использовать их возможности на полную. Советы убирать с SSD подкачку, временные файлы и т.д. и т.п. кроме как вредными назвать нельзя. Поэтому размещать подкачку на SSD не только можно, но и нужно. Единственный момент, для разделов подкачки следует включить использование TRIM, для этого в опции монтирования добавьте discard:

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

Спящий режим и пространства подкачки

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

При включении, если система обнаруживает в подкачке сохраненный образ памяти, то вместо нормальной загрузки начинается его восстановление. Таким образом вы получите полностью рабочее состояние компьютера со всеми открытыми программами и документами.

Использование спящего режима предъявляет особые требования к размеру пространств подкачки, они должны быть способны вместить полный объем оперативной памяти, настройки устройств и собственное содержимое подкачки, если оно используется системой (а как мы видели — оно используется).

Кроме того, при большом объеме оперативной памяти сброс ее на диск при выключении и восстановление при включении может занимать продолжительное время и может оказаться, что быстрее закрыть приложения и нормально выключить компьютер, а по включении просто заново все открыть.

Какой размер файла подкачки выбрать?

Единого мнения на этот счет не существует, но есть определенные наработанные практики, которые позволяют дать рекомендации. Наиболее подробно они приведены в документации Fedora и мы приведем именно их:

Объем ОЗУ в системе Рекомендуемый размер подкачки При использовании спящего режима
Менее 2 ГБ 2 х ОЗУ 3 х ОЗУ
2 ГБ — 8 ГБ ОЗУ 2 х ОЗУ
8 ГБ — 64 ГБ 0,5 х ОЗУ 1,5 х ОЗУ
Более 64 ГБ зависит от нагрузки спящий режим не рекомендуется

Но приведенные значения не догма и могут быть пересмотрены исходя из реальных нагрузок. Так если использовать 4 ГБ подкачки для системы с объемом ОЗУ 2 ГБ выглядит нормально, то выделять 32 ГБ для системы с 64 ГБ ОЗУ выглядит излишеством, поэтому изучите реальный режим работы системы и скорректируйте размер пространства подкачки исходя из реальных запросов. Именно в этой ситуации и становятся удобны файлы подкачки — их размер очень легко менять.

Заключение

Конечно же это не все возможности, которые предоставляют пространства подкачки в Linux, многое оставлено за кадром просто потому, что объем статьи не позволяет все это вместить. Но приведенные данные являются необходимым минимумом для каждого системного администратора, который выбрал Linux как одну из используемых операционных систем.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.

Дополнительные материалы:

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал

Глава 12 Виртуальная файловая система

Виртуальная файловая система (Virtual File System), иногда называемая виртуальным файловым коммутатором (Virtual File Switch) или просто VFS, — это подсистема ядра, которая реализует интерфейс пользовательских программ к файловой системе. Все файловые системы зависят от подсистемы VFS, что позволяет не только сосуществовать разным файловым системам, но и совместно функционировать. Это также дает возможность использовать стандартные системные вызовы для чтения и записи данных на различные файловые системы, которые находятся на различных физических носителях, как показано на рис. 12.1.

Рис. 12.1. Подсистема VFS в действии: использование команды cp(1) для копирования данных с жесткого диска, на котором монтируется файловая система, ext3, на гибкий диск, на котором монтируется файловая система ext2

Читайте также

Глава 17 Объекты kobject и файловая система sysfs

Глава 17 Объекты kobject и файловая система sysfs Унифицированная модель представления устройств — это существенно новая особенность, которая появилась в ядрах серии 2.6. Модель устройств — это единый механизм для представления устройств и описания их топологии в системе.

Глава 2 Файловая система

Глава 2 Файловая система Все, с чем работает система UNIX, она воспринимает в виде файла. Это не такое уж упрощение, как может показаться на первый взгляд. Когда разрабатывалась первая версия системы, даже прежде, чем ей дали имя, все усилия сосредоточились на создании

1.3.1 Файловая система

1.3.1 Файловая система Файловая система UNIX характеризуется:• иерархической структурой,• согласованной обработкой массивов данных,• возможностью создания и удаления файлов,• динамическим расширением файлов,• защитой информации в файлах,• трактовкой периферийных

16.5. Виртуальная файловая система VFS

16.5. Виртуальная файловая система VFS До сих пор наш рассказ о файловой системе касался только "статических", если можно так выразиться, составных частей файловой системы. Но, я думаю, вы понимаете, что все это хозяйство обслуживается какими-то программными модулями. Эти

7.2.2.1. Корневая файловая система и система инициализации

7.2.2.1. Корневая файловая система и система инициализации Итак, вы выбрали загрузку Linux. Загрузчик GRUB загрузит ядро, а затем передаст ему параметры и управление. Подробновесь процесс загрузки ядра рассматриваться здесь не будет. Вам достаточно знать следующее: ядру при

Глава 5 Файловая система Ubuntu

Глава 5 Файловая система Ubuntu Вполне возможно, вы хотя бы раз слышали словосочетание «дерево каталогов» применительно к организации расположения файлов на компьютере. Действительно, если представить файлы листьями, а директории — узлами веток, то файловая система похожа

Файловая система

Файловая система Теперь рассмотрим несколько команд rundll32.exe, предназначенных для работы с файловой системой Windows. С их помощью можно как создавать файлы, так и удалять уже созданные файлы и каталоги Windows, но нельзя указать содержимое

Файловая система

Файловая система Настройки файловой системы являются критически важными для оптимизации скорости работы компьютера. Как правило, если параметры реестра, описывающие работу файловой системы, не оптимизированы, то возможно снижение скорости работы компьютера на 10-70%. Все

Файловая система

Файловая система Теперь скажем несколько слов о содержимом файловой системы Windows. Как правило, здесь также есть над чем поработать, особенно если места на жестком диске мало. Автор лишь приведет определенные пути к каталогам и ветви реестра, а вы сами решайте, нужны ли они

Глава 3 Файловая система

Глава 3 Файловая система Одно из самых важных условий работы с документами – их хранение. Представьте, как сложно было бы получать книги в библиотеке, если бы они не были разложены по стеллажам и полкам. Если сваливать все бумаги в одну кучу, то уже через несколько дней

Глава 7 Файловая система /proc

Глава 7 Файловая система /proc Попробуйте запустить команду mount без аргументов — она выдаст список файловых систем, смонтированных в настоящий момент. Среди прочих строк будет и такая:none on /proc type proc (rw)Она указывает на специальную файловую систему /proc. Поле none говорит о том,

Глава 5 Файловая система Linux

Глава 5 Файловая система Linux 5.1. Различные файловые системы Linux поддерживает много различных файловых систем. Начинающий пользователь просто теряется, когда видит такое многообразие выбора, — ведь в качестве корневой файловой системы доступны: ext2, ext3, ext4, XFS, ReiserFS,

6.6.2. Файловая система FAT

6.6.2. Файловая система FAT Файловая система FAT используется ОС MS DOS и ОС Windows для упорядочения файлов и управления ими. В основу данной файловой системы положена таблица размещения FAT (File Allocation Table), которая представляет собой структуру данных, создаваемую ОС при

6.6.2.1. Файловая система FAT 16

6.6.2.1. Файловая система FAT 16 Файловая система FAT 16 поддерживается ОС MS DOS, Windows 95, Windows 98, Windows 2000, а также некоторыми версиями ОС UNIX.Цифра 16 в названии файловой системы указывает на число бит (двоичных разрядов), необходимых для хранения информации о номерах кластеров,

Файловая система для SSD

Файловая система для SSD LinuxFormat, #169 (апрель 2013)За последние лет 10-15 мы неоднократно читали победные реляции об успехах в компьютерной области. Однако настоящим успехом последних лет можно считать только начало широкого распространения SSD-накопителей: впервые за всю историю

Виртуальные файловые системы (VFS). Реализации файловых систем. Сетевая файловая система NFS

Презентацию к данной лекции Вы можете скачать здесь.

Введение

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

Виртуальные файловые системы

Виртуальные файловые системы (VFS) обеспечивают объектно-ориентированный способ реализации файловых систем.

VFS обеспечивает единый интерфейс системных вызовов ( API ) для различных типов файловых систем, которые могут быть очень разными по своей реализации, включая сетевые файловые системы .

Данный API является набором операций над самой VFS, а не над каким-либо специфическим типом файловых систем.

Схема организации виртуальной файловой системы изображена на рис. 20.1.

Схема организации виртуальной файловой системы.

Реализация директорий

Директория – центральная системная структура в файловой системе, на которой основан поиск файлов. Поэтому эффективная реализация директорий особенно важна.

Наиболее простой метод реализации директорий — линейный список имен с указателями на блоки данных. Такая реализация просто программируется, однако требует большого времени выполнения.

Более эффективный метод реализации — хеш-таблица – линейный список с хеш-оглавлением и подразделением на (небольшие) списки элементов с одним и тем же значением хеш-функции . Такой метод уменьшает время поиска в директории.

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

Методы размещения файлов

Смежное размещение.Термин метод размещения означает метод, с помощью которого размещаются блоки файла во внешней памяти. Различаются следующие основные методы размещения файлов:

  • Смежное размещение
  • Ссылочное размещение
  • Индексированное размещение.

При смежном размещении каждый файл занимает набор смежных блоков на диске. Преимущество данного метода — простота: требуется хранить только одну ссылку (номер блока) и длину (число блоков). Другим преимуществом является возможность произвольного доступа.

Недостатки данного метода следующие:

  • возможны потери дисковой памяти из-за фрагментации (метод аналогичен общей задаче динамического распределения памяти , рассмотренной ранее);
  • невозможность увеличения размера файла.

Смежное размещение файлов иллюстрируется на рис. 20.2.

Смежное размещение файлов.

Файловые системы, основанные на расширениях

Многие современные файловые системы, — например, Veritas File System, или Vx-FS – основная файловая система в ОС HP-UX фирмы Hewlett-Packard, — используют модифицированное смежное размещение файлов. Дисковые блоки в такой системе размещаются в расширениях (extents).Расширение – это смежный блок на диске. Файл состоит из одного или нескольких расширений. Таким образом, если длина файла не увеличивается, он хранится в виде одной смежной области внешней памяти, что обеспечивает максимальную эффективность доступа. В случае увеличения длины файл представляется списком из основной части и расширений.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *