11 votos

Deseche el fondo en las particiones swap en Linux + SSD

Problema

Quiero habilitar el fondo RECORTE de operaciones en una partición de intercambio dentro de un SSD de disco en Linux. Según varios artículos, por ejemplo este, que el kernel detecta esta configuración y automáticamente realiza el descarte de las operaciones, pero en mis pruebas, parece que no funciona a pesar de que "descartar" la opción de montaje se utiliza para obligar a este comportamiento.

Escenario

  • Debian Wheezy ejecutando Linux 3.2.0
  • SSD de disco: 1 x 120 GB OCZ Vertex 3 MI
  • 2GB de swap "normal" de la partición, w/o de otras capas (LVM, RAID, etc.)

De fondo

Estos son los pasos que debo seguir para comprobar si el fondo de RECORTE está trabajando en la partición swap:

  1. Soporte TRIM: compruebe si el disco SSD soporta los comandos TRIM y el kernel flags el dispositivo como en la no-rotación:

    # hdparm -I /dev/sda | grep TRIM
     * Data Set Management TRIM supported (limit 1 block)
     * Deterministic read data after TRIM
    
    # cat /sys/block/sda/queue/rotational
    0
    
  2. Cambiar relleno-up: montar la partición, limpie todas las VM cachés y configurar Linux para intercambiar de forma agresiva configuración de la vm.el swappiness a 100. A continuación, ejecute una secuencia de comandos que asigna toda la memoria disponible y de las fuerzas del kernel para iniciar intercambio:

    # swapon [--discard] /dev/sda2
    # echo 3 > /proc/sys/vm/drop_caches
    # echo 100 > /proc/sys/vm/swappiness
    # ./fill-up-memory.up
    

    La secuencia de comandos se ejecuta en un servidor con 32 GB de memoria física + 2 GB de la partición swap y crea un ~33,8 GB de objeto en la memoria, que es suficiente para llenar toda la memoria y empezar de intercambio. Este es un ejemplo de un script que consigue este comportamiento:

    #!/usr/bin/python
    
    mem = 33.8
    testing = 'A' * int(1024 * 1024 * 1024 * mem)
    raw_input()
    
  3. Verificación de intercambio de contenido: "swapon-s" muestra que el 100% de la memoria de intercambio o swap se utiliza. El uso de "hdparm-leer-sector" puedo comprobar las primas-contenido de la partición de intercambio de los sectores y de todos los bytes se establece en "4141", la correspondiente notación hexadecimal para el "Un" carácter, todo funciona como se espera. Este es un ejemplo de script para leer y sector por sector, el contenido de la partición swap:

    #!/bin/bash
    
    for sector in `seq 194560 4100095` ; do
        hdparm --read-sector $sector /dev/sda
    done
    

NOTA: usted puede conseguir el inicio/final del sector de la partición swap utilizar parted, cfdisk, etc.

Cuando puedo detener la secuencia de comandos se libera toda la memoria, incluyendo el intercambio de asignaciones, "swapon-s" devuelve sin swap de uso en el sistema. En este punto, se espera que se inicia Linux eliminar el contenido de la partición de intercambio en el fondo, pero no funciona, el contenido de los sectores es todavía "4141", incluso después de varias horas.

He hecho varias pruebas y parece que Linux sólo realiza un completo descartar cuando la partición está activada usando swapon() llamada al sistema, pero nunca en el fondo, a pesar de que "descartar" opciones de montaje está habilitado en /etc/fstab.

La investigación adicional: blkdev_issue_discard() es el núcleo de la función de encargado de enviar los comandos TRIM subyacente dispositivos SSD, hay dos únicas referencias a esta función en mm/swapfile.c:

  • discard_swap() se llama durante swapon() proceso, si "descartar" el monte está habilitada la opción descarta todo el contenido, esto funciona como se esperaba.
  • discard_swap_cluster() se debe descartar el contenido de un clúster de intercambio, pero parece que nunca se realiza un comando TRIM.

Pregunta: ¿cuál es el comportamiento esperado de Linux swap + dispositivos SSD? Se debe descartar todo gratis sectores/páginas o sólo cuestión de un total inicial-descartar cuando la partición está activada durante el proceso de arranque? Gracias.

-1voto

Signal15 Puntos 656

Cuando puedo detener la secuencia de comandos se libera toda la memoria, incluyendo el intercambio asignaciones, "swapon-s" devuelve sin swap de uso en el sistema. En este punto, se espera que se inicia Linux eliminar el contenido de la partición de intercambio en el fondo, pero no funciona, el contenido de la sectores es todavía "4141", incluso después de varias horas.

El contenido de swap son efectivamente 'descartados" cuando swapon -s devuelve "sin swap utilizado". El sistema no va a sobrescribir el contenido de los bloques (lleno w/ "4141") ya que es un SSD y excesiva escribe puedan acortar la vida de la SSD. (Al menos, eso es lo que me llevo de la documentación)

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: