Muchas veces para poder realizar pruebas de rendimiento necesitamos tener archivo con tamaños concretos, por ejemplo para medir la latencia de nuestros servidores Apache HTTP con JMeter.
Para ello, podemos utilizar varios comandos, aunque yo principalmente utilizo dos: <dd> y <mkfile>.
Vamos a crear un archivo de <8Mb> utilizando primero <dd> y luego <mkfile>. El formato del comando <dd> es el siguiente:
dd if={device_origen} of={destino} bs={tamaño de bloque} count={número de veces}Por lo tanto, si queremos crear un archivo de 8Mb, podemos tener un BlockSize (bs) de 8k y realizar la operación 1024 veces. Vamos a utilizar el device </dev/zero> que nos va a crear un archivo lleno de "ceros".
# time dd if=/dev/zero of=test.dd bs=8k count=1024Pero si queremos que esté lleno de contenido variable podemos utilizar el device </dev/random> para que nos generes secuencias pseudo aleatorias, por ejemplo,
1024+0 registros dentro
1024+0 registros fuera
real 0m0.082s
user 0m0.006s
sys 0m0.043s
# time dd if=/dev/random of=test.dd_random count=1024
0+1024 registros dentro
0+1024 registros fuera
real 1m52.687s
user 0m0.012s
sys 1m50.498s
Podemos comprobar con un visor octal <od> como al crear el archivo con el device </dev/zero> está lleno de ceros -como es lógico- pero, cuando hacemos lo mismo con el archivo creado utilizando el device </dev/radom> nos ha creado un archivo completamente distinto.
Esto será muy importante cuando utilicemos servicios de compresión -por ejemplo mod_gzip, mod_defalte- ya que comprimirá prácticamente al 99% el archivo creado con </dev/zero> haciéndonos creer que el rendimiento será muy superior al real.
# od -c test.ddY si comprimimos los archivos utilizando <gzip> y su máxima compresión <-9>, veremos lo que os he comentado,
0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
40000000
# od -c test.ddrandom |head -3
0000000 017 260 Ò - ; Ð Ã ¿ x N < 230 ü 217 a e
0000020 O æ 254 k û ö c 4 û 257 - Ã { þ 271
0000040 Æ Ù l 243 Ü ê å å ] 217 f > l C É q
# ls -lComo vemos, el archivo que hemos creado utilizando <dd if=/dev/zero> comprimido tiene un tamaño de 551 bytes y el creado con <dd if=/dev/random> no solo no ha sido comprimido, sino que ha aumentado de tamaño -por las cabeceras de GZIP-
total 2048
-rw-r--r-- 1 root root 524288 may 20 11:42 test.dd
-rw-r--r-- 1 root root 524288 may 20 11:13 test.ddrandom
# gzip -9 test.ddrandom
# gzip -9 test.dd
# ls -l
total 1056
-rw-r--r-- 1 root root 551 may 20 11:42 test.dd.gz
-rw-r--r-- 1 root root 524400 may 20 11:13 test.ddrandom.gz
Por el contrario, si no tenemos intención de utilizar sistemas de compresión, o queremos hacer métricas de uso de disco, podemos utilizar el comando <mkfile> con el siguiente formato
mkfile {tamaño}{unidad} {nombre archivo}Donde unidad será k para Kb, m para Mb. Por ejemplo, para crear el mismo archivo de 8Mb, utilizaremos el siguiente comando.
# time mkfile 8m test.mkfileComo vemos, <mkfile> genera un archivo utilizando como device </dev/zero> al igual que <dd> pero de una forma más sencilla
real 0m0.049s
user 0m0.003s
sys 0m0.037s
# od -c test.mkfile
0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
*
40000000
Referencias
No hay comentarios:
Publicar un comentario