Optimización de MySQL

con el compilador de C++ de Intel

Huixiang Tao, Database Chief Architect, LeCloud Computing Co., Ltd., Ying Hu, Software Technical Consulting Engineer, Intel Corporation, Ming Gao, Industry Technical Specialist, Intel Corporation

Conozca cómo LeCloud, proveedor líder de vídeo en la nube, aprovecha MySQL con el compilador de C++ de Intel para ofrecer un servicio óptimo en más de 60 países.

Las plataformas de LeCloud dan soporte a más de un millón de eventos al año, cientos de millones de acceso de dispo- sitivos al día, y millones de usuarios con- currentes por segundo. Con una alta de- manda de sus servicios públicos de bases de datos de alto rendimiento, LeCloud usa MySQL, una base de datos de código abierto sumamente popular como base para sus servicios en la nube. Un reto clave para LeCloud es optimizar el rendimiento como base de datos de MySQL ?un tema importante también para muchos administradores de bases de datos (DBA) y personal de TI de opera- ción y mantenimiento. Entre las principa- les preocupaciones en relación con el rendimiento podemos destacar:

  • Consultas por segundo (OPS)

  • Transacciones por segundo (TPS)

  • Tiempo de respuesta a una consulta

Este artículo muestra cómo hemos opti- mizado MySQL con el compilador de C++ de Intel y sus posibilidades de opti- mización inter-procedimental (Interprocedural Optimization, IPO). Sin tener que modificar ningún código, compilamos el código fuente de MySQL y comprobamos los indicadores de ren- dimiento ¿El resultado? Con las optimi- zaciones del compilador de C++ de Intel sobre MySQL, para un conjunto de es- cenarios de prueba, el rendimiento mejoró entre un 5 y un 35 por ciento, abriéndole a los desarrolladores otra via para lograr un mejor rendimiento de MySQL.

 El compilador de C++ de Intel

El compilador de C++ de Intel, un compo- nente de Intel Parallel Studio XE, es un compilador optimizador de C y C++ que aprovecha las más recientes características de arquitectura y conjunto de instrucciones para maximizar el rendimiento. Debido a que el equipo de desarrollo de compilado- res de Intel conoce tan bien las arquitectu- ras Intel, llevan a cabo una optimización especializada (y más efectiva) para carac- terísticas de CPU tales como las nuevas instrucciones SIMD y la estructura de caché de Intel en comparación con otros compi- ladores como GNU GCC o Microsoft Visual C++. Entre las técnicas de optimización usadas en el caso de estudio destacan:

  • Vectorización automática

  • Paralelismo automático guiado

  • Optimización inter-procedimental

  • Optimización guiada por perfiles

Los compiladores de Intel ayudan a los usuarios a sacar el máximo beneficio de plataformas basadas en arquitecturas Intel.

Caso de estudio

 ECloud es un servicio de vídeo en la nube líder del mercado que despliega su red de contenidos a lo largo de más de 60 países, con un ancho de banda disponible de 20 terabytes por segundo (Tbps) para dar soporte a sus servicios en la nube, incluyendo acceso bajo demanda, compartición de contenidos, distribución y emisión en directo de eventos comerciales, realidad virtual y mucho más.

Vectorización automática

El vectorizador automático (también llamado auto-vectorizador) es un componente del compilador de Intel que usa automáticamente las instrucciones SIMD en las extensiones Intel Streaming SIMD Extensions (Intel SSE, SSE2, SSE3 y SSE4), Supplemental Streaming SIMD Extensions (SSSE3) y los conjuntos de instru- cciones Intel Advanced Vector Extensions (Intel AVX, AVX2, AVX512). El vectorizador detecta operaciones del programa que pueden ejecutarse en paralelo y convierte las operacio- nes secuenciales en paralelas. Por ejemplo, el vectorizador convierte la instrucción SIMD secuencial que procesa hasta 16 elementos en una operación paralela, dependiendo del tipo de datos. El compilador, ofrece además, toda una variedad de indicaciones de auto-vectorización que pueden ayudar al compilador a generar instrucciones vectoriales efectivas para los procesadores más recientes, incluyendo el procesador Intel Xeon E5-2699 v4 utilizado en este caso de estudio.

Paralelismo automático guiado (GAP)

La característica del compilador de C++ de Intel ofrece ayuda para mejorar el rendimiento de las aplicaciones secuenciales sugiriendo cambios que permitan aprovechar la capacidad del compilador de vectorizar y paralelizar automáticamente el código, así como mejorar la eficiencia de las operaciones de datos.

Optimización inter-procedimental (IPO)

Este proceso automático de múltiples pasos permite al compilador analizar el código en busca de optimizaciones inter-procedimentales (o sea, optimizaciones que van más allá de los procedimientos individuales de un programa) dentro de un mismo fichero fuente y a través de diferentes ficheros, IPO se describe en detalle más adelante en este artículo, por tratarse de un componente clave de este caso de estudio.

Optimización guiada por perfiles (PGO)

En PGO, el compilador analiza el código mientras éste se ejecuta, y luego se aprovecha de esta información de perfil durante las compilaciones subsiguientes. Esto mejora el rendimiento de la aplicación reduciendo el tamaño del código, y los fallos de predicción de saltos, reorganizando fragmentos de código para minimizar problemas en la caché de instrucciones.

Optimización de MySQL

Compilación con IPO

IPO es una optimización clave del compilador de C++ de Intel. Lleva a cabo un perfilado y análisis estático topológico basado tanto por cada fichero individual de código fuente como para múltiples ficheros, e implementa optimizaciones específicas tales como la expansión de código en línea, la propagación de constantes y la eliminación de funciones no usadas para programas que contienen muchas funcio- nes frecuentemente usadas de pequeño y mediano tamaño. La siguiente figura muestra el proceso de IPO.

Cuando usted compila su código fuente con la opción IPO para una compilación basada en ficheros individuales, el compilador realiza una expansión de funciones en línea para las llamadas a procedimientos definidos dentro del fichero fuente actual. En el caso de la IPO multi-ficheros, el compilador puede realizar algunas expansiones en línea, por ejemplo para funciones marcadas con pragmas o atributos de expansión y funciones miembro de clases de C++ con cuerpos incluidos en la declaración de la clase. Una vez que todos los ficheros fuente han sido compilados con IPO, el compilador almacena una representación intermedia del código fuente en ficheros objeto temporales.

Al enlazar posteriormente con la opción IPO, el compilador es llamado otra vez para realizar la IPO a través de todos los ficheros objeto temporales. Durante el proceso de análisis, el compilador lee todas las representaciones intermedias en el fichero objeto temporal, el fichero objeto verdadero y los ficheros de librería para determinar si todas las referencias son resueltas y si un símbolo específico está definido en un fichero objeto temporal. Los símbolos incluidos en la representación intermedia de un fichero objeto temporal para datos y funciones son candidatos para su manipulación en base a los resultados del análisis integral del programa.

Compilación de MySQL con el compilador de Intel

Para este caso de estudio se usó la versión oficial de MySQL (v5.6.27). Esta sección describe cómo usar el compilador de C++ de Intel para compilar MySQL en Linux. Inicialmente, descargue el paquete de ins- talación de MySQL: wget http://downloads.mysql.com/archives /get/file/mysql-5.6.27.tar.gz tar –zxvf mysql-5.6.27.tar.gz

A continuación, siga los siguientes pasos:

Primer paso

Compile MySQL con el compilador de C++ de Intel (Figura 2):

1. Instale CMake: yum -y install wget make cmake gcc gcc-c++ autoconf automake zlib* libxml2* ncurses-devel libmcrypt* libtool?ltdl?devel*
2. Compile MySQL: asigne icc a CC, icpc to  CXX, y habilite IPO con la opción –ipo.

Segundo paso

Cree MySQL Grant System Tables:

cd /usr/local/mysql-5.6.27-iccgroupadd mysqluseradd -M -g mysql mysql -s /sbin/nologin ;chown -R mysql .chgrp -R mysql ../scripts/mysql_install_db –user=mysql –collation-server=utf8_general_ci

Prueba de rendimiento

El propósito de este análisis es hacer una comparativa de rendimiento entre MySQL compilado con los compiladores de GNU y de Intel. Entre las métricas de rendimiento para el procesamiento de transacciones en línea (Online Transaction Processing, OLTP) se incluyen las consultas por segundo (QPS) y el tiempo de respuesta (RT). La herramienta de pruebas usada fue Sysbench (v0.4.12), una herramienta modular, multi-plataforma y multi-hilo que se usa comúnmente para evaluar el rendimiento de bases de datos. Las Tablas 1 y 2 muestran el entorno de pruebas.

Pasos de prueba

Instalamos dos instancias de MySQL, 3308 y 3318, en el mismo disco SATA SSD de Intel y usamos Sysbench para las pruebas OLTP (Tabla 3). Antes de comenzar las pruebas, limpiamos la caché del sistema operativo y deshabilitamos la caché de consultas de MySQL. Se crearon 10 tablas de base de datos de MySQL para las pruebas, con un millón de registros por tabla. Se utilizaron 4, 8, 16, 32, 64, 128 y 512 hilos de prueba para las lecturas aleatorias de OLTP. El tamaño de buffer_pool de MySQL fue establecido en 2 GB, 8 GB y 16 GB. Cada prueba fue ejecutada tres veces, y el promedio se utilizó como resultado final.

Más Información

Desde Danysoft y si rellenas este formulario, te ayudaremos a facilitarte la información que necesitas.

Este formulario de contacto está desactivado porque rechazaste aceptar el servicio de Google reCaptcha, que es necesario para validar los mensajes enviados a través del formulario.
0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
¡Siéntete libre de contribuir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *