Essa pergunta se originou com uma piada entre colegas de trabalho sobre o aumento do desempenho, movendo arquivos de troca para um tmpfs. Claramente, mesmo que isso seja possível, não é uma boa ideia. Tudo o que eu quero saber é: isso pode ser feito?
Atualmente, estou no Ubuntu 14.04, mas imagino que o processo seja semelhante para a maioria das máquinas Linux / Unix. Aqui está o que estou fazendo:
> 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
Então, no linux ou no unix (estou interessado em qualquer solução), você pode configurar o swap em um arquivo / partição que reside no ram? Existe uma maneira de contornar o Invalid argument
erro que estou recebendo acima?
Novamente, só quero enfatizar que não espero que isso seja uma solução para um problema do mundo real. Apenas um experimento divertido, eu acho.
Respostas:
Certo. No FreeBSD:
Isso mostra que, atualmente, eu tenho uma partição de troca criptografada 4G com redundância espelhada. Adicionarei outro 4G de troca não redundante e não criptografada:
Primeiro, crie um
md
dispositivo de "disco de memória" ( ) suportado por RAM de 4G :Em seguida, diga
swapon
para adicionar isso ao pool de dispositivos de troca disponíveis eswapinfo
confirme que agora tenho 8G de troca:fonte
mdconfig(8)
inclui uma observação de que omitir a-o reserve
opção "é uma maneira muito fácil de entrar em pânico em um sistema". Ele também observa que o tipo pode ser definido como oswap
que permite o cenário muito divertido de um sistema mover páginas de memória para a troca que reside na memória! Existe até uma opção-o force
para bonecos como eu, que querem omitir "verificações extras de sanidade". Riu muito lendo isso.Não deveria ser possível.
swapon
A chamada do sistema requerreadpage
ebmap
(indiretamente) as chamadas sendo implementadas pelo sistema de arquivos:http://lxr.free-electrons.com/source/mm/swapfile.c?v=4.0#L2412
Mas nenhum deles é implementado pelo tmpfs ; essa entrada está ausente no correspondente
address_space_operations
: http://lxr.free-electrons.com/source/mm/shmem.c?v=4.0#L3104Pelo mesmo motivo, o tmpfs não pode conter montagens de loop e o ramfs também não funciona (não possui
bmap
chamada)fonte
Nestas perguntas e respostas, /superuser/539287/swapon-failed-invalid-argument-on-a-linux-system-with-btrfs-filesystem (o site referenciado original não está respondendo):
O motivo da incompatibilidade que suspeito é uma "dependência circular". Neste artigo: http://www.jamescoyle.net/knowledge/951-the-difference-between-a-tmpfs-and-ramfs-ram-disk :
O que seria praticamente impossível no seu cenário.
Ele pode trabalhar com
ramfs
, tho - que não tem esse problema.fonte
tmpfs
partição como swap iniciaria e executaria um loop infinito quando a máquina iniciar a troca.Você pode facilmente evitar problemas com funções ausentes e trocar para tmpfs, embora um pouco indiretamente:
Combinado com o zswap, parecia uma ótima solução de "expansão de memória" até o meu RasPi4 congelar quase completamente (o console ssh congelou, o X congelou, o youtube no chrome continuou falando por vários minutos e congelou também, mas o sistema estava respondendo a pings e watchdog didn Lançado via ssh (antes que isso acontecesse) no topo não mostrava nada de extraordinário - parecia haver bastante memória RAM e espaço de troca suficientes. De fato, uma idéia semelhante ao OpenSolaris (troca por um zvol compactado) levar a resultados semelhantes.
fonte