Por lo que entiendo, el propósito de una partición de intercambio en Linux es liberar parte de la información "a la que no se accede con tanta frecuencia" de la RAM y moverla a una partición específica en su disco duro (a costa de hacerlo más lento para leer o escribir a), esencialmente permitiendo aplicaciones activas más de la "memoria de alta velocidad".
Esto es ideal para cuando estás en una máquina con una pequeña cantidad de RAM y no quieres tener problemas si te quedas sin batería. Sin embargo, si su sistema tiene 16 GB o 32 GB de RAM, y suponiendo que no esté ejecutando una base de datos MySQL para StackExchange o editando una película de 1080p de longitud completa en Linux, ¿ debería usarse una partición de intercambio?
/tmp
) después de 3 días de tiempo de actividad.Respuestas:
Si.
Definitivamente, siempre debe tener habilitado el intercambio, excepto si hay una razón muy convincente y prohibitiva (como no tener ningún disco o solo hay un disco de red presente). ¿Debería cambiar el orden de los tamaños ridículos que se recomiendan a menudo (como el doble de RAM)? Pues no .
La razón es que el intercambio no solo es útil cuando sus aplicaciones consumen más memoria de la que tiene RAM física (en realidad, en ese caso, el intercambio no es muy útil porque afecta seriamente el rendimiento). El principal incentivo para el intercambio hoy en día no es convertir mágicamente 16GiB de RAM en 32 GiB, sino hacer un uso más eficiente de la RAM instalada instalada.
En una computadora moderna, la RAM no se deja de usar. La RAM no utilizada es algo que también podría no haber comprado y ahorrado el dinero. Por lo tanto, cualquier cosa que cargue o cualquier cosa que sea de otra forma correlacionada con la memoria, todo lo que podría posiblemente ser reutilizado por cualquier persona en cualquier momento posterior (limitado por las restricciones de seguridad) está siendo almacenado en caché. Muy pronto después de que la máquina se haya iniciado, toda la RAM física se habrá utilizado para algo .
Cada vez que solicita una nueva página de memoria del sistema operativo, el administrador de memoria debe tomar una decisión informada:
Las opciones 4 y 5 son muy indeseables y solo sucederán si el sistema operativo no tiene otra opción. Las opciones n. ° 1 y n. ° 2 significan que tiras algo que posiblemente necesitarás pronto nuevamente. Esto afecta negativamente el rendimiento.
La opción n. ° 3 significa que mueve algo que (probablemente) no necesite pronto a un almacenamiento lento. Eso está bien porque ahora algo que necesitas puede usar la RAM rápida.
Al eliminar la opción # 3, ha limitado efectivamente el sistema operativo a hacer # 1 o # 2. Recargar una página desde el disco es lo mismo que recargarla desde el intercambio, excepto que tener que volver a cargar desde el intercambio generalmente es menos probable (debido a la toma de decisiones de paginación adecuadas).
En otras palabras, al deshabilitar el intercambio no gana nada, pero limita la cantidad de opciones útiles del sistema operativo para tratar una solicitud de memoria. Lo cual puede no ser , pero muy posiblemente sea una desventaja (y nunca será una ventaja).
[EDITAR]
El lector cuidadoso de la página de
mmap
manual , específicamente la descripción deMAP_NORESERVE
, notará otra buena razón por la cual el intercambio es algo necesario incluso en un sistema con memoria física "suficiente":"Cuando el espacio de intercambio no está reservado, uno puede obtener SIGSEGV en una escritura si no hay memoria física disponible".
- Espera un momento, ¿qué significa eso?
Si asigna un archivo, puede acceder a los contenidos del archivo directamente como si el archivo estuviera de algún modo, por arte de magia, en el espacio de direcciones de su programa. Para el acceso de solo lectura, el sistema operativo no necesita, en principio, más de una sola página de memoria física que puede repoblar con diferentes datos cada vez que acceda a una página virtual diferente (por razones de eficiencia, por supuesto, eso no es lo que se hace, pero en principio, podría acceder a terabytes de datos con una sola página de memoria física). ¿Y si tú tambiénescribir en un mapeo de archivos? En este caso, el sistema operativo debe tener una página física, o espacio de intercambio, lista para cada página escrita. No hay otra manera de mantener los datos hasta que el proceso de reescritura de páginas sucias haya hecho su trabajo (que puede tomar varios segundos). Por esta razón, el sistema operativo reserva (pero no necesariamente compromete) espacio de intercambio, por lo que en caso de que esté escribiendo en un mapeo mientras no haya una página física sin usar (es una condición bastante posible y normal), usted ' Está garantizado que seguirá funcionando.
Ahora, ¿qué pasa si no hay intercambio? Significa que no se puede reservar ningún intercambio (¡duh!), Y esto significa que tan pronto como no queden páginas físicas gratuitas, y esté escribiendo en una página, recibirá una agradable sorpresa en la forma de su proceso de recepción una falla de segmentación, y probablemente ser asesinado.
[/EDITAR]
Sin embargo, la recomendación tradicional de hacer el intercambio dos veces el tamaño de RAM no tiene sentido. Aunque el espacio en disco es barato, no tiene sentido asignar tanto intercambio. El desperdicio de algo que es barato sigue siendo un desperdicio, y absolutamente no desea intercambiar continuamente conjuntos de trabajo de varios cientos de megabytes (o más grandes) de tamaño.
No existe un único tamaño de intercambio "correcto" (hay tantos tamaños "correctos" como usuarios y opiniones). Por lo general, asigno un 512MiB fijo, independientemente del tamaño de la RAM, que me funciona muy bien. El razonamiento detrás de eso es que 512MiB es algo que siempre puede permitirse hoy en día, incluso en un disco pequeño. Por otro lado, agregar varios gigabytes de intercambio no es mejor. No los va a utilizar, excepto si algo va muy mal.
Incluso en una SSD, el intercambio es de órdenes de magnitud más lentos que la RAM (debido al ancho de banda del bus y la latencia), y aunque es muy aceptable mover algo para intercambiar que probablemente no sea necesario nuevamente (es decir, lo más probable es que no lo sea) intercambiarlo nuevamente, para que su grupo de páginas disponibles se amplíe efectivamente de forma gratuita), si realmente necesita cantidades considerables de intercambio (es decir, tiene una aplicación que utiliza, por ejemplo, un conjunto de datos de 50GiB), está bastante perdido.
Una vez que su computadora comienza a intercambiar páginas por valor de gigabytes, todo se arrastra. Por lo tanto, para la mayoría de las personas (incluyéndome a mí) esto no es una opción, por lo que tener tanto intercambio no tiene sentido.
fuente
No voy a estar de acuerdo con algunas de las opiniones que veo aquí. Todavía estaría creando una partición SWAP, especialmente en un entorno de producción. Lo hago también para mis máquinas domésticas y máquinas virtuales.
En estos días los estoy midiendo alrededor de 1-1.5 veces la memoria. 2 veces la memoria solía ser la regla general. El disco de intercambio es "barato", ya que no necesita una copia de seguridad o protección.
Si se queda sin memoria, su espacio de intercambio le brinda un poco de tiempo y protección para resolver el problema.
Tenga en cuenta que cosas como / tmp pueden residir en el espacio de intercambio.
El área de intercambio puede contener un volcado parcial del núcleo para que pueda restaurarse en el próximo reinicio. Esto podría ser bueno para una futura emergencia de depuración que debe realizar.
fuente
Tal vez:
He pensado mucho en este tema y he visto opiniones que llegan a ambos lados del argumento más veces de las que puedo contar. Mi enfoque era desarrollar una forma de averiguarlo.
Comience con una partición de intercambio activa de lo que cree que tiene un tamaño suficiente.
Luego, abra una terminal en un espacio de trabajo y emita el comando
free -hs 1
que informará el uso una vez por segundo.Opcionalmente, cambie a otros espacios de trabajo.
Haz todo lo que puedas hacer y luego un poco más. Ejecute todas sus aplicaciones comunes a la vez, explore varias pestañas e intente desesperadamente darle al sistema un entrenamiento real para usted, esto podría significar volver a codificar 1/2 docena de videos mientras ejecuta una operación de compilación y revisa su correo electrónico o lo que sea. Vamos a enfrentar los hechos, esto es todo acerca de cómo usted utiliza su sistema.
Cuando sienta que tiene el sistema bajo una carga alta (o tan alta como sea probable que llegue y algo más), mire la terminal y examine los resultados. o mejor aún, redirija la salida a un archivo agregando
>output.txt
al comando para que pueda examinar la ejecución completa. Si su Swap usado nunca excede Mem free, no necesita swap. Si lo hace, lo haces.No necesito intercambio Tal vez lo hagas. ¿Por qué no descubrirlo?
En lo que respecta al cambio de tamaño, las reglas generales generalmente están sobrevaloradas, ya que esta es una pregunta basada en el uso.
fuente
swap
altofree
?NOTA: Esto me sucedió en una situación específica e inusual. Si está solucionando un problema, esto puede ser útil. No quiero decir que TODAS las máquinas DEBEN tener intercambio.
¡TAL VEZ!
He tenido problemas en el pasado con un "dispositivo" que construí, ejecutando Linux - ejecutándose en un dispositivo flash compacto, no quería usar mi CF usando swap, y había suficiente memoria para la aplicación.
La mayoría de estos dispositivos funcionaban bien, pero en una caja particularmente ocupada, me encontré con un problema:
FRAGMENTACIÓN DE MEMORIA
Sin espacio de intercambio, la memoria gradualmente se volvió más y más fragmentada, especialmente con procesos de ejecución prolongada (aunque tenía mucha memoria libre, todo estaba en bits muy pequeños). Puse algo de espacio de intercambio y le dije a Linux que no lo usara a menos que fuera necesario; Esto resolvió el problema por completo.
Además de todo lo demás, el espacio de intercambio permite mover la memoria y desfragmentarla. Si tiene memoria fragmentada y necesita un solo fragmento grande, los fragmentos se intercambiarán; A medida que se vuelven a intercambiar, se desfragmentan efectivamente.
Echa un vistazo a / proc / buddyinfo: el mío se ve así ahora:
Los números representan bloques de diferentes tamaños; cada tamaño es la mitad del tamaño del siguiente bloque, desde bloques de 4 mb a la izquierda hasta 4 kb a la derecha (es decir, 4 mb, 2 mb, 1 mb, etc.). Una máquina recién iniciada debe tener todos los bloques a la izquierda, muy pocos a la derecha (= no fragmentados). Recuerde también que la misma cantidad de memoria (por ejemplo, 4 mb) se representará como números diferentes en las columnas: 1 bloque en la columna más a la izquierda, 1024 en la columna más a la derecha.
La memoria se asigna desde el grupo que está lo más a la derecha posible; por ejemplo, si su programa quiere 12kb de memoria (de una vez), lo tomará de la columna de 16kb; el resto aparecerá en la columna de 4kb. Si no hay bloques de 16kb, entonces tomará de los bloques de 32kb, lo que dará como resultado 16kb y 4kb sobrantes, y así sucesivamente.
Si no hay bloques de memoria lo suficientemente grandes, Y TIENE ESPACIO DE INTERCAMBIO, entonces, por ejemplo, si desea 16 kb de memoria, encontrará el bloque menos utilizado de 16 kb (que podría, por ejemplo, contener un bloque usado de 4 kb, un bloque disponible de 4 kb, y 2 bloques de 4kb más usados), mueva las porciones USADAS solo para intercambiar y asigne la memoria liberada a la nueva aplicación.
En la caja que se estrelló, tenía cientos de miles de bloques de 4 kb y 8 kb, y no mucho más.
POR LO QUE PUEDO DECIR (¡pasando por las máquinas bloqueadas!), El núcleo se moverá de memoria a intercambio, e intercambiará a memoria, pero nunca se moverá de memoria a memoria.
fuente
Una partición de intercambio tiene un valor significativo por encima y más allá de simplemente actuar como algo de RAM adicional cuando se agota.
Por un lado, Linux usa la mayor cantidad de memoria posible para almacenar en caché los archivos y las operaciones de E / S, si tiene algún intercambio, puede encontrar que se destina más memoria al almacenamiento en caché de E / S y lo hace más rápido (minimizando el acceso al disco y también reduciendo el desgaste de los SSD) para mantener datos que algún programa ha asignado pero que solo usa una vez cada 12 horas, lo que puede ser el caso de algunos demonios.
Además, Linux utiliza una estrategia optimista de asignación de memoria mediante la cual permitirá que las páginas se asignen nominalmente incluso si no está seguro de tener memoria real para llenarlas. Esto es más eficiente que hacer una verificación adecuada y mapear cada asignación y generalmente no causa problemas. Sin embargo, las heurísticas que utiliza el núcleo para determinar si permitir una asignación es razonable incluyen el nivel de intercambio disponible en el sistema, por lo tanto, las asignaciones pueden ser más rápidas si el sistema tiene mucho intercambio, incluso si no se usa mucho.
Estos factores juntos me llevan a creer personalmente que es mejor tener un intercambio en casi todos los sistemas normales, sin embargo, para tamaños de ram grandes, ignoro la regla de ram * 2 y simplemente limito mi intercambio a 4-8GB (dependiendo del tamaño del disco )
fuente
Nunca debería tener un intercambio mayor que el tamaño máximo que podría tolerar esperar a que el kernel entre / salga; de lo contrario, solo está creando un nuevo modo de falla para su sistema (se está empantanando irremediablemente). Tenga en cuenta que, a pesar de que las unidades modernas pueden transferir en el orden de GB / seg, Linux normalmente solo puede mover swap a velocidades más altas en la línea de cientos de kB, o en el mejor de los casos, algunos MB, por segundo. Por lo tanto, un gran intercambio puede dejar su sistema inutilizable durante minutos, horas o incluso días.
Si tiene suficiente memoria física para lo que está haciendo, el tamaño ideal para el intercambio es hacer que coincida con la cantidad de "datos basura" que los procesos mantienen pero nunca usan. Esto probablemente esté en el rango de unos pocos a unos cientos de megabytes. Esta estrategia permite que toda su memoria física se utilice para almacenar en caché información útil en lugar de almacenarla de manera permanente para datos que probablemente nunca se volverán a utilizar.
Si no tiene suficiente memoria física, debe evaluar si puede tolerar una desaceleración severa por un intercambio excesivo. Si es así, tener hasta 1-2 GB de intercambio puede tener sentido, y quizás hasta 4 GB si tiene unidades extremadamente rápidas. Pero nada más que eso solo empeorará los modos de falla de su sistema, y debería considerar comprar más RAM en su lugar.
fuente
Solo si desea poder hibernar para intercambiar (esta característica también se llama "suspender en disco" e implica guardar todo el contenido de RAM y apagar la alimentación). Por lo general, esto solo se usa en computadoras portátiles y otros dispositivos móviles, por lo que depende.
fuente
No hay una respuesta universal y clara porque depende de una tarea que está a punto de realizar. Si está a punto de ejecutar un servidor de DB, HTTP, virtualización o caché, nunca debe habilitar ningún tipo de intercambio, independientemente de la cantidad de memoria RAM que tenga. Si tiene un host de escritorio o de tareas mixtas y tiene más de 16 Gb de RAM rápida, eche un vistazo aquí: zRam
fuente
No hay forma de saber si necesita espacio de intercambio o no si el único parámetro que conocemos es la cantidad de RAM instalada.
En cualquier caso, existe una idea errónea común de que tener un espacio de intercambio está afectando negativamente el rendimiento del sistema. Esto es incorrecto. Siempre que tenga suficiente RAM, tener un área de intercambio sea cual sea su tamaño no perjudica en absoluto el rendimiento. Lo que afecta el rendimiento es tener poca RAM y usar el espacio de intercambio de manera efectiva.
caso 1: Si no tiene espacio de intercambio y está sin RAM, el kernel de Linux elegirá uno o más procesos que considere buenos candidatos y los matará.
caso 2: si tiene un espacio de intercambio y no tiene RAM, el núcleo seleccionará las páginas de memoria menos usadas y las colocará en el área de intercambio para liberar RAM. Esto ralentizará el sistema, pero sus aplicaciones no se verán afectadas de otra manera.
Siempre prefiero el caso 2, ya que me siento incómodo al perder partes o todo mi trabajo porque el núcleo piensa que vale la pena matar mis aplicaciones. Además, con el tamaño actual de un disco promedio en el rango de TB, reservar un pequeño porcentaje para el intercambio no debería ser un problema.
fuente
Mi regla para aplicar el intercambio en cualquier sistema es tener la respuesta para esto:
Cuando obtengo respuesta para esta información, dimensiono el sistema en consecuencia. En años anteriores estaba haciendo la regla general de Sun Microsystem. Hasta 16 GB el doble de RAM para SWAP, desde 16 GB hasta la misma cantidad. Pero, por otro lado, si tiene suficiente RAM de sobra y sus aplicaciones no usan SWAP a la fuerza, puede omitir el intercambio. Si lo necesita es solo cuestión de poner un nuevo disco o lun y configurar el SWAP. la regla de Sun se aplicaba principalmente porque en Solaris en caso de "kernel panic", la memoria se volcaría por completo para intercambiarla para un análisis más detallado.
fuente
Se necesitará el intercambio si no tiene suficiente RAM para ejecutar todos sus programas.
Dices que no estás haciendo nada que requiera mucha RAM. Entonces, tienes suficiente RAM.
Entonces, no necesita espacio de intercambio.
Pero , si cree que en algún momento, a pesar de lo que implica en su pregunta, sus programas usarán, digamos más de la mitad (o dos tercios) de su RAM (regla general), luego lea el otro "pro-swap" "respuestas. No necesitará intercambio, pero podría mejorar el rendimiento de su sistema.
fuente
La respuesta corta:
Sí, siempre necesita un intercambio, solo en el improbable caso de que una aplicación ni siquiera se moleste en asignar memoria, sino que asigna memoria virtual directamente.
Establezca su archivo de intercambio en:
RAM+round(sqrt(RAM))
si usas hibernaciónround(sqrt(RAM))
si no lo haces¡Establezca su
swappiness
10 en un escritorio, pero no en un servidor!La respuesta larga:
En el pasado:
La regla general en uso durante los últimos 25 años ha sido un mínimo de 1xRAM y un máximo de 2xRAM, así que eso es lo que verá citado todo el tiempo.
Ese mínimo se estableció en la edad de piedra
cuando era un adolescente y los dinosaurios aún deambulaban por la Tierra yporque la RAM era demasiado costosa y necesitabas absolutamente ese espacio de intercambio para poder lograr cualquier cosa.El máximo se estableció en ese momento debido a los rendimientos decrecientes: es demasiado lento para tener que intercambiar tanta memoria, ya que el acceso al HDD es un factor de 1000 más lento que la RAM: ¡es bueno en una emergencia, pero no es realmente bueno para el uso diario! En ese momento, cuando se quedó sin espacio de intercambio, ¡era hora de agregar más RAM! (que sigue siendo cierto hoy).
En el presente:
Si no utiliza la hibernación y su memoria supera los 1 GByte, la nueva regla general es
round(sqrt(RAM))
dóndeRAM
está, obviamente, el tamaño de su RAM en GB.Si usa la hibernación, debe poder intercambiar la cantidad total de RAM + RAM ya intercambiada al disco, por lo que la fórmula se convierte en:
RAM+round(sqrt(RAM))
La regla de rendimientos decrecientes aún se mantiene hoy en día para el máximo, pero a menos que pruebe su uso real, tomar 2xRAM es solo una pérdida de espacio en disco , así que no use el máximo A menos que se quede sin espacio de intercambio utilizando las otras metodologías .
Todos estos juntos le dan la siguiente tabla: (últimas 3 columnas que denotan espacio de intercambio)
Lo anterior es solo una regla general; ¡No es la ley de la gravedad!
¡ Puede romper esta regla (a diferencia de la ley de gravedad) si su caso de uso particular es diferente!
Consejo profesional: siempre asigne SWAP al comienzo de un HDD ya que los cabezales necesitan moverse menos en el interior del disco.
Sí: en los SSD, ya no importa dónde ubique el área de intercambio, ya que usan túneles cuánticos en lugar de cabezas móviles y los SSD modernos usan todas sus celdas de memoria (incluso el espacio no asignado) para evitar la degradación cuántica.
Cómo probar si su uso de intercambio es diferente de la regla "genérica":
Solo ejecuta:
que le dará una lista de todos los programas en ejecución que se intercambian (con el que usa más espacio de intercambio en la parte superior)
Si está utilizando más de unos pocos KB: cambie el tamaño a más del mínimo, de lo contrario, no se moleste ...
Si estás en un servidor, deja de leer ahora: ¡estás listo!
Si está en un cliente de escritorio / portátil (no servidor), desea que su GUI sea lo más receptiva posible y solo se intercambie cuando realmente lo necesite . Ubuntu ha sido optimizado para intercambiarse temprano para el uso del servidor, pero en su cliente desea editar esa enorme imagen sin procesar de 250 megapíxeles
gimp
para que sea rápida , por lo que establecer su valorswappiness
en 10 evitará que el kernel se intercambie demasiado pronto, al tiempo que se asegura de que no t cambiar demasiado tarde:y añadir:
al final del archivo, guarde el archivo ( Ctrl+ XY+ Enteren nano) y ejecute un:
para recargar el parámetro o simplemente por los viejos tiempos, tome el enfoque Window $ y reinicie ... :-)
fuente
Respuesta de compromiso: depende del significado de "debería".
¿ Necesita una partición de intercambio en el sentido de que algo malo sucederá si no tiene una en las condiciones de funcionamiento que describe? No.
¿Es aconsejable tener una partición de intercambio en caso de que accidentalmente genere un ejército de cerdos de memoria para que tenga la oportunidad de matarlos antes de que el asesino OOM entre en acción? Si.
Si su RAM física "excede" en gran medida el uso de la memoria de datos de todos los programas que ejecutará simultáneamente en todo momento, entonces no hay beneficio de rendimiento al tener el intercambio. Si excede, pero no "en gran medida", puede haber un beneficio de rendimiento si el sistema operativo es capaz de cambiar la memoria de uso poco frecuente para mantener en la memoria los archivos de acceso más frecuente.
En resumen, es genial que tengas 16 GB de RAM. Pero, si también tiene un disco de 1TB, ¿no puede reservar 16GB para intercambiar? Es solo el 1.5% del disco.
fuente