Análisis del impacto en el rendimiento de la fuente de tiempo seleccionada en el sistema

Brendan Gregg, uno de los desarrolladores de DTrace, que actualmente desarrolla herramientas para el análisis de rendimiento basadas en BPF en el núcleo de Linux, resumió la experiencia adquirida al analizar los problemas de rendimiento que enfrentó Netflix al migrar la base de datos Cassandra de CentOS a Ubuntu en entornos ejecutados en Amazon EC2 basados en Xen. Después de la migración, la carga del CPU aumentó un 30% y las latencias para las operaciones de escritura aumentaron aproximadamente la misma cantidad. Resultó que el rendimiento de las aplicaciones que solicitaban información sobre el tiempo dependía en gran medida de la fuente de tiempo preciso seleccionada en el sistema.

Al principio, la causa de la disminución del rendimiento no era evidente y el diagnóstico comenzó rastreando el posible impacto de los procesos del sistema intensivos en recursos que se ejecutaban de forma continua o periódica utilizando las utilidades top y execsnoop. Pero todo indicaba que el consumo de recursos había aumentado especialmente en la base de datos Cassandra, escrita en Java. La comparación de las métricas de perfilado de dos procesos de Cassandra, ejecutados paralelamente en CentOS y Ubuntu y procesando las mismas solicitudes, mostró que alrededor del 32% de todo el tiempo se gastaba en la llamada a os::javaTimeMillis(), que se utiliza para obtener información sobre el tiempo actual.

A continuación, se realizó un experimento en el que se escribió una aplicación simple en Java que llamaba al método System.currentTimeMillis() cien millones de veces en un bucle. La ejecución de la aplicación mostró que en CentOS se necesitaban 13 segundos, mientras que en Ubuntu se tardaron alrededor de 68 segundos, es decir, cinco veces más lento. Se escribió un programa similar en C, que llamaba a la función gettimeofday() cien millones de veces, y al ejecutarlo se obtuvieron resultados análogos.

Dado que se hizo evidente que la fuente del problema era la función de recuperación del tiempo actual, la atención se centró en cambiar las métricas al elegir diferentes fuentes de tiempo exacto en el sistema. Según el contenido de "/sys/devices/system/clocksource/clocksource0/current_clocksource", por defecto, al iniciar Linux en el sistema invitado se utilizaba el temporizador «xen». Después de cambiar la fuente de tiempo a «tsc», el tiempo de ejecución de la aplicación de prueba en Ubuntu se redujo de 68 a 3.3 segundos, es decir, se volvió 20 veces más rápido. Además, se realizó una prueba de rendimiento de la fuente de tiempo kvm-clock, que mostró un aumento de latencias del 20%, en comparación con TSC. $ cat /sys/devices/system/clocksource/clocksource0/available_clocksource xen tsc hpet acpi_pm $ cat /sys/devices/system/clocksource/clocksource0/current_clocksource xen $ time java TimeBench real 1m8.300s user 0m38.337s sys 0m29.875s $ echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource $ time java TimeBench real 0m3.370s user 0m3.353s sys 0m0.026s

Para obtener la hora al elegir la fuente TSC, se utiliza la instrucción de procesador RDTSC, cuya ejecución no requiere una llamada al sistema (la instrucción no requiere privilegios elevados y devuelve un valor del contador de tiempo integrado en la CPU). Por defecto, TSC no se activa ya que, en tiempos pasados, esta fuente no excluía el desplazamiento gradual del tiempo, el cual se corrige programáticamente en otros controladores para lograr lecturas más precisas. Según un ingeniero especializado en el diseño de procesadores, las preocupaciones sobre los desplazamientos del tiempo al usar TSC ya no son pertinentes y procesadores modernos esta fuente puede proporcionar lecturas estables durante años.

Transición de trabajo servidores en Netflix a la fuente TSC resultó en una reducción del 43% en la latencia de escritura y logró, al utilizar Ubuntu, resultados cuatro veces superiores a la configuración con CentOS usando la fuente de tiempo «xen». Los resultados del estudio se enviaron a la empresa Amazon, que recomendó oficialmente que en los entornos AWS EC2 basados en el hipervisor Xen se use por defecto la fuente de tiempo TSC (en los entornos basados en el hipervisor Nitro, se sigue recomendando kvm-clock).

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster