%20puedo%20%22desconectar%20en%20caliente%22%20la%20memoria%3F.png)
Esto es lo que he probado:
sudo zsh -c 'echo offline >/sys/devices/system/memory/memory109/state'`
y obtuve el siguiente error:
zsh:echo:1: write error: device or resource busy
¿Quizás deba asegurarme primero de que el módulo de memoria que estoy a punto de desconectar esté vacío?
Y si es así, ¿cómo podría hacer eso?
Fondo:
Estoy ejecutando una distribución basada en Ubuntu virtualizada como invitada por VMWare.
Espero reducir el uso de memoria del sistema invitado, liberando más para que esté disponible para el anfitrión sin tener que reiniciar el invitado.
En caso de que algo de eso pueda importar.
Editar 2016-09-29:
Animado por los comentarios de @Gilles y el enlace que decía que en teoría debería ser posible, se me ocurrió la idea de que tal vez memory109
contenía algunas páginas inamovibles. Así que decidí probarlo también en otros módulos (?).
Al principio probé algunos otros a mano. Pero como no tuvieron éxito, pensé en probarlos todos:
for i in /sys/devices/system/memory/memory*/state;
do echo -n "Trying "$i" \t";
sudo zsh -c "echo offline > $i";
done
Precaución: tenga cuidado con el script anterior, ya que puede tener éxito en su máquina, lo que podría desconectar la mayor parte, si no toda, su memoria, dejando su sistema sin recursos y colgado.
Esto es lo que obtuve para la mayoría:
...
Trying /sys/devices/system/memory/memory44/state zsh:echo:1: write error: device or resource busy
Trying /sys/devices/system/memory/memory45/state zsh:echo:1: write error: device or resource busy
Trying /sys/devices/system/memory/memory46/state zsh:echo:1: write error: device or resource busy
...
Con sólo dos excepciones:
Trying /sys/devices/system/memory/memory0/state zsh:echo:1: write error: invalid argument
...
Trying /sys/devices/system/memory/memory86/state zsh:echo:1: write error: invalid argument
...
¿Alguna idea de por qué esto puede no funcionar?
Respuesta1
Lo más probable es que sus bloques de memoria no se puedan desconectar porque contienen páginas inamovibles. Verifique el atributo sysfs "extraíble".
Si está ejecutando un sistema x86-64 normal (virtualizado o bare metal), es muy probable que no haya bloques extraíbles, porque todas las asignaciones del kernel son inamovibles. Para restringir el kernel a una parte de la RAM, pásele un parámetro "kernelcore=". Después de eso, deberías ver algunos bloques de memoria extraíbles y puedes desconectarlos escribiendo '0' en el atributo 'en línea' o escribiendo 'fuera de línea' en el atributo 'estado'.
Respuesta2
No creo que sea posible según el kernel.por defectocaracterísticas. El kernel solo admite conexión en caliente, pero desconexión. Podría haber una forma extraña de hacer esto, pero técnicamente suena mal... al menos hay pocos problemas con esto.