Что такое виртуальная память?
Виртуальная память — это способ представления вашей памяти, абстрагированный от физической памяти на вашем компьютере. Он использует как вашу оперативную память, так и место для хранения, будь то традиционный жесткий диск или твердотельный накопитель.
В Linux это делается на уровне ядра и оборудования. ЦП имеет аппаратную часть, называемую блоком управления памятью (MMU), которая преобразует адреса физической памяти в виртуальные. Эти адреса не зависят от того, где они физически находятся на машине. Эти адресные пространства известны как «страницы» и могут находиться в оперативной памяти, на жестком диске или SSD. ОС видит эти адреса как один большой пул памяти, известный как «адресное пространство».
Виртуальная память использует тот факт, что не вся память, используемая теоретически, используется постоянно. Программы в памяти разбиваются на страницы, а те части, которые ядро считает ненужными, «выгружаются» или перемещаются на жесткий диск. Когда они нужны, их можно «поменять местами» или вернуть обратно в оперативную память.
Пространство, используемое для виртуальной памяти на диске, известно как «резервное хранилище» или «пространство подкачки». В мире Windows это обычно реализуется в виде файла, известного как «файл подкачки». Это также возможно в Linux, но гораздо чаще используется выделенный раздел диска.
Файлы подкачки в Linux обычно зарезервированы для минимальных или встроенных систем, и последние часто работают без виртуальной памяти, потому что встроенные ОС должны быть небольшими.
Результат виртуальной памяти заключается в том, что можно запускать большие программы, используя больше памяти, чем физическая оперативная память на вашем компьютере, подобно тому, как кредитная карта позволяет вам совершать крупные покупки на сумму, превышающую сумму на вашем банковском счете. Как и кредитная карта, виртуальная память полезна, когда она вам нужна, но вы не хотите чрезмерно ее использовать.
Виртуальная память также позволяет разработчикам создавать приложения, не зная, как организована память компьютера.
Основным историческим недостатком виртуальной памяти было то, что жесткие диски работали медленнее, чем оперативная память. Если на машине недостаточно оперативной памяти, система может бесконечно загружать и выгружать страницы — процесс, известный как «пробуксовка». Это не так важно для современных ПК с большим объемом оперативной памяти и более быстрыми твердотельными накопителями, заменяющими механические жесткие диски, но об этом все же следует помнить.
Разделы подкачки Linux
Как упоминалось ранее, обычный метод настройки виртуальной памяти в Linux заключается в использовании выделенного раздела диска. Утилита установки проверит ваше оборудование и предложит схему разбиения, включающую раздел подкачки.
Вы также можете добавить разделы подкачки после установки. Если вы хотите добавить новый раздел на существующий диск, вам придется использовать инструмент неразрушающего создания разделов, например GParted. Убедитесь, что вы выбрали «Linux swap» в качестве файловой системы для вашего раздела.
Сделайте резервную копию важных данных перед переразметкой диска.
После создания раздела используйте команду mkswap для форматирования раздела.
sudo mkswap /dev/sdX
Теперь вам нужно отредактировать файл /etc/fstab от имени пользователя root, чтобы добавить раздел подкачки. Эта строка, добавленная в файл, установит раздел подкачки, который будет монтироваться во время загрузки:
/dev/sdX none swap defaults 0 0
Теперь используйте команду swapon, чтобы активировать новое пространство подкачки, где sdX — это имя вашего раздела подкачки:
sudo swapon /dev/sdX
Использование файлов подкачки в Linux
В Linux легко настроить файл подкачки с помощью командной строки. Вы можете сделать это, если не хотите переразбивать диск или редактировать файл /etc/fstab. Один из способов — использовать fallocate:
Например, чтобы создать файл подкачки размером 2 ГБ:
sudo fallocate -l 2G /path/to/swapfile
В качестве альтернативы вы можете использовать команду dd для создания файла подкачки.
sudo dd <span class="hljs-keyword">if</span>=<span class="hljs-regexp">/dev/</span>zero <span class="hljs-keyword">of</span>=<span class="hljs-regexp">/path/</span>to/swapfile bs=<span class="hljs-number">1024</span> count=<span class="hljs-number">2048</span>
Убедитесь, что вы правильно используете команду dd, так как неправильное указание входного и выходного файлов может привести к потере данных. Fallocate является предпочтительным методом по этой причине.
Устройство /dev/zero – это специальное устройство, которое выводит «0». Что делает эта команда dd, так это создает пустой двухгигабайтный блочный файл, используя 1024-килобайтные блоки, подходящие для использования в качестве пространства подкачки.
Затем вы можете использовать команды mkswap и swapon с файлом подкачки так же, как и с разделом подкачки:
sudo mkswap /path/to/swapfile
sudo swapon /path/to/swapfile
Вы можете задаться вопросом, когда вы должны использовать файл подкачки или выделенный раздел для вашего пространства подкачки. Выбор прост: в большинстве случаев следует использовать раздел. Это лучший выбор для рабочего стола Linux или сервера. Схема разделов, предложенная установщиком, обычно подходит для однопользовательского рабочего стола Linux.
Возможно, вы захотите использовать файл подкачки, если вы используете Linux на виртуальной машине, в небольшой встроенной системе или просто не хотите перераспределять существующую систему Linux.
Сколько места для подкачки?
В течение многих лет стандартным советом относительно того, сколько места для подкачки необходимо, является удвоение объема физической памяти. С большими дисками и объемами памяти, которыми оснащены даже самые дешевые ПК, это правило может оказаться под вопросом.
Во многих системах, если вы отметите top или htop, вы можете даже заметить, что ваше пространство подкачки вообще не используется, если вы настроили свою систему таким образом.
Тем не менее, удвоение физической памяти — это хорошая отправная точка и страховой полис, если вы предъявляете более высокие требования к памяти. При необходимости вы можете вносить изменения в свою систему. Если ваша система использует всю оперативную память, компьютер может столкнуться с проблемами производительности при использовании виртуальной памяти.
Компьютер может постоянно включаться и выключаться, процесс, известный как зависание, из-за чего он выглядит невосприимчивым. Если у вас все еще есть механический жесткий диск, вы часто можете слышать его постоянный доступ.
В наши дни это гораздо меньшая проблема, поскольку объем оперативной памяти даже на самых дешевых ПК более чем достаточен, а скорость твердотельных накопителей намного выше, чем у старых жестких дисков. Это все еще то, о чем вы должны знать.
Самый простой способ исправить это — просто добавить больше оперативной памяти на ваш компьютер. Если это невозможно, вы можете попробовать настроить «подкачку» ядра Linux.
Число подкачки определяет, насколько ядро погружается в виртуальную память. Он варьируется от 0 до 100. Установка его на 0 означает, что Linux вообще не будет меняться, а на 100 он будет меняться при каждой возможности. По умолчанию в большинстве систем 60.
Чтобы временно изменить swappiness, используйте команду sysctl:
sudo sysctl vm.swappiness=20
«20» в этой команде будет номером подкачки до перезагрузки. Чтобы изменить его навсегда, отредактируйте файл /etc/sysctl.conf от имени пользователя root и поместите строку «vm.swappiness=[номер подкачки]», где «[номер подкачки]» — это нужный вам номер подкачки. Это будет временное решение, пока вы не сможете установить больше оперативной памяти.
Виртуальная память обеспечивает бесперебойную работу вашей системы Linux
Виртуальная память — это компонент современных операционных систем, в том числе Linux, который обеспечивает бесперебойную работу вашего компьютера. Вы можете использовать файл подкачки, но обычно используется выделенный раздел. Вам не нужно много думать об этом, но разделы подкачки Linux и файлы подкачки легко настроить и устранить неполадки.
Многие из этих советов применимы и к другим системам, включая Windows, даже если методы настройки виртуальной памяти отличаются.