Этот вопрос возник из-за шутки между коллегами по поводу увеличения производительности за счет перемещения файлов подкачки в tmpfs. Очевидно, что даже если это возможно, это не очень хорошая идея. Все, что я хочу знать, это можно ли сделать?
Я в настоящее время на Ubuntu 14.04, но я думаю, что процесс похож на большинстве машин Linux / Unix. Вот что я делаю:
> mkdir /mnt/tmp
> mount -t tmpfs -o size=10m tmpfs /mnt/tmp
> dd if=/dev/zero of=/mnt/tmp/swapfile bs=1024 count=10240
> chmod 600 /mnt/tmp/swapfile
> mkswap /mnt/tmp/swapfile
# So far, so good!
> swapon /mnt/tmp/swapfile
swapon: /mnt/tmp/swapfile: swapon failed: Invalid argument
Итак, на Linux или Unix (я заинтересован в любом решении), вы можете как-то настроить swap на файл / раздел, находящийся в ram? Есть ли способ обойти Invalid argument
ошибку, которую я получаю выше?
Опять же, просто хочу подчеркнуть, что я не ожидаю, что это решение реальной проблемы. Я думаю, это просто веселый эксперимент.
Ответы:
Конечно. На FreeBSD:
Это показывает, что в настоящее время у меня есть зашифрованный раздел подкачки 4G с зеркальной избыточностью. Я добавлю еще 4G без резервирования, без шифрования:
Сначала создайте 4G RAM-устройство (
md
) с памятью :Затем скажите
swapon
добавить это в пул доступных устройств подкачки иswapinfo
подтвердите, что у меня теперь 8G подкачки:источник
mdconfig(8)
содержит примечание, в котором опущена-o reserve
опция «это очень простой способ запаниковать систему». Он также отмечает, что тип может быть установлен,swap
что позволяет очень интересный сценарий системы, перемещающей страницы памяти в подкачку, которая сама находится в памяти! Есть даже опция-o force
для таких чайников, как я, которые хотят опустить «дополнительные проверки работоспособности». Посмеялся над этим.Это не должно быть возможно.
swapon
Системный вызов требуетreadpage
иbmap
(косвенно) вызовов, осуществляемых файловой системой:http://lxr.free-electrons.com/source/mm/swapfile.c?v=4.0#L2412
Но ни один из них не реализован tmpfs , такая запись отсутствует в соответствующем
address_space_operations
: http://lxr.free-electrons.com/source/mm/shmem.c?v=4.0#L3104По той же причине tmpfs не может держать циклическое монтирование, и ramfs также не будет работать (у него нет
bmap
вызова)источник
Из этой Q & A /superuser/539287/swapon-failed-invalid-argument-on-a-linux-system-with-btrfs-filesystem (оригинальный ссылочный сайт не отвечает):
Я подозреваю, что причиной несовместимости является «круговая зависимость». Из этой статьи: http://www.jamescoyle.net/knowledge/951-the-difference-between-a-tmpfs-and-ramfs-ram-disk :
Что было бы практически невозможно в вашем сценарии.
Это может сработать
ramfs
, хотя - у которого нет этой проблемы.источник
tmpfs
раздела в качестве раздела подкачки будет запускать и бесконечный цикл, когда машина начнет подкачку.Вы можете легко избежать проблем с отсутствующими функциями и перейти к tmpfs, хотя и немного косвенно:
В сочетании с zswap это выглядело как отличное решение для расширения памяти, пока мой RasPi4 почти не завис ничего полезного. Запущенный через ssh (до того, как это произошло) поверх не показал ничего выдающегося - казалось, было достаточно свободного места в оперативной памяти и подкачке. Фактически, аналогичная идея с OpenSolaris (подкачка к сжатому zvol) привести к аналогичному результату.
источник