lunes, 15 de abril de 2013

Monitorización: Bublesort, Quicksort y Mergesort.



En los sistemas GNU/Linux existen una gran variedad de comandos básicos de monitorización tales como: time, vmstat, iostat, gcov, gprof, top y otros. A continuación se desarrolla una experiencia del uso de dichos comandos para monitorizar distintos algoritmos de ordenamiento desarrollados en C, tales como: Bublesort, Quicksort y Mergesort. Estos algoritmos se prueban en base a un archivo de aproximadamente 20 MBytes que contiene numeros al azar linea a linea. El objetivo de cada ordenador es recibir este archivo y generar un nuevo archivo con los numeros ordenados. Finalmente, en base a los resultados arrojados por los diferentes comandos de monitorización, se comparan los 3 algoritmos concluyendo cual resulta ser más eficiente.

Se desarrollan 2 experiencias distintas con los 3 algoritmos: la monitorizacion ordenando el archivo de 20mb desde un disco interno a un disco externo, y la monitorización ordenando el archivo en el mismo disco interno.

A continuación se presentan los videos correspondientes a cada experiencia:

I) Ordenamiento desde un Disco Interno a un Disco Externo.

    A.- Bublesort.


    B.- Quicksort.


    C.- Mergesort.


II) Ordenamiento en el mismo Disco Interno.


Resultados de la Monitorización.

I) Ordenamiento desde un Disco Interno a un Disco Externo.

    A.- Bublesort.

  • Tiempo de ejecución usando time:

    16 horas y más (no se conocio el limite durante esta experiencia).

  • Estadisticas de tiempo usando gprof:

    Por la larga duración del programa no fue posible generarlas.

  • Graficas hechas con gnuplot utilizando los datos recopilados con iostat y vmstat:


    • Lectura y Escritura en Kb/s en el disco interno durante el tiempo que duro la experiencia.

 

    • Lectura y Escritura en Kb/s en el disco externo durante el tiempo que duro la experiencia.

  

    •  Uso de CPU durante el tiempo que duro la experiencia.


     B.- Quicksort.

  • Tiempo de ejecución usando time:

    real 34m11.146s
    user 1m17.861s
    sys 20m39.873s

  • Estadisticas de tiempo usando gprof:

    Flat profile:

    Each sample counts as 0.01 seconds.
      %   cumulative   self              self     total          
     time   seconds   seconds    calls   s/call   s/call  name   
     99.88     29.99    29.99        1    29.99    30.03  quicksort
      0.12     30.02     0.04 25819006     0.00     0.00  swap
      0.03     30.03     0.01  6000001     0.00     0.00  escribirUnNumero
      0.03     30.04     0.01  5999000     0.00     0.00  choose_pivot
      0.03     30.05     0.01        1     0.01    30.05  ordenarArchivo


  • Graficas hechas con gnuplot utilizando los datos recopilados con iostat y vmstat:

    • Lectura y Escritura en Kb/s en el disco interno durante el tiempo que duro la experiencia.


    • Lectura y Escritura en Kb/s en el disco externo durante el tiempo que duro la experiencia.


    •   Uso de CPU durante el tiempo que duro la experiencia.

 

    C.- Mergesort.

  • Tiempo de ejecución usando time:

    real 32m35.778s
    user 0m2.812s
    sys 20m58.487s

  • Estadisticas de tiempo usando gprof:

    Flat profile:

    Each sample counts as 0.01 seconds.
      %   cumulative   self              self     total          
     time   seconds   seconds    calls  ms/call  ms/call  name   
     55.99      0.33     0.33  5999999     0.00     0.00  mezclar
     39.02      0.56     0.23        1   230.23   560.55  mezcla
      3.39      0.58     0.02        1    20.02   590.58  ordenarArchivo
      1.70      0.59     0.01  6000001     0.00     0.00  escribirUnNumero


  • Graficas hechas con gnuplot utilizando los datos recopilados con iostat y vmstat:

    • Lectura y Escritura en Kb/s en el disco interno durante el tiempo que duro la experiencia.

 

    •  Lectura y Escritura en Kb/s en el disco externo durante el tiempo que duro la experiencia.

 

    •   Uso de CPU durante el tiempo que duro la experiencia.



 II) Ordenamiento en el mismo Disco Interno.

     A.- Bublesort.

  •  Tiempo de ejecución usando time:

    16 horas y más (no se conocio el limite durante esta experiencia).
  •  Estadisticas de tiempo usando gprof:

    Por la larga duración del programa no fue posible generarlas.

  • Graficas hechas con gnuplot utilizando los datos recopilados con iostat y vmstat:


    • Lectura y Escritura en Kb/s en el disco interno durante el tiempo que duro la experiencia.


    • Lectura y Escritura en Kb/s en el disco externo durante el tiempo que duro la experiencia.


    • Uso de CPU durante el tiempo que duro la experiencia.


    B.- Quicksort.

  • Tiempo de ejecución usando time:

    real 1m29.388s
    user 0m41.251s
    sys 0m47.659s
  • Estadisticas de tiempo usando gprof:

    Flat profile:

    Each sample counts as 0.01 seconds.
      %   cumulative   self              self     total          
     time   seconds   seconds    calls   s/call   s/call  name   
     98.17     29.78    29.78        1    29.78    29.89  quicksort
      1.15     30.14     0.35  6000001     0.00     0.00  escribirUnNumero
      0.43     30.27     0.13        1     0.13    30.37  ordenarArchivo
      0.30     30.36     0.09 25819006     0.00     0.00  swap
      0.05     30.37     0.02  5999000     0.00     0.00  choose_pivot


  • Graficas hechas con gnuplot utilizando los datos recopilados con iostat y vmstat:


    • Lectura y Escritura en Kb/s en el disco interno durante el tiempo que duro la experiencia.


    • Lectura y Escritura en Kb/s en el disco externo durante el tiempo que duro la experiencia.


    • Uso de CPU durante el tiempo que duro la experiencia.


    C.- Mergesort.

  • Tiempo de ejecución usando time:

    real 0m58.518s
    user 0m12.069s
    sys 0m46.267s
  • Estadisticas de tiempo usando gprof:

    Flat profile:

    Each sample counts as 0.01 seconds.
      %   cumulative   self              self     total          
     time   seconds   seconds    calls   s/call   s/call  name   
     42.51      0.62     0.62  5999999     0.00     0.00  mezclar
     28.80      1.04     0.42  6000001     0.00     0.00  escribirUnNumero
     21.25      1.35     0.31        1     0.31     0.93  mezcla
      7.54      1.46     0.11        1     0.11     1.46  ordenarArchivo


  • Graficas hechas con gnuplot utilizando los datos recopilados con iostat y vmstat:


    • Lectura y Escritura en Kb/s en el disco interno durante el tiempo que duro la experiencia.


    • Lectura y Escritura en Kb/s en el disco externo durante el tiempo que duro la experiencia.

    • Uso de CPU durante el tiempo que duro la experiencia.

Conclusiones. 

  • Considerando que el algoritmo de ordenamiento BubleSort es de orden n^2, el ordenamiento de un archivo que cuenta con alrededor de 6 millones de datos, se podria decir que su tiempo de ejecución podria extenderse por años. 
  • Comparando el uso de la CPU de Bublesort con los otros 2 algoritmos, se puede ver claramente que fue más extenso el uso del BubleSort que el QuickSort y el MergeSort.
  • En cuanto a la lectura y escritura ejecutando el programa con BubleSort de un disco interno a un disco externo o en el mismo disco se puede ver que: cuando se lleva a cabo el ordenamiento, se puede observar en las graficas correspondiente, que la lectura y escritura de datos se hace mayor cantidad de veces para el caso del disco externo.
  • En cuanto a los algoritmos QuickSort y MergeSort, en tiempo de ejecución son similares, pero con algunas diferencias en la lectura y escritura de datos, ya que su implementación es distinta, pero a lo que se refiere a procesos del sistema, sus tiempos son parecidos. El comportamiento con la CPU y dispositivos I/O son similares.
  • Viendo las graficas, se puede ver que para el caso del disco externo hubo mayor proceso de lectura y escritura que para el caso del mismo disco interno.

Fuentes:

No hay comentarios:

Publicar un comentario