Tamaño de la swap en Linux

Hace un mes salía en barrapunto una noticia acerca del tamaño óptimo para la swap en linux, y tras dedicarle algo de tiempo las conclusiones que he sacado vienen siendo que swap hay que usar la justa :D.

Ni tiene sentido usar demasiada, ya que con las cantidades de RAM que hay hoy en día no llega a emplearse, ni se debe eliminar, ya que es necesaria para agilizar la localización de fragmentos libres para nuevos malloc()s.
Otro método que se utiliza para agilizar la reserva de memoria es eliminar comprobaciones, llegando incluso a ceder más memoria a los programas de la que realmente hay libre. Simplemente a un malloc() se responde de forma afirmativa, y es sólo a la hora de escribir por primera vez cuando se localiza el espacio de memoria reservado. Esta política es proclive a producir algún que otro problema de vez en cuando ante un Out of Memory (OOM), y esa es precisamente la ocupación del OOM killer, la de resolver estos problemas no muy frecuentes de la forma más rápida posible: eligiendo un proceso y matándolo.

Normalmente en un entorno de escritorio, a excepción de ciertas aplicaciones que consumen cantidades desorbitadas de memoria por mal funcionamiento (p.ej. firefox) o por que son así (eclipse, aplicaciones de cálculo, etc.), las necesidades de swap no son en absoluto grandes, y normalmente con la RAM que se instala actualmente en los ordenadores (medio o un giga) suele ser maś que suficiente.

No obstante, la swap no es totalmente prescindible. Los procesos dormidos (los que esperan alguna señal o evento) normalmente son enviados a swap con la finalidad de liberar memoria principal que pueda ser usada como buffer de disco. Así mismo, la swap también ayuda a encontrar rápidamente un hueco libre para las aplicaciones que soliciten un espacio de memoria (malloc()s y calloc()s) pese a la fragmentación que pueda haber.

El único caso donde se podría requerir un buen espacio de swap es en el caso de querer suspender el sistema, para lo que linux copia íntegramente el contenido de la memoria principal al swap, en cuyo caso el swap debe tener capacidad suficiente para copiar toda la RAM y además mantener lo que estuviera ya guardado en el swap. La política que sigue Windows para esto es ligeramente diferente, ya que se copia al sistema de ficheros, y no al swap.

Windows de hecho utiliza como espacio de intercambio un fichero de tamaño variable contenido sobre el sistema de ficheros raíz. Este enfoque, igualmente válido en Linux, no está muy popularizado a pesar de no haber mayor penalización de velocidad.
Contrariamente a lo que se podría pensar la conversión de dirección virtual a bloque de disco es inmediata, ya que al realizar el swapon se hace una tabla de equivalencias que cubre y agiliza todas estas conversiones sin necesidad de apoyo por parte del driver del sistema de ficheros.
La única restricción es que el fichero debe crearse en la infancia del sistema de ficheros, para evitar que esté muy fragmentado, ya que el kernel puede rechazarlo como swap.
Igualmente, el fichero es de tamaño estático, y no dinámico como suele ocurrir en Windows

Otra opción totalmente experimental consiste en utilizar parte de la memoria de al tarjeta de vídeo, en vez del disco duro, como espacio de intercambio.