Qué es la investigación:
Millisampler es una de las últimas herramientas de metacaracterización que nos permite observar, caracterizar y depurar de manera eficiente el rendimiento de la red en una escala de tiempo muy detallada. Esta herramienta liviana de caracterización del tráfico de red para monitoreo continuo opera en escalas de tiempo configurables. Recopila una serie temporal de volúmenes de tráfico entrantes y salientes, transmisiones activas, etiquetas ECN entrantes y retransmisiones entrantes y salientes. Además, Millisampler también puede identificar el tráfico dentro de una región y el tráfico entre regiones (RTT más largo). Millisampler se ejecuta en nuestra flota de servidores, captura breves instantáneas periódicas de estos datos a 100 µs, 1 ms y 10 ms, almacenándolos en un disco local y poniéndolos a disposición durante días para análisis bajo demanda. Debido a que los datos son solo información de encabezado de nivel de flujo agregado, no contienen ninguna información de identificación personal (PII). Incluso con la cantidad mínima de información que recopila, los datos de Millisampler han demostrado ser muy útiles en la práctica, especialmente cuando se combinan con datos más grandes existentes. el esquema entrante tráfico.
Cómo funciona:
Millisampler incluye código de espacio de usuario para programar ejecuciones, almacenar y entregar datos, y un filtro tc basado en eBPF que se ejecuta en el kernel para recopilar datos precisos basados en el tiempo. El código personalizado conecta el filtro tc y activa la recopilación de datos. El filtro tc es uno de los primeros pasos programables cuando se recibe un paquete y el último paso cuando se transmite. En la entrada, esto significa que el código eBPF se está ejecutando en el núcleo de la CPU que maneja la interrupción suave (mitad inferior) cuando el paquete está destinado al socket propietario. Debido a que el procesamiento se realiza en muchos núcleos de CPU, usamos variables por CPU para evitar el bloqueo, lo que aumenta los requisitos de memoria para eliminar el riesgo de contención. Para minimizar los gastos generales, tomamos muestras periódicamente y por períodos cortos de tiempo. Así, el espacio de usuario configura dos parámetros en Millisampler: el intervalo de muestreo y el número de muestras. Planeamos ejecutar con tres intervalos de muestra: 10ms, 1ms y 100µs con un número fijo de muestras hasta 2000 para todos los intervalos de muestra. Esto significa que nuestros períodos de observación van desde 200 ms (tasa de muestreo de 100 µs) hasta 20 s (tasa de muestreo de 10 ms), lo que nos permite observar eventos en escalas de tiempo sub-RTT y RTT interregional y, al mismo tiempo, capturar la Memoria. cada uno ejecuta hasta 2000 contadores de 64 bits por núcleo de CPU para cada valor medido.
Millisampler recopila muchos indicadores. Calcula el número total de bytes entrantes y salientes, así como los bytes entrantes marcados con ECN, en función de la longitud y los bits CE de los paquetes. Millisampler también suenaRelé con marcado TTLd. Millisampler utiliza un boceto de 128 bits para estimar el número de conexiones activas (entrantes y salientes). El uso del boceto da como resultado una aproximación del número de conexiones dentro de una docena de conexiones y una saturación de alrededor de 500 conexiones por intervalo de muestreo. Si bien hay espacio en la práctica para una precisión adicional más allá del número real de conexiones, la diferencia cualitativa entre unas pocas conexiones y decenas o cientos de conexiones ha sido útil para identificar patrones de tráfico con más conexiones (entrantes pesados) en oposición a más tráfico con menos conexiones. conexiones
Por qué es importante:
Millisampler es una poderosa herramienta para la resolución de problemas y el análisis de rendimiento. Dos problemas opuestos de rendimiento de la red que hemos abordado en Meta durante los últimos años se han relacionado con nuestra necesidad de una vista granular del tráfico. El primer problema fue cronometrar las ráfagas de tráfico en una escala de tiempo precisa, y esto nos llevó a crear e implementar un Millisampler para detectarlo rápidamente si vuelve a ocurrir. El segundo, cuya causa principal fue ayudada por el primer prototipo de Millisampler, fue un error en el controlador de la tarjeta de red que provocó que la entrega de paquetes se detuviera milisegundos a la vez, demostrando así el valor de Millisampler en investigaciones complejas. Si bien Millisampler (o datos similares a Millisampler) jugó un papel importante en estos estudios, fue solo una parte de nuestro rico ecosistema de herramientas de recopilación de datos que rastrean una vertiginosa variedad de métricas de host y red.
Además de estos incidentes, los datos de Millisampler también han sido útiles para caracterizar y analizar las características del tráfico del servicio, lo que nos permite diseñar e implementar una gama de soluciones para ayudar a mejorar el rendimiento del servicio. Por ejemplo, pudimos caracterizar patrones de ráfaga en varios servicios para comprender la intensidad de las inyecciones y ajustar el rendimiento del transporte en consecuencia. También pudimos estudiar las interacciones complejas entre las transmisiones RTT cortas y largas y comprender cómo los picos en uno afectan la equidad del otro. En la próxima publicación, echaremos un vistazo a la extensión Millisampler, Syncmillisampler, donde ejecutamos Millisampler sincrónicamente en todos los hosts del rack y usamos estos datos para detectar conflictos de búfer en la parte superior del ASIC del rack.
Lea completamente:
Gracias:
Ehab Gabashne, Christian Loumezanu, Raghu Nallamotu y Rob Sherwood también contribuyeron al diseño e implementación de Millisampler.