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 argument
error 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
md
dispositivo de "disco de memoria" ( ) respaldado por 4G RAM :Luego diga
swapon
que agregue eso al grupo de dispositivos de intercambio disponibles, yswapinfo
confirma que ahora tengo 8G de intercambio:fuente
mdconfig(8)
incluye una nota de que omitir la-o reserve
opción "es una forma muy fácil de aterrorizar un sistema". También señala que se puede establecer el tiposwap
que 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 force
para tontos como yo que quieren omitir "controles de cordura extra". Me reí mucho al leer esto.No debería ser posible.
swapon
la llamada al sistema requierereadpage
ybmap
(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
bmap
llamada)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
tmpfs
partició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