Benchmarkeo del rendimiento de la CPU
Podemos utilizar pruebas de rendimiento como Linpack (http://www.netlib.org/linpack/) y sysbench (https://github.com/nuodb/sysbench) para evaluar el rendimiento de la CPU. En esta receta, utilizaremos sysbench. Veremos cómo ejecutar una prueba de rendimiento en un entorno de metal desnudo y dentro de un container. Pasos similares se pueden realizar en otros entornos, como mencionamos anteriormente.
Preparación
Utilizaremos el container de CentOS 7 para ejecutar la prueba de rendimiento dentro del container. Idealmente, deberíamos tener un sistema con CentOS 7 instalado para obtener resultados de rendimiento en metal desnudo. Para la prueba del container, construyamos la imagen desde el repositorio de Git al que nos referimos anteriormente:
$ git clone https://github.com/redhat-performance/docker-performance.git
$ cd docker-performance/Dockerfiles/
$ docker image build -t c7perf --rm .
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
c7perf latest 59a10df39a82 1 minute ago 678.3 MB
Cómo hacerlo…
Dentro del mismo repositorio de Git, tenemos un script para ejecutar sysbench, es decir, docker-performance/bench/sysbench/run-sysbench.sh. Tiene algunas configuraciones que puedes modificar según tus necesidades:
- Como usuario root, crea el directorio
/resultsen el host:
$ mkdir -p /results
Ahora, ejecuta la prueba de rendimiento después de establecer la variable de entorno del container en algo diferente a Docker, que utilizamos mientras construíamos la imagen c7perf en la máquina host, con los siguientes comandos:
$ cd docker-performance/bench/sysbench
$ export container=no
$ sh ./run-sysbench.sh cpu test1
Si estás ejecutando en un sistema operativo diferente a CentOS, es posible que debas instalar sysbench manualmente y ejecutar el script de una manera ligeramente diferente. Por ejemplo, aquí está cómo ejecutar el script con Ubuntu 18.04:
$ apt-get install sysbench
$ cd docker-performance/bench/sysbench
$ export container=no
$ bash ./run-sysbench.sh cpu test1
Por defecto, los resultados se recopilan en /results. Asegúrate de tener acceso de escritura a él o cambia el parámetro OUTDIR en el script de prueba de rendimiento:

- Para ejecutar la prueba de rendimiento dentro del container, necesitamos iniciar el container y luego ejecutar el script de prueba de rendimiento:
$ mkdir -p /results_container
$ docker container run -it -v /results_container:/results c7perf bash
# /root/docker-performance/bench/sysbench/run-sysbench.sh cpu test1
Como montamos el directorio del host, /results_container, dentro del directorio /results del container, el resultado se recopilará en el host:

- Al ejecutar la prueba anterior en Fedora/RHEL/CentOS, donde SELinux está habilitado, obtendrás un error de permiso denegado. Para solucionarlo, etiqueta el directorio del host mientras lo montas dentro del container de la siguiente manera:
$ docker container run -it -v /results_container:/results:z c7perf bash
Alternativamente, por el momento, coloca SELinux en modo permisivo:
$ setenforce 0
Luego, después de la prueba, vuelve a colocarlo en modo permisivo:
$ setenforce 1
CONSEJO
Consulta el capítulo 9, Seguridad de Docker, para obtener más detalles sobre SELinux.
Cómo funciona…
El script de prueba de rendimiento llama internamente a la prueba de rendimiento de CPU de sysbench para la entrada dada. La CPU se evalúa utilizando manipulación de enteros de 64 bits con algoritmos de Euklid para la computación de números primos. El resultado de cada ejecución se recopila en el directorio de resultados correspondiente, que se puede utilizar para la comparación.
Hay más…
Casi no se informa de diferencias entre el rendimiento de la CPU en metal desnudo y Docker.
Ver también
Consulte los resultados de la prueba de rendimiento de la CPU publicados en IBM y VMware utilizando Linpack en los enlaces referenciados anteriormente en este capítulo.