O desempenho é uma das principais características de um bom software; outras características dos sistemas de armazenamento não serão apreciadas se forem lentos ou instáveis. Hoje estamos conversando com Sergey Kachkin kachini- Chefe do Departamento de Perícia Técnica do Departamento de Pesquisa Aplicada e Perícia Técnica do YADRO.
Sua profissão tem vários nomes: analista de desempenho, engenheiro de desempenho, testador de desempenho. E todos eles são bastante raros na Rússia. A engenharia de desempenho, por sua vez, ajuda a criar sistemas de computador eficientes que operam de forma rápida e confiável. Sua tarefa é estudar porque o sistema não está funcionando como gostaríamos, entender as razões da lentidão ou não corresponder aos parâmetros-alvo de trabalho, identificar e localizar áreas problemáticas e ajudar a eliminá-las.
Sergey Kachkin falou sobre como encontrar gargalos na pilha de software e otimizar o desempenho do armazenamento, sobre o que sua equipe está fazendo.
Sergey, como você veio para o YADRO? Você já teve experiência com OpenPOWER?
Antes disso, trabalhei para outro fornecedor, estava envolvido no suporte de uma versão proprietária do sistema operacional UNIX em processadores IA64 (não deve ser confundido com x86) em termos de desempenho do kernel. A arquitetura EPIC não é como RISC, é completamente diferente. Portanto, esta é minha primeira experiência de trabalho com OpenPOWER no YADRO, e a reconstrução demorou algum tempo. Mas a ideia do OpenPOWER, apesar de algum minimalismo, é a mesma, então tudo pode ser dominado.
O que os engenheiros de desempenho fazem? Que métodos são usados no trabalho? É difícil para você recrutar novos funcionários?
A principal especialização de nossa equipe é a engenharia de desempenho ou engenharia de desempenho. É uma disciplina separada que visa garantir que a solução que está sendo desenvolvida satisfaça os requisitos não funcionais, em particular o desempenho. Inclui um conjunto de práticas, conhecimentos, métodos e técnicas que podem ser aplicados em diferentes estágios de desenvolvimento de software: preparatório, programação, teste e operação do sistema.
Na Rússia, essa disciplina não é muito difundida, pelo menos, essa impressão é criada pelos resultados da busca por funcionários. Porém, no mundo, essa é uma direção estabelecida. Essa especialização de TI raramente envolve codificação direta. Nós programamos pouco e, na verdade, não sabemos fazer como os programadores profissionais. Isso requer habilidades específicas para localizar "pontos críticos" no software que afetam os requisitos não funcionais. Por um lado, ajuda a criar um produto que atenda aos requisitos e, por outro, evita o custo de otimização ou retrabalho.
Como você garante o controle de qualidade e a identificação de gargalos na pilha de software?
Os métodos podem ser divididos em dois tipos. A primeira é a abordagem centrada no sistema. É orientado a recursos: analisamos a carga de componentes individuais do sistema e, com base nos resultados obtidos, fazemos uma suposição onde existe um gargalo.
A segunda é a abordagem centrada no aplicativo, quando o objeto de pesquisa é o aplicativo inteiro ou processos individuais no Linux. Vemos o que o aplicativo está fazendo, que trabalho está fazendo. Esse trabalho é útil ou faz algo inútil, ou seja, perde tempo. Se o aplicativo está esperando, vemos o que está esperando. Normalmente, são recursos de hardware ou software, mecanismos de sincronização.
Na vida real, você deve alternar entre esses métodos. Ou seja, por um lado, olhamos para os recursos: existem problemas ou erros óbvios. Tiramos conclusões. Em seguida, olhamos para o aplicativo: como é. Nesse caso, o aplicativo é o código do sistema de armazenamento ou qualquer outra coisa que seja objeto de otimização.
Como entender que o armazenamento está funcionando "no limite"? Como você pode saber se sua produtividade está esgotada? Que parâmetros indicam isso? Quais são as principais métricas usadas para medir o desempenho do armazenamento?
Várias métricas estão disponíveis para o usuário médio. O principal é o tempo de resposta. Seu valor absoluto é importante. Além do tempo de resposta, a largura de banda também é importante. Se, à medida que a carga aumenta, o tempo de resposta começa a aumentar, enquanto o IOPS e a quantidade de dados transferidos não aumentam, isso significa que algum recurso de armazenamento está próximo da saturação. Como você sabe, um sistema de armazenamento funciona tão rápido quanto seu recurso mais lento pode funcionar.
Ao mesmo tempo, diferentes aplicativos podem ser críticos para o tempo de resposta ou para a largura de banda. Por exemplo, se estamos falando de um banco de dados, então geralmente é um acesso aleatório em pequenos blocos, muitas leituras, e é importante que ele atue em IOPS e no tempo mínimo de resposta. Para outras cargas, como streaming para backups, gravação de câmeras de vídeo ou da Internet das Coisas, a largura de banda é mais importante, a capacidade de gravar um grande fluxo de dados.
O sistema de armazenamento é otimizado para uma tarefa específica ou é criado como uma solução universal?
Por muito tempo, os sistemas de armazenamento, pelo menos para propósitos gerais, foram versáteis. Eles não são "afiados" para nenhuma carga específica e tentam "agradar" às aplicações mais comuns. Afinal, sabe-se aproximadamente qual é o perfil de carga do banco de dados, sistema de backup, vigilância por vídeo e assim por diante. O sistema de armazenamento deve responder adequadamente a tais cargas, sem qualquer configuração adicional.
Portanto, os sistemas de armazenamento de uso geral são projetados desde o início para atender às tarefas mais comuns. Para isso, são utilizados testes sintéticos com um conjunto de perfis "críticos" que simulam uma situação real. Na maioria das vezes funciona, mas a realidade é sempre muito mais complicada.
Cargas reais são modeladas por materiais sintéticos de maneira muito aproximada. Em geral, essa é uma área que faz uso intensivo da ciência, porque além de IOPS, largura de banda, tamanho do bloco e proporção das operações de leitura / gravação, a carga tem muito mais características. Esta é a localização do ponto de dados no disco, a presença de "áreas quentes", a distribuição das solicitações no tempo e a uniformidade de sua chegada. Portanto, existe a possibilidade de que uma determinada carga k não caia em nenhum dos perfis. Talvez por causa dos recursos do software ou das especificidades da própria tarefa de negócios. Nesse caso, você precisa configurar o sistema para tarefas específicas.
Examine o aplicativo, como funciona. E pode ser necessário alterar a operação do aplicativo ou as configurações do sistema de armazenamento. Às vezes, é muito mais fácil resolver problemas no lado do aplicativo com algum tipo de customização do que alterar o sistema de armazenamento.
O sistema está configurado automaticamente para a tarefa? Você precisa de inteligência artificial para isso? O administrador ou usuário pode escolher o perfil de carga sozinho?
Os sistemas de armazenamento têm feito isso automaticamente há muito tempo - o administrador não é carregado com essa tarefa. Normalmente, eles tentam conseguir isso sem usar inteligência artificial - algoritmos tradicionais. No entanto, a IA tem um grande potencial. Se ele permite que você preveja quais blocos de dados e em que momento o aplicativo pode solicitar, você pode se preparar para isso com antecedência.
Se algoritmos de otimização anteriores eram bastante simples, como read-ahead, ou seja, ao ler dados sequencialmente, o sistema carregava os dados no cache antecipadamente ou, ao contrário, liberava a memória cache para outros dados, agora as possibilidades estão se expandindo: o sistema será capaz de se preparar para um pico de solicitações ou organizado de forma complexa " hot data spot ".
Qual deve ser a escala de otimização de armazenamento? Também cobre software / hardware de servidor, infraestrutura (SAN)? Ele requer integração total das pilhas de software e hardware?
Do ponto de vista da engenharia de desempenho, o sistema é considerado como um todo, em um complexo, ou seja, uma aplicação, um host (servidor), uma infraestrutura de armazenamento, (SAN), armazenamento. É importante entender como funciona o aplicativo, pois é ele que gera as solicitações ao sistema de armazenamento. Tudo isso, é claro, é levado em consideração e utilizado.
Acredita-se que a opção mais ideal para usar unidades de diferentes tipos em sistemas de armazenamento é o armazenamento de dados em camadas. O tearing pode ser considerado um meio de aumentar o desempenho do armazenamento?
De modo geral, o tearing é semelhante ao armazenamento em cache - eles têm elementos comuns. A única diferença é que no cache os dados são duplicados, ou seja, ficam localizados tanto no SSD (no cache) quanto no disco, e quando se cansam ficam armazenados em um só lugar. Ou seja, se o armazenamento em cache é uma maneira de otimizar o desempenho, o tearing também pode ser considerado um método de otimização.
Onde você vê as vantagens / desvantagens do armazenamento definido por software (SDS) em termos de análise de desempenho e otimização do sistema? Talvez sejam soluções mais simples e flexíveis?
Na verdade, muito pelo contrário. SDS é um sistema distribuído que consiste em muitos servidores que interagem entre si. Se sistemas operacionais especiais forem usados, algum tipo de sistema de arquivos, isso também aumentará a complexidade. Do ponto de vista da engenharia, isso é mais difícil, mas em alguns aspectos mais interessante. Por outro lado, o SDS geralmente não tem requisitos rígidos de desempenho, enquanto os sistemas de armazenamento clássicos são mais rígidos. O que é perdoado para sistemas definidos por software não será perdoado para armazenamento tradicional.
Um dos objetivos da empresa é desenvolver produtos otimizados para inteligência artificial, IoT e redes de quinta geração. Você acha que isso é difícil? Qual será a aparência desses produtos?
No momento, o armazenamento de arquivos costuma ser usado para armazenar dados brutos em IA, e o SDS é usado para treinar e construir modelos, ou seja, quase sempre são soluções distribuídas. Na minha opinião, muitas empresas agora usam IA como uma espécie de experimento, elas olham para isso e tentam entender como pode ser útil. Portanto, os requisitos para o hardware não são muito rígidos. Se funcionar - bem, não funcionar - você pode esperar um ou dois dias. Conforme o trabalho da IA nas empresas se torna mais crítico, o mesmo ocorre com os requisitos para subsistemas de disco. Veremos novas soluções de armazenamento para IA e Internet das Coisas que já são de classe crítica.
Qual é o papel da parceria da YADRO com empresas globais de tecnologia na otimização de software?
Do ponto de vista técnico, certamente ajuda. Tal cooperação facilita a comunicação dos engenheiros entre si, seu acesso às informações, desenvolvimentos prontos, e não precisa "reinventar a roda" todas as vezes.
Como você vê o papel da virtualização no armazenamento? Ajuda a remover gargalos de software ou vice-versa? E como o desempenho e a confiabilidade do sistema estão relacionados? A confiabilidade pode ser mantida enquanto aumenta a produtividade?
A virtualização adiciona complexidade, é claro, mas pode ser útil para isolar uma funcionalidade de armazenamento de outra. Em geral, esses são custos e complicações adicionais, por isso devem ser vistos de forma crítica, com cautela.
Quando se trata de aumentar a produtividade, é realmente fácil perder a confiabilidade ao longo do caminho. Este é um tipo de dualismo. Por exemplo, quando falamos sobre servidores, para um servidor de alto desempenho (HPC), a confiabilidade geralmente vem em segundo lugar. Os sistemas de armazenamento geralmente precisam fornecer alta disponibilidade, funcionalidade e desempenho primeiro. À medida que aumenta a confiabilidade do nível de redundância, o sistema se torna mais complexo. Torna-se necessário sincronizar os elementos. No entanto, o desempenho do sistema inevitavelmente sofrerá. A tarefa do desenvolvimento é minimizar esse efeito.
Agora, existem novas classes de memória, como memória de classe de armazenamento, memória persistente, drives flash estão sendo aprimorados. Como isso afeta a arquitetura do sistema? O software está acompanhando essas mudanças?
Bem, pelo menos ele tenta. Em geral, o advento da memória rápida mudou significativamente a maneira como os engenheiros de desempenho trabalham na indústria. Antes do advento dos SSDs, a grande maioria dos problemas de desempenho de TI estava relacionada à E / S de armazenamento. Porque existem discos e processadores rápidos (HDD) com elementos mecânicos que são muito mais lentos do que um processador. Portanto, às custas de algoritmos, tivemos que tentar suavizar os atrasos de discos lentos.
Com o advento da memória rápida e os algoritmos devem mudar. Se o algoritmo for pesado o suficiente, ainda ajudou antes, porque o disco é muito mais lento. Se você conseguiu esconder o atraso na mecânica, está bem. Com o advento dos SSDs, o software deve funcionar de maneira diferente. Deve apresentar a latência mais baixa para obter a velocidade máxima do SSD. Ou seja, a necessidade de algoritmos complexos que ocultam a latência dos discos diminuiu. Um banco de dados de E / S intensivo que é particularmente sensível ao tempo de resposta pode ser migrado para um SSD.
Isso mudará a arquitetura de armazenamento? Sim e não. Porque os discos não foram a lugar nenhum. Por um lado, o código deve ser capaz de funcionar com um SSD, ou seja, deve ser muito rápido. Por outro lado, os discos mecânicos usam cargas que podem suportar bem, como streaming. Ao mesmo tempo, o tamanho dos discos cresceu muitas vezes, mas a velocidade permaneceu a mesma de 10 anos atrás.