intercambiar partición vs archivo por rendimiento?

62

¿Qué es mejor para el rendimiento? Una partición más cercana al interior del disco tendrá tiempos de acceso más lentos, y debemos esperar a que la unidad cambie entre el sistema operativo y las particiones de intercambio.

Por otro lado, una partición de intercambio omite todo el sistema de archivos, lo que permite escribir directamente en el disco, que puede ser más rápido que un archivo.

¿Cuál es el rendimiento de compensación?

¿Cuánto marca la diferencia tener un archivo de intercambio de tamaño fijo?

¿Es un caso que será más largo cambiar a la partición de intercambio, pero el rendimiento será mejor mientras esté en la partición de intercambio que si hubiera sido un archivo de intercambio?

Bill Gray
fuente
Solo por curiosidad. ¿Puede proporcionar detalles del sistema como la versión del kernel, la RAM, la partición y el esquema del sistema de archivos?
Viky
¿En qué sistema operativo estás buscando?
Mathieu Chateau
44
Para obtener información sobre Linux, consulte lkml.org/lkml/2005/7/7/326
Adam Monsen
¿Alguna actualización para la pregunta responde?
kokbira

Respuestas:

29
  1. En los discos duros, el rendimiento y la búsqueda son a menudo más rápidos hacia el comienzo del disco, porque esos datos se almacenan más cerca del área externa del disco, que tiene más sectores por cilindro. Por lo tanto, crear el intercambio al comienzo del disco podría mejorar el rendimiento.

  2. Para un kernel de Linux 2.6, no hay diferencia de rendimiento entre una partición de intercambio y un archivo de intercambio no fragmentado . Cuando swapon habilita una partición / archivo de intercambio, el kernel 2.6 encuentra en qué bloque de disco está almacenado el archivo de intercambio , de modo que cuando llega el momento de intercambiar, no tiene que ocuparse del sistema de archivos.

Por lo tanto, si el archivo de intercambio no está fragmentado, es exactamente como si hubiera una partición de intercambio en su misma ubicación. O dicho de otra manera, obtendría un rendimiento idéntico si usara una partición de intercambio sin formato, o la formateara con un sistema de archivos y luego creara un archivo de intercambio que llenara todo el espacio, ya que de cualquier manera en ese disco hay una región contigua utilizada para el intercambio, que el núcleo usa directamente.

Entonces, si uno crea el archivo de intercambio cuando el sistema de archivos es nuevo (lo que garantiza que no esté fragmentado y al comienzo del volumen), el rendimiento debe ser idéntico a tener una partición de intercambio justo antes del volumen. Además, si uno crea el archivo de intercambio en el medio del volumen, con archivos a cada lado, uno podría obtener un mejor rendimiento, ya que hay menos búsqueda de intercambio.

En Linux, si el archivo de intercambio se crea sin fragmentar y nunca se expande, no puede fragmentarse, al menos con sistemas de archivos normales como ext3 / 4. Siempre usará los mismos bloques de disco, que son contiguos.

Concluyo que el único beneficio de una partición de intercambio dedicada es la fragmentación garantizada cuando necesita expandirla; Si su intercambio nunca se expandirá, un archivo creado en un sistema de archivos nuevo no requiere una partición adicional.

Shay
fuente
55
Lo único que debe agregar aquí es que si su máquina está configurada para "suspender en el disco", lo que realmente está sucediendo es que las cosas en la memoria están escritas para intercambiarse. Para que esto funcione, el intercambio debe estar en su propia partición ya que el intercambio no puede estar en un sistema de archivos activo para que esto suceda. Por lo tanto, si tiene un servidor, probablemente no use esta función y podría usar un archivo de intercambio. Si tiene una computadora portátil, probablemente desee una partición de intercambio para poder "suspender el archivo" para la hibernación.
Nathan S. Watson-Haigh
@ NathanS.Watson-Haigh ¿Qué sucede con los datos que ya están en el intercambio? No se puede tirar a la basura.
XTF
3
@ NathanS.Watson-Haigh ¿Puedes vincular una fuente? Ubuntu 17.04 usa un archivo de intercambio por defecto. Sería sorprendente si no pudiera "suspender al disco".
Matthias Weiler
22

En realidad, no hace mucha diferencia siempre y cuando no uses archivos dispersos .

La creación de un archivo "normal" con dd asignará el archivo (si es posible) en una sola ejecución, mientras que la creación de un archivo disperso le indicará que tiene un archivo de 10 GB por ahí pero que no está utilizando todo el espacio. No estoy seguro de si mkswap no asignará el espacio de todos modos, pero generalmente un archivo de intercambio crecerá en el tiempo y, por lo tanto, no asignará un sector continuo (como parte del disco), sino que asignará bloques según sea necesario, lo que conducirá a fragmentación en el tiempo (por supuesto, dependiendo de su uso del disco)

Internamente, el kernel de Linux accederá a los bloques subyacentes de un archivo de intercambio más o menos directamente: no puedo encontrar el enlace en este momento, lo que sucede debajo del capó, tienes que confiar en mí a menos que alguien encuentre algo más oficial. Todo lo que puedo encontrar ahora es:

Todo esto se aplica solo a la línea 2.6 de los núcleos de Linux.

Si desea un rendimiento óptimo (¿y qué es eso realmente? ... el intercambio es lento, punto. Aumente la RAM para no cambiar por el mejor rendimiento), querrá usar una partición.

servidorhorror
fuente
18
Las versiones modernas de swapon se negarán directamente a trabajar con archivos dispersos formateados como swap, citando que el archivo tiene agujeros.
Tim Post
3

Esta es una pregunta interesante y he estado leyendo mucho sobre lo mismo. En general, una partición de intercambio es mejor que un archivo debido al sistema de archivos subyacente. Pero si siempre necesita aumentar el tamaño de su intercambio, entonces el archivo es una mejor opción. Hasta el kernel 2.4 se consideraba que una partición de intercambio es más rápida que un archivo, pero ahora con las mejoras del kernel 2.6, el rendimiento es casi el mismo.

Algo que encontré en internet también.

http://www.go2linux.org/swap-file-vs-swap-partition

y

http://www.sunmanagers.org/pipermail/summaries/2005-November/006913.html

Viky
fuente
Sin embargo, ninguno de esos enlaces explica realmente las razones detrás de sus decisiones.
Bill Gray
El razonamiento es que el archivo tendrá su sobrecarga del sistema de archivos subyacente. Si crea un archivo, podría fragmentarse. y dependiendo del archivo que se está almacenando en caché en el intercambio, las lecturas podrían ser lentas en comparación con una partición completa que es un sistema de archivos de intercambio en sí mismo.
Viky
Intenté cavar más y encontré un artículo relativo en wiki. Solo para ayudarlo, hay algunos parámetros de ajuste de intercambio que puede verificar. También verifique la explicación bajo implementación para Linux. Podría ayudar. en.wikipedia.org/wiki/Paging
Viky
Seguí una de las citas en el enlace wiki mencionado anteriormente y encontré un hilo interesante sobre el mismo problema. Puede que quieras comprobar eso. lkml.org/lkml/2005/6/28/427
Viky
Mencioné la sobrecarga del sistema de archivos en mi pregunta, pero no es tanto un bloqueo de rendimiento como tener una partición cerca del disco interno. Esa demora sería mayor que la sobrecarga del sistema de archivos.
Bill Gray
2

Creo que en la etapa en que estamos ahora, a menos que esté ejecutando una computadora portátil con una configuración que escribe los datos en el intercambio cuando se suspende / duerme, el intercambio realmente debería considerarse como "último recurso". Su mejor opción es poner suficiente RAM en una caja para que nunca pague en el disco.

Dicho esto, una partición es probablemente la mejor manera, en cuanto al rendimiento, aunque un archivo es más flexible. Solo asegúrese de que esté en un eje de 7200+ RPM.

Matt Simmons
fuente
1
¿Por qué una partición sería mejor en cuanto al rendimiento, cuando los tiempos de acceso pueden ser más un factor de retraso?
Bill Gray
55
Debido a que el uso de un archivo puede requerir más movimientos de encabezado, porque al encontrar la página para leer / escribir, los datos pueden estar en cualquier parte del sistema de archivos, por lo que es posible que sea necesario buscar estructuras fs, mientras que con una partición de intercambio cada página estará en una ubicación conocida dentro del dividir. Esto hace que el tiempo de acceso (según lo dispuesto para el rendimiento masivo) sea un factor diferenciador.
David Spillett
2
"No configure el intercambio a menos que necesite hibernar" es una opinión controvertida. A veces, cuando el sistema tiene poco intercambio de memoria real, puede permitir que el sistema se recupere. No tener intercambio puede limitarle la ejecución de programas que realizan grandes asignaciones de memoria pero que en realidad no tocan la mayor parte (por ejemplo, ciertas herramientas de depuración). A veces, una región de memoria ocupada pero inactiva se usa mejor como caché de disco y eso puede hacer que solo se pueda hacer un intercambio si hay intercambio disponible. Ver unix.stackexchange.com/questions/2658/… para discusión.
Anon
1
Lo que dijo @Anon. Chrome es un conocido consumidor de memoria, e incluso con <100 pestañas, mi computadora portátil de 16GB deja de responder durante varios minutos cuando la utilización de la memoria es de alrededor del 90% y no hay archivo de intercambio. Sorprendentemente, Ubuntu no tiene un mecanismo incorporado para advertir al usuario que el sistema operativo se está quedando sin memoria .
Dan Dascalescu
2

El pensamiento en nuestro trabajo es que, dado que un archivo de intercambio puede fragmentarse y la fragmentación ralentiza el acceso de intercambio, una partición es un mejor enfoque. Por supuesto, definir un archivo de intercambio de tamaño estático hace lo mismo, pero esto parece subjetivamente más ordenado.

¿Es este enfoque la única forma verdadera? Probablemente no, ya que la práctica se estableció hace aproximadamente 10 años. El único cambio importante en la tecnología de unidades en los años intermedios es la complejidad de los controladores RAID que utilizamos (todavía no somos lo suficientemente ricos para SSD). El aumento en el tamaño de las unidades significa que la partición de intercambio que creamos está más cerca del inicio de la unidad de lo que era cuando las unidades de 18 GB se enviaron de manera estándar, por lo que las velocidades de intercambio son aún más rápidas de lo que eran en los viejos tiempos.

Por supuesto, en nuestros sistemas Windows basados ​​en ESX, la posición del archivo de intercambio es completamente, completamente discutible. Hay tantas capas de virtualización entre el archivo de intercambio y los discos del disco físico que simplemente no importa. Pero lo mantenemos en una partición separada porque ese es solo el estándar.

sysadmin1138
fuente
44
Un archivo de intercambio no se fragmenta, ya que el núcleo utiliza un enfoque directo de mmap y nunca aumentará o reducirá el archivo. Haga +1 por su comentario sobre la virtualización: a menudo no importa.
parasietje
0

El uso de un archivo de intercambio podría usar un poco de memoria extra para la traducción de archivo a memoria. Estamos hablando de menos de 1 MB de memoria por 1 GB de intercambio. El caché del sistema de archivos NO almacena en caché los datos intercambiados, solo los datos de la organización, que deberían ser la mayoría de los requisitos de memoria adicionales.

Además de eso, dudo que pierdas un rendimiento razonable, excepto tal vez una vez cada 1000 veces una sola búsqueda de cabeza adicional.

Dato curioso, el uso de zswap junto con un archivo de intercambio que se expande dinámicamente da como resultado una aceleración impresionante de las operaciones de intercambio a muy bajos costos sin usar.

Crass Spektakel
fuente
1
¿Puede proporcionar algún tipo de justificación para sus reclamos? Esto parece bastante anecdótico.
austinian