Tengo 64 GB de RAM y 240 GB de SSD en mi computadora, que voy a usar para cálculos intensivos en memoria (aprendizaje automático, minería de datos, etc.). La mayoría de los consejos que encontré en Internet son sobre computadoras de 2-4-8 GB de RAM, y recomiendan 2 veces el tamaño de la partición de intercambio de RAM (128 GB).
¿Es razonable hacer una partición de intercambio de 128 GB? ¿Qué ventajas obtengo al hacer una gran partición de intercambio?
¿Entiendo correctamente que, en caso de que me quede sin RAM física:
- Si no tengo intercambio, aparece un error de "falta de memoria"
- Si tengo intercambio, algunas de las páginas de RAM se copiarán en la partición de intercambio, y el programa continuará ejecutándose (aunque más lentamente).
Algunas personas dicen que es una mala idea hacer un intercambio en SSD, ya que tiene una cantidad limitada de ciclos de lectura / escritura. ¿Qué tan rápido usando el intercambio agotará los ciclos de lectura / escritura de SSD (que yo sepa, son alrededor de 50000 IOPS de escritura)?
Estoy usando Linux ( Ubuntu 14.04 (Trusty Tahr)).
Establecer un intercambio de 16 GB por ahora, como seguramente debería ser suficiente (por ejemplo, RedHat sugiere 4 GB), y 16 GB de espacio en disco no es realmente un gran problema.
fuente
mmap
para asignar sus páginas de configuración de trabajo. Entonces su cantidad de intercambio será exactamente la cantidad que necesita para su proceso.discard
en un SSD. Además (y esto se mencionó en una respuesta a continuación), no olvide que puede usar un archivo en lugar de una partición para una administración potencialmente más fácil (y no afecta el rendimiento de un SSD debido, por ejemplo, a la fragmentación).Respuestas:
Probablemente solo necesite una pequeña cantidad de intercambio. Cuando tenga suficiente RAM para el conjunto de trabajo típico de su computadora, lo cual estoy bastante seguro de que tiene, solo necesita cambiar por dos cosas:
Necesita cambiar para obtener información a la que probablemente nunca se accederá fuera de la RAM para liberar más espacio para el caché de disco. Muchas aplicaciones se ejecutan al inicio del sistema y nunca se volverá a acceder a ellas. No quieres que las páginas que ensuciaron se peguen en la RAM para siempre. Por lo tanto, necesita intercambiar para mantenerlos.
Necesita cambiar para cubrir las asignaciones que nunca se completarán. Este espacio simplemente tiene que estar disponible, aunque no se utilizará. Sin él, el sistema tendrá que negarse a asignar memoria incluso cuando tenga suficiente RAM física libre porque no tiene suficiente almacenamiento de respaldo para permitir que todas sus asignaciones se usen a la vez.
Ninguno de estos requiere una gran cantidad de intercambio. 16 GB, por ejemplo, deberían ser más que suficientes. El propósito no es permitirle ejecutar conjuntos de trabajo más grandes a costa de la velocidad. El propósito es permitirle usar su 64GB de manera efectiva y no tener que obstruirlo con basura o reservarlo para casos extremos que nunca sucederán.
(Estoy de acuerdo con Bert en que es probable que 4 GB sean suficientes).
fuente
RedHat recomienda 4 GB en una máquina con 64 GB .
Sin embargo, el cambio de tamaño es más un arte que una ciencia. Depende de para qué se usa la máquina, cuánto espacio en disco y memoria tiene, y otros factores. Recuerde, siempre puede agregar más intercambio más tarde.
El uso de la regla de memoria física 2X está desactualizado con la cantidad de sistemas de memoria que tienen estos días. Pero no se recomienda ejecutar con intercambio cero a menos que sepa lo que está haciendo. La recomendación de 4 GB es un buen punto de partida.
fuente
En Linux, necesita suficiente intercambio para que la memoria virtual total disponible (RAM + SWAP) sea suficiente para todos los procesos que desea ejecutar a la vez y su huella virtual máxima.
Si tiene menos intercambio que este, o ningún intercambio, entonces ocurre la siguiente situación: el sistema se queda sin memoria tratando de asignar una página. Pero, esto sigue siendo una falla suave aunque no haya intercambio, porque el sistema tiene muchas páginas "víctimas" que pueden eliminarse para hacer espacio: es decir, las páginas de todas las asignaciones de memoria respaldadas por archivos, como los ejecutables y bibliotecas compartidas!
A medida que su sistema demanda más y más espacio para datos (que no se pueden intercambiar), evacuará cada vez más el código ejecutable (bibliotecas y ejecutables compartidos), lo que provocará una terrible sacudida, ya que el conjunto de trabajo se recorta en un conjunto más y más ajustado de páginas
El espacio de intercambio suaviza este problema al proporcionar un lugar para intercambiar páginas anónimas (no mapeadas de archivos): las páginas utilizadas para las asignaciones de memoria, de modo que el código ejecutable pueda permanecer en la memoria.
Aun así, si no ejecuta con frecuencia tareas de uso intensivo de memoria, es posible que pueda ejecutar sin intercambio la mayor parte del tiempo y configurar manualmente un archivo de intercambio (en lugar de una partición dedicada) cuando lo necesite. Para hacer un archivo de intercambio sobre la marcha, conviértase en root y:
Cuando ya no lo necesites:
Notas:
Definitivamente no necesita configurar al menos tanto intercambio como RAM. Esta regla general se remonta a los sistemas operativos donde era un requisito difícil debido a la forma en que se diseñó el intercambio.
Hay maneras de hacer que Linux falle con dificultad cuando no hay memoria disponible, es decir, mediante la manipulación de los valores de estas entradas de sysctl:
fuente
If I have no swap, I get an 'out of memory' error
, que esfalse
, la verdad es que cuando se queda sin espacio de intercambio, el asesino sin memoria se activará y matará un proceso aleatorio para liberar espacio, por lo que la cantidad de espacio de intercambio necesaria depende de cómo se escriba su solicitud.Hay más consideraciones. Si necesita / desea suspender para trabajar, necesita al menos el tamaño de su RAM y algo más. Sin embargo, parece poco probable que lo necesite, dado que parece construir principalmente un caballo de trabajo computacional.
En este caso, considere usar un archivo de intercambio en lugar de una partición. No necesita preocuparse demasiado por el tamaño, deshacerse de él o agregarlo más tarde no requiere ningún reparto. No hay penalización de rendimiento (notable) al usar un archivo sobre una partición. Si alguna vez lo necesita, eche un vistazo al tamaño y esto también le dará buenos consejos.
fuente
La carga de trabajo que desea aplicar a la máquina necesita una cierta cantidad de memoria para ejecutarse (recuerde agregar suficiente a la ecuación para manejar las cargas máximas), y necesita configurar su computadora para tener al menos eso.
Los sistemas operativos modernos proporcionan memoria virtual como una combinación de memoria física y espacio de intercambio, por lo que si necesita más memoria de la que tiene disponible la máquina, debe agregar suficiente espacio de intercambio para llenar el vacío. Es decir, si necesita 80 GB como máximo y la máquina tiene 64 GB, necesita un intercambio de 16 GB.
Por lo general, los instaladores del sistema operativo le piden que realice un área de intercambio inicial (ya que es la más simple y permite que incluso las computadoras pequeñas se instalen), y se ha encontrado que una buena regla general para las operaciones típicas de Unix es tener un tamaño de memoria virtual tres veces la memoria física, por lo que esto generalmente se sugiere. Sin embargo, usted sabe más sobre el patrón de uso para que pueda cambiarlo según corresponda.
No hay nada de malo en trabajar sin espacio de intercambio si la presión de su memoria siempre es menor. Linux usará de forma transparente cualquier memoria no utilizada como caché de disco.
fuente
Una idea mucho mejor que tener "mucho intercambio" es (re) organizar su trabajo para que los conjuntos de trabajo quepan en la memoria, luego usar el sistema de archivos para almacenar y recuperar el trabajo que realiza. Es decir, en lugar de obligar al sistema operativo a adivinar cuáles serán sus patrones de uso de memoria, use lo que sabe sobre sus problemas para controlar sus patrones de uso de memoria.
Como un ejemplo aleatorio que es inmediatamente relevante para mí este verano ... Al implementar el tamiz cuadrático, uno necesita una matriz contigua (aparentemente) grande para marcar (con algún algoritmo complicado cuyos detalles en realidad no importan para este ejemplo). La matriz debe tener ~ 100 Giga-entradas, tan fácilmente en el rango de 1 TB. Podría pretender asignar eso y dejar que el sistema operativo realice una cantidad increíble de intercambio ineficiente para que las páginas entren y salgan de la RAM para admitir todas las escrituras secuenciales a través de la matriz. En lugar de hacer algo descabellado, he dispuesto asignar una matriz mucho más pequeña que se ajuste exactamente en la memoria y luego reutilizar esa pequeña matriz para cubrir iterativamente el resto de la gran matriz en sectores. También eliminé el sistema operativo, eliminé el conjunto de servicios en ejecución, reemplacé el shell,
El SSD puede ser rápido, pero no es tan rápido como organizar su computación para realizar el mismo conjunto de operaciones sin tener que detenerse para intercambiar.
fuente
Como los otros mencionaron, una partición de intercambio es una buena idea incluso si tiene mucha RAM. No es una buena idea ponerlo en un SSD; las escrituras frecuentes de una partición de intercambio eventualmente desgastarán su unidad.
Si tiene un puerto USB 3.0 de repuesto, sugeriría usar una unidad flash para su espacio de intercambio. Hay muchas unidades flash de alta velocidad que son tan rápidas como su SSD, pero mucho más baratas, lo suficientemente baratas como para reemplazarlas si comienzan a fallar. Una búsqueda rápida en Amazon muestra que hay muchas unidades flash USB 3.0 de 16 GB decentes por menos de $ 20, e incluso algunas unidades de 64 GB por menos de $ 60.
Particione toda la unidad flash como espacio de intercambio, y tendrá espacio de intercambio si lo necesita, y la tranquilidad de saber que la memoria que se escribe repetidamente es fácilmente (y económica) reemplazable.
fuente
Estarás bien incluso con 1GiB (y probablemente menos) de intercambio. Mi computadora de trabajo generalmente no usa más de 140-150 MiB. Un gigabyte es un exceso de aprovisionamiento para eso.
A menos que realice tareas de cómputo que requieran conjuntos de datos en cientos de gigabytes y (¡este es importante!) Se accede a los datos de manera más o menos de acceso único, nunca querrá tener un intercambio mucho más grande que eso. Pero, de nuevo, simplemente el mapeo de memoria de un archivo de datos funciona igualmente bien para esa aplicación.
Pero más intercambio ayuda más, ¿verdad? ¡Más de todo siempre es mejor!
Considere qué diferencia hará un intercambio de, digamos, 16GiB (o piense en 64GiB). Si nunca usa estos 16GiB, también podría no tenerlos apartados en primer lugar. Pero si los usas , ¿qué pasa? El disco, en comparación con la memoria principal, es extremadamente lento. Incluso con un SSD SATA-600, transferir 16GiB toma entre 30 y 40 segundos, y 2-4 veces más en algunas otras configuraciones.
Ahora, inevitablemente, alguien objetará que estás entrando y saliendo de una docena de páginas de 4 KB, no 16 GB de una sola vez. Si bien eso es cierto, el punto no obstante se mantiene. Si solo necesita intercambiar un par de páginas, no necesita 16GiB de intercambio, pero si necesita 16GiB de intercambio, entonces también las transferirá (de una forma u otra).
En teoría, el 99.9% de todos los usuarios podrían incluso usar una máquina de 64GiB (o cualquier máquina de 8 + GiB) sin ningún intercambio, y lo más probable es que nunca noten que falta algo. Sin embargo, esto no es aconsejable.
Primero, es subóptimo porque el sistema operativo tiene menos opciones en lo que puede descartar cuando se queda sin memoria física. Hay dos cosas que puede hacer: intercambiar algo que no se usa o tirar páginas de la memoria caché del búfer. Si no tiene intercambio, solo hay una cosa que puede hacer. Tirar páginas de la memoria caché del búfer es inofensivo, pero puede afectar notablemente el rendimiento.
En segundo lugar, las asignaciones anónimas privadas simplemente pueden fallar si no hay intercambio. Eso generalmente no sucederá, pero eventualmente cuando no hay suficiente memoria física disponible para satisfacerlos a todos, y no hay intercambio, el sistema operativo solo tiene esta opción, excepto ...
Tercero, el temido asesino OOM puede entrar en acción Lo que significa que un proceso más o menos aleatorio puede ser asesinado. No gracias. Esto no es algo que quieras que suceda.
Dicho esto, consejos como si necesita un intercambio X veces la cantidad de RAM instalada proviene de personas que repiten algo que escucharon (¡y no entendieron!) De alguien que repitió algo que escucharon (¡y no entendieron!) Décadas hace.
La regla de "usar 2X su RAM" fue una regla práctica fácil de recordar en los años 80 y 90, nunca fue la "verdad dorada" (algo que funcionó bien para la mayoría de los usuarios), y no se aplica en absoluto hoy en día. .
Debe tener una cantidad razonable de intercambio que pueda pagar fácilmente (por ejemplo, un gigabyte), para que el sistema operativo pueda localizar algunas cosas obsoletas, y para que el mundo no termine inmediatamente cuando una vez pide un poco más de memoria. Pero eso es todo.
fuente