Mejorando la Performance en Sistemas Linux/Unix | ||
---|---|---|
Anterior |
El siguiente programa permite ejercitar la memoria f�sica (y el swap con los valores adecuados) con el fin de aprender a observar la paginaci�n (con vmstat):
#include <stdio.h> #include <stdlib.h> int main(int argc,char **argv) { char *ptr; unsigned long z,k,r; unsigned long pag,off; unsigned char x; unsigned long r1,r2,r3,r4; if(argc!=3) { fprintf(stderr,"Use ram_stress <#KB> <#repeticiones>\n"); return 2; } k=atoi(argv[1]); r=atol(argv[2]); if(k<1 || r<1) { fprintf(stderr,"Se requiere valor positivo de KB y repeticiones\n"); return 1; } ptr=malloc(1024L*k); if(ptr==NULL) { fprintf(stderr,"malloc error: falta memoria?\n"); return 1; } for(z=0;z<r;z++) { r1=rand(); r2=rand(); r3=rand(); r4=rand(); pag=labs(r1*r2)%k; off=r3%1024; x=r4%256; ptr[1024*pag+off]=x; } free(ptr); return 0; }Por ejemplo, para un sistema de 512Mb, el siguiente comando obliga a utilizar aproximadamente 50Mb para pruebas (el segundo argumento es el n�mero de "pruebas" y debe ajustarse gradualmente dependiendo de la duraci�n deseada del test.)
$ time ./ram_stress 50000 1200000 real 0m0.842s user 0m0.670s sys 0m0.151sEn mi sistema (Athlon XP-2000) este comando tarda menos de un segundo en completarse. En cambio, si se reserva m�s memoria (a�n manteniendo el n�mero de pruebas, es decir, haciendo el mismo trabajo) el tiempo se eleva a m�s de 1 minuto debido a que se ingresa al r�gimen de carencia de memoria:
$ time ./ram_stress 500000 1200000 real 1m9.893s user 0m1.027s sys 0m1.896sUd. deber�a hacer estas pruebas con diferentes valores para el bloque de memoria. Observar� c�mo la paginaci�n se hace cada vez m�s pronunciada conforme solicitamos un bloque que se acerca cada vez m�s a la memoria f�sica instalada.