Performance Characterization and Optimization of In-Memory Data Analytics on a Scale-up Server

The sheer increase in volume of data over the last decade has triggered research in cluster computing frameworks that enable web enterprises to extract big insights from big data. While Apache Spark defines the state of the art in big data analytics platforms for (i) exploiting data-flow and in-memory computing and (ii) for exhibiting superior scale-out performance on the commodity machines, little effort has been devoted at understanding the performance of in-memory data analytics with Spark on modern scale-up servers. This thesis characterizes the performance of in-memory data analytics with Spark on scale-up servers. Through empirical evaluation of representative benchmark workloads on a dual socket server, we have found that in-memory data analytics with Spark exhibit poor multi-core scalability beyond 12 cores due to thread level load imbalance and work-time inflation. We have also found that workloads are bound by the latency of frequent data accesses to DRAM. By enlarging input data size, application performance degrades significantly due to substantial increase in wait time during I/O operations and garbage collection, despite 10% better instruction retirement rate (due to lower L1 cache misses and higher core utilization). For data accesses we have found that simultaneous multi-threading is effective in hiding the data latencies. We have also observed that (i) data locality on NUMA nodes can improve the performance by 10% on average, (ii) disabling next-line L1-D prefetchers can reduce the execution time by up-to 14%. For GC impact, we match memory behaviour with the garbage collector to improve performance of applications between 1.6x to 3x. and recommend to use multiple small executors that can provide up-to 36% speedup over single large executor. Based on the characteristics of workloads, it envisions nearmemory and near storage hardware acceleration to improve the single-node performance of scale-out frameworks like Apache Spark. Using modelling approaches, it estimates the speed-up of 5x for Apache Spark using near data hardware acceleration. El gran aumento del volumen de datos en la última década (conocido como Big Data) ha desencadenado un gran esfuerzo de investigación en el marco de la computación en clúster, permitiendo a las empresas de Internet extraer conocimiento de dicho Big Data. Actualmente Apache Spark representa el estado del arte en cuanto a plataformas de análisis de Big Data (i) por su capacidad de explotar la computación data-flow con datos in-memory, y (ii) por un rendimiento y escalado con el numero de procesadores adecuado en las arquitecturas comerciales actuales. Sin embargo, poco esfuerzo se ha dedicado a entender dicho rendimiento y justificar los principales factores que estarían limitándolo en los servidores escalables de hoy en día. Esta tesis caracteriza el rendimiento de estos entornos de análisis de datos en memoria basados en Spark. A través de una evaluación empírica, utilizando cargas de trabajo de referencia y representativas, en un servidor de doble socket, se ha concluido una falta de escalabilidad más allá de los 12 núcleos, básicamente debida a desequilibrios de la carga de trabajo a nivel de threads (flujos de ejecución), al aumento del tiempo de ejecución de cada core respecto a la ejecución secuencial, y la latencia de los accesos de los datos que residen en la memoria DRAM. Al aumentar el tamaño de los datos de entrada, el rendimiento de la aplicación se reduce significativamente debido al aumento en el tiempo de espera durante las operaciones de E/S y el garbage collector (GC), a pesar que la finalización de las instrucciones mejora en un 10% (debido a una menor tasa de fallo de la memoria caché L1 y mayor utilización de los núcleos del procesador). Para tolerar la latencia en los accesos a los datos, se ha concluido que el multi-threading simultáneo resulta eficaz y que (i) la mejora de la localidad a nivel de nodos NUMA puede mejorar el rendimiento en un 10% en promedio y (ii) deshabilitar la pre-búsqueda de datos a nivel de L1-D puede reducir el tiempo de ejecución del orden del 14%. En cuanto al impacto del GC, se observa que es posible mejorar el rendimiento de las aplicaciones en un factor entre 1.6x y 3x a base de utilizar múltiples pequeños ejecutores en vez de un único gran ejecutor. En base a los resultados y análisis realizados en las cargas de trabajo utilizadas, la tesis doctoral analiza las posibilidades de utilizar unidades de cálculo cercanas a la memoria (near-memory) y a los dispositivos de almacenamiento (near-storage), mejorando así el rendimiento de los nodos que se utilicen para la ejecución de Apache Spark. Se presenta un modelo que estima una mejora de 5x en el rendimiento de Apache Spark usando aceleradores hardware cercanos a los datos.