Ingeniería de rendimiento de almacenamiento

¡Hola a todos! Todos los días, nuestro amplio y amigable equipo de ingenieros resuelve problemas complejos y contribuye a la creación de productos de alta tecnología: procesamiento de datos y sistemas de almacenamiento. Decidimos presentarte más de cerca su rutina, y hoy iniciamos una serie de entrevistas con compañeros para contarte todos los matices de su trabajo en primera persona.



imagen



El rendimiento es una de las características clave de un buen software; otras características de los sistemas de almacenamiento no se apreciarán si son lentos o inestables. Hoy hablamos con Sergey Kachkin kachini- Jefe del Departamento de Pericia Técnica del Departamento de Investigación Aplicada y Pericia Técnica de YADRO.



Su profesión tiene varios nombres: analista de rendimiento, ingeniero de rendimiento, evaluador de rendimiento. Y todos ellos son bastante raros en Rusia. Mientras tanto, la ingeniería de rendimiento ayuda a crear sistemas informáticos eficientes que funcionan de forma rápida y fiable. Su tarea es estudiar por qué el sistema no está funcionando como nos gustaría, entender las razones de la lentitud o no corresponde a los parámetros objetivo de trabajo, identificar y encontrar áreas problemáticas, para ayudar a eliminarlas.  



Sergey Kachkin habló sobre encontrar cuellos de botella en la pila de software y optimizar el rendimiento del almacenamiento, sobre lo que está haciendo su equipo.

 

Sergey, ¿cómo llegaste a YADRO? ¿Ya ha tenido experiencia con OpenPOWER?

Antes de eso, trabajé para otro proveedor, participé en el soporte de una versión propietaria del sistema operativo UNIX en procesadores IA64 (que no debe confundirse con x86) en términos de rendimiento del kernel. La arquitectura EPIC no es como RISC, es completamente diferente. Así que esta es mi primera experiencia trabajando con OpenPOWER en YADRO, y la reconstrucción tomó algún tiempo. Pero la idea de OpenPOWER, a pesar de cierto minimalismo, es la misma, por lo que todo se puede dominar.



¿Qué hacen los ingenieros de rendimiento? ¿Qué métodos se utilizan en el trabajo? ¿Le resulta difícil contratar nuevos empleados?



La principal especialización de nuestro equipo es la ingeniería de rendimiento o la ingeniería de rendimiento. Es una disciplina separada cuyo objetivo es garantizar que la solución que se está desarrollando satisfaga los requisitos no funcionales, en particular, el rendimiento. Incluye un conjunto de prácticas, conocimientos, métodos y técnicas que se pueden aplicar en diferentes etapas del desarrollo de software: preparatoria, programación, pruebas y operación del sistema.



En Rusia, esta disciplina no es muy común, al menos, tal impresión es creada por los resultados de la búsqueda de empleados. Sin embargo, en el mundo, esta es una dirección establecida. Esta especialización en TI rara vez implica codificación directa. Programamos poco y, de hecho, no sabemos hacerlo como programadores profesionales. Esto requiere habilidades específicas para localizar "puntos calientes" en el software que afectan los requisitos no funcionales. Por un lado, ayuda a crear un producto que cumpla con los requisitos, por otro lado, evita el costo de una mayor optimización o reelaboración.



¿Cómo se asegura el control de calidad y la identificación de cuellos de botella en la pila de software?



Los métodos se pueden dividir en dos tipos. El primero es el enfoque centrado en el sistema. Está orientado a los recursos: analizamos la carga de los componentes individuales del sistema y, en función de los resultados obtenidos, asumimos dónde hay un cuello de botella.



El segundo es el enfoque centrado en la aplicación, cuando el objeto de investigación es la aplicación completa o los procesos individuales en Linux. Observamos qué está haciendo la aplicación, qué trabajo está haciendo. ¿Es útil este trabajo, o está haciendo algo inútil, es decir, perder el tiempo? Si la aplicación está esperando, vemos qué está esperando. Por lo general, estos son recursos de hardware o software, mecanismos de sincronización.



En la vida real, debes cambiar entre estos métodos. Es decir, por un lado, miramos los recursos: ¿existen problemas o errores obvios? Sacamos conclusiones. Luego miramos la aplicación: cómo se siente. En este caso, la aplicación es el código del sistema de almacenamiento u otra cosa que sea objeto de optimización.



¿Cómo entender que el almacenamiento está funcionando "al límite"? ¿Cómo puede saber si su productividad se agota? ¿Qué parámetros indican esto? ¿Cuáles son las principales métricas que se utilizan para medir el rendimiento del almacenamiento?



Varias métricas están disponibles para el usuario medio. El principal es el tiempo de respuesta. Su valor absoluto es importante. Además del tiempo de respuesta, el ancho de banda también es importante. Si, a medida que aumenta la carga, el tiempo de respuesta comienza a crecer, mientras que las IOPS y la cantidad de datos transmitidos no aumentan, esto significa que algún recurso de almacenamiento está cerca de la saturación. Como sabe, un sistema de almacenamiento funciona tan rápido como puede funcionar su recurso más lento.



Al mismo tiempo, diferentes aplicaciones pueden ser críticas tanto para el tiempo de respuesta como para el ancho de banda. Por ejemplo, si hablamos de una base de datos, entonces normalmente es un acceso aleatorio en bloques pequeños, muchas lecturas, y es importante para su rendimiento en IOPS y tiempo de respuesta mínimo. Para otras cargas, como la transmisión de copias de seguridad, la grabación de cámaras de video o Internet de las cosas, el ancho de banda es más importante, la capacidad de grabar una gran cantidad de datos.



¿El sistema de almacenamiento está optimizado para una tarea específica o se crea como una solución universal?



Durante mucho tiempo, los sistemas de almacenamiento, al menos para fines generales, han sido versátiles. No están "afilados" para ninguna carga en particular y tratan de "complacer" las aplicaciones más comunes. Después de todo, se conoce aproximadamente cuál es el perfil de carga de la base de datos, el sistema de respaldo, la videovigilancia, etc. El sistema de almacenamiento debe responder adecuadamente a tales cargas sin ninguna configuración adicional.



Por lo tanto, los sistemas de almacenamiento de uso general están diseñados desde el principio para adaptarse a las tareas más comunes. Para ello, se utilizan pruebas sintéticas con un conjunto de perfiles "críticos" que simulan una situación real. La mayoría de las veces funciona, pero la realidad siempre es mucho más complicada.



Las cargas reales son modeladas por sintéticos de manera muy aproximada. Esta es generalmente un área intensiva en ciencia, porque además de IOPS, ancho de banda, tamaño de bloque y la proporción de operaciones de lectura / escritura, la carga tiene muchas más características. Esta es la localización del punto de datos en el disco, la presencia de "áreas calientes", la distribución de solicitudes en el tiempo y la uniformidad de su llegada. Por tanto, existe la posibilidad de que una determinada carga k no caiga en ninguno de los perfiles. Tal vez debido a las características del software o las características específicas de la tarea empresarial en sí. En este caso, debe configurar el sistema para tareas específicas.



Examine la aplicación, cómo funciona. Y puede ser necesario cambiar el funcionamiento de la aplicación o la configuración del sistema de almacenamiento. A veces es mucho más fácil resolver problemas en el lado de la aplicación con algún tipo de personalización que cambiar el sistema de almacenamiento.



¿El sistema está configurado automáticamente para la tarea? ¿Necesitas inteligencia artificial para esto? ¿Puede el administrador o el usuario elegir él mismo el perfil de carga?



Los sistemas de almacenamiento han estado haciendo esto automáticamente durante mucho tiempo; el administrador no está cargado con esa tarea. Por lo general, intentan lograr esto sin usar inteligencia artificial, algoritmos tradicionales. Sin embargo, la IA tiene un gran potencial. Si le permite predecir qué bloques de datos y en qué momento puede solicitar la aplicación, entonces puede prepararse para esto con anticipación.



Si los algoritmos de optimización anteriores eran bastante simples, como la lectura anticipada, es decir, al leer datos secuencialmente, el sistema cargaba datos en la caché con anticipación o, por el contrario, liberaba la memoria caché para otros datos, ahora las posibilidades se están expandiendo: el sistema podrá prepararse para un pico de solicitudes o una organizada de manera compleja " punto caliente de datos ".



¿Cuál debería ser la escala de optimización del almacenamiento? ¿También cubre software / hardware de servidor, infraestructura (SAN)? ¿Requiere una estrecha integración de las pilas de software y hardware?



Desde el punto de vista de la ingeniería de rendimiento, el sistema se considera como un todo, en un complejo, es decir, aplicación, host (servidor), infraestructura de almacenamiento, (SAN), almacenamiento. Es importante entender cómo funciona la aplicación, porque es ella la que genera solicitudes al sistema de almacenamiento. Todo esto, por supuesto, se tiene en cuenta y se utiliza.



Se cree que la opción más óptima para usar unidades de diferentes tipos en sistemas de almacenamiento es el almacenamiento de datos por niveles. ¿Se puede considerar el desgarro como un medio para aumentar el rendimiento del almacenamiento?



En términos generales, el desgarro es similar al almacenamiento en caché: tienen elementos comunes. La única diferencia es que durante el almacenamiento en caché, los datos se duplican, es decir, se ubican tanto en el SSD (en el caché) como en el disco, y durante el almacenamiento en niveles se almacenan en un solo lugar. Es decir, si el almacenamiento en caché es una forma de optimizar el rendimiento, el desgarro también se puede considerar un método de optimización.



¿Dónde ve las ventajas / desventajas del almacenamiento definido por software (SDS) en términos de análisis de rendimiento y optimización del sistema? ¿Quizás estas sean soluciones más simples y flexibles?



De hecho, todo lo contrario. SDS es un sistema distribuido que consta de muchos servidores que interactúan entre sí. Si se utilizan sistemas operativos especiales, algún tipo de sistema de archivos, esto también agrega complejidad. Desde el punto de vista de la ingeniería, esto es más difícil, pero de alguna manera más interesante. Por otro lado, SDS generalmente no tiene requisitos de rendimiento estrictos, mientras que los sistemas de almacenamiento clásicos son más estrictos. Lo que se perdona para los sistemas definidos por software no se perdona para el almacenamiento tradicional.



Uno de los objetivos de la empresa es desarrollar productos optimizados para inteligencia artificial, IoT y redes de quinta generación. ¿Qué tan difícil crees que es esto? ¿Cómo serán estos productos?



Por el momento, el almacenamiento de archivos se usa a menudo para almacenar datos sin procesar en IA, y SDS se usa para entrenar y construir modelos, es decir, casi siempre son soluciones distribuidas. En mi opinión, muchas empresas ahora usan la IA como una especie de experimento, la miran y tratan de entender cómo puede ser útil. Por tanto, los requisitos del hardware no son muy estrictos. Si funciona, bueno, no funciona, puede esperar uno o dos días. A medida que el trabajo de la IA en las empresas se vuelve más crítico, también lo serán los requisitos para los subsistemas de disco. Veremos nuevas soluciones de almacenamiento para IA e Internet de las cosas que ya son de misión crítica.



¿Qué papel juega la asociación de YADRO con empresas de tecnología global en la optimización del software?



Desde el punto de vista de un técnico, ciertamente ayuda. Esta cooperación facilita la comunicación de los ingenieros entre sí, su acceso a la información, los desarrollos ya hechos y no tiene que "reinventar la rueda" cada vez.



¿Cómo ve el papel de la virtualización en el almacenamiento? ¿Ayuda a eliminar los cuellos de botella del software o viceversa? ¿Y cómo se relacionan el rendimiento y la confiabilidad del sistema? ¿Se puede mantener la confiabilidad mientras se aumenta la productividad?

La virtualización agrega complejidad, por supuesto, pero puede ser útil para aislar una funcionalidad de almacenamiento de otra. En general, estos son costos y complicaciones adicionales, por lo que debe considerarse de manera crítica y con precaución.



Cuando se trata de aumentar la productividad, es fácil perder confiabilidad en el camino. Ésta es una especie de dualismo. Por ejemplo, cuando hablamos de servidores, para un servidor de alto rendimiento (HPC), la fiabilidad suele ocupar el segundo lugar. Los sistemas de almacenamiento generalmente necesitan proporcionar alta disponibilidad, funcionalidad y rendimiento primero. A medida que aumenta la confiabilidad del nivel de redundancia, el sistema se vuelve más complejo. Se hace necesario sincronizar elementos. Sin embargo, el rendimiento del sistema se verá afectado inevitablemente. La tarea del desarrollo es minimizar este efecto.



Ahora hay nuevas clases de memoria como Storage Class Memory, Persistent Memory, se están mejorando las unidades flash. ¿Cómo afecta esto a la arquitectura del sistema? ¿El software se mantiene al día con estos cambios?



Bueno, al menos lo intenta. En general, la llegada de la memoria rápida ha cambiado significativamente la forma en que trabajan los ingenieros de rendimiento en la industria. Antes de la llegada de las SSD, la gran mayoría de los problemas de rendimiento de TI estaban relacionados con la E / S de almacenamiento. Porque hay procesadores y discos (HDD) rápidos con elementos mecánicos que son muchos órdenes de magnitud más lentos que un procesador. Por lo tanto, a expensas de los algoritmos, tuvimos que intentar suavizar los retrasos de los discos lentos.



Con la llegada de la memoria rápida y los algoritmos deben cambiar. Si el algoritmo es lo suficientemente pesado, todavía ayudó antes, porque el disco es mucho más lento. Si lograste ocultar el retraso en la mecánica, eso es bueno. Con la llegada de las SSD, el software debería funcionar de manera diferente. Debería introducir la latencia mínima para obtener la máxima velocidad del SSD. Es decir, ha disminuido la necesidad de algoritmos complejos que oculten la latencia de los discos. Una base de datos con un uso intensivo de E / S de gran capacidad de respuesta se puede migrar a un SSD.



¿Cambiará esto la arquitectura de almacenamiento? Si y no. Porque los discos no se han ido a ningún lado. Por un lado, el código debe poder funcionar con SSD, es decir, ser muy rápido. Por otro lado, los discos mecánicos utilizan cargas que pueden soportar bien, como la transmisión. Al mismo tiempo, el tamaño de los discos aumentó muchas veces, pero la velocidad siguió siendo la misma que hace 10 años.



All Articles