mejorar el i-o de disco para escrituras pequeñas, mejorar performance y cuidar el disco
DESCRIPTION
Como mejorar el rendimiento del disco durp en UbuntuTRANSCRIPT
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.txtBueno, 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 caches 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 of255 tells hdparm to disable Advanced Power Management
altogetheron 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.