Sie sind auf Seite 1von 4

MEJORAR EL I/O DE DISCO PARA ESCRITURAS PEQUEAS, MEJORAR

PERFORMANCE Y CUIDAR EL DISCO


Para el que no entendio el titulo del post, en lenguaje comn, como para que lo entienda mi "hermana",
son unos seteos que reducen el uso de entrada y salida de datos del disco y por consiguiente el uso del
mismo, en lectura y escritura de datos pequeos.
Esto no solo es til porque usamos menos el disco, una pieza que tiene un desgaste mayor a otro
componente de la PC, por ser mecnico, a menos que usen SSD, que no es mi caso.
Sino porque ademas, consume menos batera, en caso de tener una notebook, el uso de la ram que del
HDD.
Existen unos valores que pueden tocarse en sysctl para conseguir esto.
Primero voy a pegar la documentacin del subsistema vm del kernel Linux, para el que quiera leer mas
y aprender.
http://www.kernel.org/doc/Documentation/sysctl/vm.txt
Bueno, ahora si, primero algunos "tuneos"

Si tienen mas de 2gb de RAM, digamos que hoy en da es barata, etc, todos tienen al menos 4GB, as
que, vamos a reducir el uso de swap, aadiendo esta linea a /etc/sysctl.conf
vm.swappiness = 1
El valor por defecto es de 60, al bajar su valor, indicamos que use mas cach y menos swap.
La cach es una clase de memoria RAM esttica de acceso aleatorio (SRAM o Static Random Access
Memory). Se situ entre la Unidad Central de Procesamiento (CPU) y la memoria RAM y se presenta
de forma temporal y automtica para el usuario proporcionado acceso rpido a los datos de
uso ms frecuente. Algo que vimos como vaciar en el post de "freeram", que vaciaba las caches de la
RAM.
Al colocar este valor, le indicamos al sistema, que use menos Swap y use mas cach y RAM, incluso
con el valor 1, es valido, dado que si realmente necesita swap, el sistema solo la va a usar, no es tonto
el kernel!.

Luego, otra linea:

vm.vfs_cache_pressure = 50
Esto controla la tendencia del ncleo para recuperar la memoria que se utiliza para el almacenamiento
en cach de objetos de directorio e inodo (dentries e inodes). El valor predeterminado de
vfs_cache_pressure es de 100, el ncleo intentar reclamar dentries e inodos en una "justa" relacin con
respecto a la memoria intermedia de pginas (pagecache) y swapcache. La disminucin de
vfs_cache_pressure hace que el ncleo prefiera conservar dentries y caches de inodos. El aumento de
vfs_cache_pressure ms all de 100 hace que el ncleo quiera recuperar dentries e inodos, es decir,
liberarlos, pasndolos de RAM a disco.
As que un valor alto va a generar mayor trafico I/O de disco y un valor menor a 100, una disminucin
del mismo.
Poner un valor bajo, permite que las operaciones se realicen en RAM, y as ganar velocidad, como
bajar la cantidad de operaciones en disco, aumentando su vida til.
El valor intermedio recomendado, es el que vimos, 50.
Otra linea:
vm.dirty_ratio = 30
El mayor porcentaje de su memoria que se puede utilizar para almacenar los "datos sucios". Si lo ajusta
a un valor bajo, el kernel va a eliminar pequeas escrituras en el disco con mas frecuencia. Los valores
ms altos permiten el pequeas escrituras acumularse el stack (pila) de la memoria. Van a ir al disco en
streams (pedazos) solo los pedazos mas grandes.
En servidores con 32gb de RAM, suelen ponerse valores de 80 o mas, para que sean veloces y no usen
sus lerdos discos, por mas rpidos que sean, siempre sern mas lentos que una RAM, tengan eso en
mente
Otra linea:
vm.dirty_background_ratio = 10
El "vm.dirty_background_ratio" dice en qu proporcin debe el kernel iniciar la tarea en segundo plano
de la escritura de "pginas sucias". El "vm.dirty_ratio" dice en qu proporcin de todas las operaciones
de I/O estas se escribirn sincrnicamente, lo que significa que no podemos hacer llamadas de I/O sin
esperar a que el dispositivo subyacente las complete (lo cual es algo que nunca queremos que suceda).
As que bajamos su valor a 10% (en mi caso)
Otra linea:
vm.dirty_writeback_centisecs = 1500

Esto le indica al kernel cada cuantos segundos debe escribir los datos al disco. El valor por defecto es
de 500, que equivale a 5 segundos, lo habrn ledo por ah cuando apenas salio ext4.
Si no suelen apagar la PC a lo bestia, o tener cortes de luz, es decir, tienen batera, una UPS, o no
sufren cortes, aumentan este valor a 1000, quedando en 10 segundos. Cada 10 segundos el kernel
volcar los datos al disco, a menos que sea forzado con el comando sync.
Asimismo, si ustedes tienen cortes de luz frecuentes o les falla un cable, pueden bajarlo a 2 segundos, o
1, poniendo 200 o 100 respectivamente. La unidad son centisegundos, o sea, centsimas de segundo.
Otro Tip Importante
Colocar en /etc/rc.local, este valor:
hdparm -B 255 /dev/sda
Nos dice el manpage de hdparm:
"A value of 255 tells hdparm to disable Advanced Power Management altogether on the drive (not all
drives support disabling it, but most do)"
Eso quiere decir, que bajo ninguna circunstancia, el disco bajar sus revoluciones ni nada, como suele
pasar en Windows, donde los discos duran menos en las notebook, por bajar revoluciones y a veces
tocar algun plato.

Con estos seteos, obtenemos un sistema que usa poco el disco, y responde rapido ante cosas violentas,
por ejemplo, hacer un make -j400 para compilar un kernel, y cuando la RAM, en mi caso, se llena hasta
3.7GB (tengo 4GB), darle un crtl+c y que corte el proceso sin freezar el sistema y se recupere
rapidamente.
Asimismo, cuidamos el disco y usamos mas la ram, volcamos pequeas cantidades de datos al disco en
intervalos medianos, y no un volcado enorme cada mucho tiempo, lo que es mas trabajo, ruido y
vibracion al mismo.
Por otro lado, usamos toda la paginacion de RAM posible, si, los datos sucios, asi estan en la
documentacion, para minimizar el acceso a disco.
Y por ultimo desactivamos la posibilidad que ante una baja de bateria o algo, el disco baje revoluciones
y toque sus platos.
Obvio que estos valores pueden cambiarse, segun test, bechmark, necesidad, no es lo mismo un server
de mysql, que uno de correo, como tampoco otro que es un web server ni un desktop.
Cada equipo tiene una necesidad distinta, el mismo Torvalds dice que es bueno tunear esto, pero que no
hay una medida justa para todos.

En mi caso, estos valores, junto al post sobre heavy disk I/O, fueron los optimos, para no reiniciar
la PC, pueden usar el script de heavy ( LINK ) load I/O y modificarlos, y hacer sysctl -p, el cual
actualiza los datos, y ajustar bien los valores, que van, en dirty de 20 a 40, y en background de 5 a
15.

Das könnte Ihnen auch gefallen