Revista Informática

Cómo Hacer Benchmarks a Sistemas Unix

Publicado el 03 septiembre 2013 por Codehero @codeheroblog
Cómo Hacer Benchmarks a Sistemas Unix

Muchas veces nos hemos encontrado en la situación que deseamos comparar el rendimiento y capacidades de varios computadores; sin embargo las diferencias entre tecnologías de hardware puede ser dificil de indetificar cual es el mejor a simple vista, para estos casos es de gran utilidad herramientas que sean capaces otorgar una calificación o índice que sirva de comparación, este proceso se les conoce como benchmark.


¿Qué es un benchmark?

Las herramientas de benchmarking están compuestas de una serie de pruebas y procedimientos que consisten en aplicar a un sistema diferentes algoritmos conocidos sobre los cuales se tiene una estadistica base comparativa comprobada y en base a esto se determina un puntaje acorde al comportamiento resultante del sistema.

Dichas pruebas generan altos niveles de carga y estrés para lograr determinar las capacidades del objetivo.

En el mercado existen distintas herramientas de benchmarking enfocadas a diferentes areas, el area particular de evaluación de capacidades en video y renderización es uno de los más comunes, el cual pone bajo diferentes pruebas el hardware DirectX para determinar el rendimiento del sistema para juegos de alta calidad. También existen herramientas como Geekbench es una de las más conocidas en OS X.


UnixBench

Para nuestro caso utilizaremos esta herramienta que cuenta con diferentes estrategia y algoritmos de benchmarking como el Dhrystone, el Whetstone y otras más. Nos ofrece la ventaja de ser compatible con múltiples sistemas Unix y es utilizado ampliamente, sobre todo para determinar rendimiento de diferentes proveedores de VPS (Servidores Privados Virtuales).

Primero descarguemoslo:

$ wget https://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz

Si tu sistema no posee wget lo puedes hacer por curl tambien:

$ curl https://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz -o UnixBench5.1.3.tgz

Luego lo descomprimimos y compilamos:

$ tar xzf UnixBench5.1.3.tgz
$ cd UnixBench
$ make

Finalmente ejecutamos la herramienta:

$ ./Run

Esto dará inicio la proceso de benchmarking, luego de varios minutos obtendremos los resultados, de muestra mostremos este de una instancia Micro de AWS:

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: ip-10-155-221-123: GNU/Linux
   OS: GNU/Linux -- 3.2.0-40-virtual -- #64-Ubuntu SMP Mon Mar 25 22:07:32 UTC 2013
   Machine: i686 (i386)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz (3591.3 bogomips)
          Hyper-Threading, MMX, Physical Address Ext, SYSENTER/SYSEXIT
   16:47:22 up 20 days,  3:35,  1 user,  load average: 0.16, 0.06, 0.06; runlevel 2

------------------------------------------------------------------------
Benchmark Run: Tue Aug 27 2013 16:47:22 - 17:16:48
1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables        7379217.5 lps   (10.1 s, 7 samples)
Double-Precision Whetstone                      864.0 MWIPS (20.7 s, 7 samples)
Execl Throughput                                519.5 lps   (29.7 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        175877.9 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks           48260.0 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks        453880.0 KBps  (30.1 s, 2 samples)
Pipe Throughput                              123147.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  13587.6 lps   (10.1 s, 7 samples)
Process Creation                                894.4 lps   (30.1 s, 2 samples)
Shell Scripts (1 concurrent)                    516.9 lpm   (60.2 s, 2 samples)
Shell Scripts (8 concurrent)                     68.2 lpm   (61.6 s, 2 samples)
System Call Overhead                          75310.3 lps   (10.1 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0    7379217.5    632.3
Double-Precision Whetstone                       55.0        864.0    157.1
Execl Throughput                                 43.0        519.5    120.8
File Copy 1024 bufsize 2000 maxblocks          3960.0     175877.9    444.1
File Copy 256 bufsize 500 maxblocks            1655.0      48260.0    291.6
File Copy 4096 bufsize 8000 maxblocks          5800.0     453880.0    782.6
Pipe Throughput                               12440.0     123147.2     99.0
Pipe-based Context Switching                   4000.0      13587.6     34.0
Process Creation                                126.0        894.4     71.0
Shell Scripts (1 concurrent)                     42.4        516.9    121.9
Shell Scripts (8 concurrent)                      6.0         68.2    113.6
System Call Overhead                          15000.0      75310.3     50.2
                                                                   ========
System Benchmarks Index Score                                         155.6

En el informe podemos notar algunos detalles del equipo, como la cantidad y tipo de unidades de procesamiento.

En los resultados observemos que para cada tipo de prueba se tiene un valor base, el valor resultante de la prueba y la calificación otorgada. Finalmente observamos la calificación final otorgada por la herramienta (155.6).

Hagamoslo en otro sistema para comparar, en un Linode Basico obtenemos algo así:

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: localhost: GNU/Linux
   OS: GNU/Linux -- 3.9.3-x86-linode52 -- #1 SMP Mon May 20 09:32:28 EDT 2013
   Machine: i686 (i386)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
          Hyper-Threading, MMX, Physical Address Ext
   CPU 1: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
          Hyper-Threading, MMX, Physical Address Ext
   CPU 2: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
          Hyper-Threading, MMX, Physical Address Ext
   CPU 3: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
          Hyper-Threading, MMX, Physical Address Ext
   CPU 4: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
          Hyper-Threading, MMX, Physical Address Ext
   CPU 5: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
          Hyper-Threading, MMX, Physical Address Ext
   CPU 6: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
          Hyper-Threading, MMX, Physical Address Ext
   CPU 7: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
          Hyper-Threading, MMX, Physical Address Ext
   13:06:49 up 20 min,  1 user,  load average: 0.06, 0.19, 0.21; runlevel 2

------------------------------------------------------------------------
Benchmark Run: Tue Aug 27 2013 13:06:49 - 13:35:05
8 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       14353651.1 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2511.1 MWIPS (10.0 s, 7 samples)
Execl Throughput                               1547.1 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        432072.9 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          112451.4 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1100643.8 KBps  (30.0 s, 2 samples)
Pipe Throughput                              622147.3 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  40320.8 lps   (10.0 s, 7 samples)
Process Creation                               3111.7 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   4769.6 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1588.5 lpm   (60.0 s, 2 samples)
System Call Overhead                         482402.5 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   14353651.1   1230.0
Double-Precision Whetstone                       55.0       2511.1    456.6
Execl Throughput                                 43.0       1547.1    359.8
File Copy 1024 bufsize 2000 maxblocks          3960.0     432072.9   1091.1
File Copy 256 bufsize 500 maxblocks            1655.0     112451.4    679.5
File Copy 4096 bufsize 8000 maxblocks          5800.0    1100643.8   1897.7
Pipe Throughput                               12440.0     622147.3    500.1
Pipe-based Context Switching                   4000.0      40320.8    100.8
Process Creation                                126.0       3111.7    247.0
Shell Scripts (1 concurrent)                     42.4       4769.6   1124.9
Shell Scripts (8 concurrent)                      6.0       1588.5   2647.6
System Call Overhead                          15000.0     482402.5    321.6
                                                                   ========
System Benchmarks Index Score                                         622.6

------------------------------------------------------------------------
Benchmark Run: Tue Aug 27 2013 13:35:05 - 14:03:00
8 CPUs in system; running 8 parallel copies of tests

Dhrystone 2 using register variables       63707678.6 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                    17187.2 MWIPS (10.3 s, 7 samples)
Execl Throughput                               7657.5 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        589907.5 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          151504.8 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1795849.7 KBps  (30.0 s, 2 samples)
Pipe Throughput                             3272519.5 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 362213.8 lps   (10.0 s, 7 samples)
Process Creation                              13809.3 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  16251.5 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   2139.6 lpm   (60.1 s, 2 samples)
System Call Overhead                        3129971.9 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   63707678.6   5459.1
Double-Precision Whetstone                       55.0      17187.2   3124.9
Execl Throughput                                 43.0       7657.5   1780.8
File Copy 1024 bufsize 2000 maxblocks          3960.0     589907.5   1489.7
File Copy 256 bufsize 500 maxblocks            1655.0     151504.8    915.4
File Copy 4096 bufsize 8000 maxblocks          5800.0    1795849.7   3096.3
Pipe Throughput                               12440.0    3272519.5   2630.6
Pipe-based Context Switching                   4000.0     362213.8    905.5
Process Creation                                126.0      13809.3   1096.0
Shell Scripts (1 concurrent)                     42.4      16251.5   3832.9
Shell Scripts (8 concurrent)                      6.0       2139.6   3566.0
System Call Overhead                          15000.0    3129971.9   2086.6
                                                                   ========
System Benchmarks Index Score                                        2146.2

Ya que este tipo de VPS posee 8 unidades de procesamiento, la herramienta ejecutó 2 conjuntos de pruebas, la primera ejecutó una copia de cada una de las pruebas (al igual que en la de AWS) y en la segunda ejecutó 8 copias paralelas de cada prueba, por lo que en este caso el primer conjunto de resultados sería el más apropiado para comparar con el de AWS.

En el caso de Linode, al tener 8 unidades de procesamiento obtenemos un resultado mucho mayor al de AWS (622.6), pero te preguntarás:

¿No debería ser mínimo 8 veces mayor ya que tiene 8 unidades de CPU además de ser de mayor velocidad (2.27GHz contra 2.0GHz)?

La instancia básica de Linode especifica que en efecto se otorgan 8 unidades de CPU; sin embargo se ofrece la menor prioridad de uso, es decir, como los VPS funcionan varios en conjunto compartiendo recursos de un mismo servidor físico, el poder completo de los 8 núcleos no estarán disponibles para uso exclusivo y mucho menos en el caso de tener una instancia con la menor prioridad.

Inicialmente se pretendía tomar como caso de estudio una instancia de Digital Ocean, lamentablemente ya no está disponible ningún plan de prueba, ni siquiera teniendo cupones ya que sin un método de pago comprobado el sistema no permite la creación de instancias, por lo que no se pude tomar en cuenta para la comparación en este escrito.


Conclusión

La semana pasada aprendimos a poner bajo prueba las capacidades de un servidor web, ahora también sabemos como determinar las capacidades de un sistema. Recuerda que no debes basar tu criterio únicamente en los resultados que obtengas, debes tomar en cuenta el objetivo para el cual esta destinado tu sistema, quizás necesites un sistema con bajo poder de procesamiento pero con mucha memoria (como para bases de datos grandes de Redis) o con accesos veloces a disco (alta persistencia de datos), el poder de procesamiento no lo es todo. Estas practicas nos permiten hacer elecciones objetivas cuando nos vemos en la necesidad de optimizar los procesos o buscar alguna solución que se adapte mejor a nuestros objetivos.


Volver a la Portada de Logo Paperblog