¿Cuáles son las principales diferencias entre mlockall () y swapoff -a?

Esta pregunta se responde mejor enumerando lo que tienen en común: ambos se usan para evitar el intercambio, aunque uno con la precisión de un bisturí y otro tan directo como un martillo en la cabeza.

mlockall () es una llamada al sistema estandarizada por POSIX y disponible en la mayoría de los sistemas Unix, incluido Linux. Tras una invocación exitosa, “bloquea” todas las páginas de procesos en la memoria, evitando su paginación en el disco. La llamada al sistema acepta una bandera que controla su comportamiento. Si se proporciona MCL_CURRENT , las páginas mapeadas actualmente en el proceso están bloqueadas, pero no se garantiza que las páginas mapeadas posteriormente. Si se proporciona MCL_FUTURE , se bloquean las páginas actuales y todas las futuras. De esta manera, la paginación se deshabilita efectivamente para este proceso.

Una alternativa más precisa es mlock () , que acepta un rango de direcciones para bloquear.

swapoff es una utilidad de línea de comandos que desactiva los archivos de página y las particiones. El parámetro -a indica a la utilidad que deshabilite todos los archivos de página y particiones existentes. Por lo tanto, swapoff -a desactiva el intercambio para todo el sistema.

¿Por qué deshabilitar la paginación? Hay dos razones para limitar la paginación: aplicaciones de alta seguridad y en tiempo real. Las aplicaciones que tratan con secretos como las claves de cifrado pueden desear evitar su exposición al almacenamiento no volátil, como un disco duro. Dichas aplicaciones pueden usar mlock () para garantizar que el secreto nunca se pagine en el disco. Por el contrario, las aplicaciones en tiempo real dependen del comportamiento determinista. Una forma de mejorar el determinismo y la latencia ligada es usar mlockall () para garantizar que sus páginas nunca necesiten paginarse.

¿Cuál debería usar? El uso de intercambio para cualquiera de los casos de uso mencionados anteriormente es subóptimo. Incluso si la paginación es perjudicial para una aplicación específica, es beneficiosa para el sistema en su conjunto . Por lo tanto, deshabilitar la paginación de un sistema completo no es una mejor práctica. Si su aplicación contiene secretos en la memoria que no desea paginar en el disco o si su aplicación requiere un tiempo determinista, considere usar mlock () o mlockall () para evitar la paginación.

Robert Love explicó la diferencia con gran detalle, pero me gustaría agregar que el swapoff -a no evita la paginación por completo. Los procesos aún pueden paginar en sus archivos asignados: ejecutables, bibliotecas, etc.