Esta pregunta se originó con una broma entre compañeros de trabajo sobre el aumento del rendimiento al mover archivos de intercambio a un tmpfs. Claramente, incluso si esto es posible, no es una buena idea. Todo lo que quiero saber es, ¿se puede hacer?
Actualmente estoy en Ubuntu 14.04, pero imagino que el proceso es similar para la mayoría de las máquinas Linux / Unix. Esto es lo que estoy haciendo:
> 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
Entonces, en Linux o Unix (estoy interesado en cualquier solución), ¿puede configurar de alguna manera el intercambio en un archivo / partición que reside en RAM? ¿Hay alguna forma de evitar el Invalid argumenterror que obtengo arriba?
De nuevo, solo quiero enfatizar que no espero que esto sea una solución a un problema del mundo real. Solo un experimento divertido, supongo.

Respuestas:
Por supuesto. En FreeBSD:
Eso muestra que actualmente, tengo una partición de intercambio encriptada 4G con redundancia duplicada. Agregaré otro 4G de intercambio no redundante, no encriptado:
Primero cree un
mddispositivo de "disco de memoria" ( ) respaldado por 4G RAM :Luego diga
swaponque agregue eso al grupo de dispositivos de intercambio disponibles, yswapinfoconfirma que ahora tengo 8G de intercambio:fuente
mdconfig(8)incluye una nota de que omitir la-o reserveopción "es una forma muy fácil de aterrorizar un sistema". También señala que se puede establecer el tiposwapque permite el escenario muy entretenido de un sistema que mueve páginas de memoria al intercambio que en sí reside en la memoria. Incluso hay una opción-o forcepara tontos como yo que quieren omitir "controles de cordura extra". Me reí mucho al leer esto.No debería ser posible.
swaponla llamada al sistema requierereadpageybmap(indirectamente) las llamadas implementadas por el sistema de archivos:http://lxr.free-electrons.com/source/mm/swapfile.c?v=4.0#L2412
Pero ninguno de ellos está implementado por tmpfs , falta una entrada correspondiente en
address_space_operations: http://lxr.free-electrons.com/source/mm/shmem.c?v=4.0#L3104Por la misma razón, tmpfs no puede contener montajes de bucle, y ramfs tampoco funcionará (no tiene
bmapllamada)fuente
De estas preguntas y respuestas /superuser/539287/swapon-failed-invalid-argument-on-a-linux-system-with-btrfs-filesystem (el sitio original de referencia no responde):
La razón de incompatibilidad que sospecho es una "dependencia circular". De este artículo: http://www.jamescoyle.net/knowledge/951-the-difference-between-a-tmpfs-and-ramfs-ram-disk :
Lo cual sería prácticamente imposible en su escenario.
Se puede trabajar con
ramfs, aunque - que no tiene este problema.fuente
tmpfspartición como intercambio comenzaría y un bucle sin fin cuando la máquina comience a intercambiar.Puede evitar fácilmente los problemas con las funciones faltantes y cambiar a tmpfs, aunque de forma indirecta:
Combinado con zswap, parecía una excelente solución de "expansor de memoria" hasta que mi RasPi4 se congeló casi por completo (la consola ssh se congeló, X se congeló, youtube en Chrome siguió hablando durante varios minutos y también se congeló, pero el sistema estaba respondiendo a pings y el perro guardián no lo hizo). No haga nada útil. Lanzado a través de ssh (antes de que eso ocurriera) en la parte superior no mostraba nada sobresaliente también: parecía haber suficiente espacio libre de memoria RAM e intercambio, de hecho, una idea similar con OpenSolaris (cambiar a un zvol comprimido) conducir a un resultado similar.
fuente