Em 2019, três departamentos diferentes estabeleceram o objetivo de lançar novas instâncias de GPU Linode para clientes até o aniversário da Linode. Entre as equipes de hardware, marketing e gerenciamento, não tínhamos certeza se isso era possível, especialmente com os outros produtos em que estávamos trabalhando durante esse período.
Assim, escolhemos a única equipe que teve uma chance de fazer isso acontecer: uma equipe de funcionários ansiosos e distribuídos por vários departamentos para formar a GPU Team Mission. Agora, há quase dois anos e muitas implantações de GPU mais tarde, estamos fazendo uma viagem pela memória para fornecer uma visão profunda sobre como fizemos isso acontecer - e transformamos uma idéia em um produto de sucesso que estamos expandindo ativamente.
Um breve histórico sobre a história da Virtualização na Linode
Antes de começarmos com como lançamos instâncias de GPU, aqui estão alguns detalhes técnicos leves e a história de como a virtualização começou na Linode antes de nos tornarmos o fornecedor de nuvens que você conhece hoje.
Linode começou como uma pequena empresa em 2003 fornecendo máquinas virtuais rodando UML (User Mode Linux), um antigo paradigma de virtualização semelhante ao Qemu (Quick EMUlator). UML fornecia hardware totalmente virtualizado. Quando um cliente entrava em seu Linode, os dispositivos que um cliente via, como discos, rede, placa-mãe, RAM, etc., pareciam e se comportavam como dispositivos de hardware reais, mas os dispositivos eram realmente apoiados por software ao invés do hardware real.
Vários anos depois, Linode mudou-se para Xen como sua camada de virtualização para fornecer as últimas melhorias de desempenho a nossos clientes. Xen é um hipervisor de tipo1, ou seja, o hipervisor roda diretamente no hardware, e os convidados rodam em cima do kernel Xen . O kernel Xen fornece paravirtualização a seus convidados, ou as interfaces de hardware que o Linode vê são traduzidas para chamadas de máquina reais através do kernel Xen e retornadas ao usuário. A razão pela qual esta camada de tradução existe é fornecer segurança e outros recursos de segurança para que a instrução correta vá para o Linode correto.
Vários anos depois disso, uma nova tecnologia estava sendo desenvolvida chamada KVM (Kernel Virtual Machine). KVM consiste de partes do kernel Linux que fornecem interfaces paravirtuais às instruções da CPU. Qemu é uma das tecnologias de virtualização que podem aproveitar KVM. Linode decidiu mudar novamente para o benefício de nossos clientes. Quando os clientes levaram a atualização gratuita para KVM , a maioria das cargas de trabalho viu um aumento instantâneo no desempenho. Este tipo de paravirtualização é diferente de Xen: as instruções da CPU passam do hóspede (Qemu) para o kernel do host e diretamente para a CPU usando as instruções de nível de processador, permitindo velocidades de execução quase nativas. Os resultados dessas instruções são devolvidos ao Linode que as emitiu, sem a sobrecarga que Xen requer.
Então, o que tudo isso tem a ver com as instâncias da GPU Linode?
A Linode conduziu uma pesquisa de mercado e tentou determinar o que proporcionaria o melhor valor aos clientes interessados em executar cargas de trabalho de GPU. Decidimos fornecer as GPUs diretamente aos clientes utilizando uma tecnologia chamada "host passthrough". Dizemos a Qemu qual dispositivo de hardware gostaríamos de passar ao convidado, neste caso a placa de GPU, e Qemu trabalha em conjunto com Linux para isolar a placa de GPU para que nenhum outro processo no sistema possa usá-la. A máquina host Linux não pode usá-la, os outros Linodes da máquina também não podem usá-la. Somente o cliente que a solicitou pode usar a placa GPU, e eles recebem a placa completa. O dispositivo de hardware real é passado, inalterado e não paravirtualizado, o que significa que não há camada de tradução.
Semana 1: O Hardware chega a Linode
Com a pesquisa concluída, toda a equipe decidiu avançar com o projeto. Para que o plano pudesse funcionar, o sistema exigiu algumas mudanças em toda a pilha de baixo nível. O hardware entrou on-line na segunda-feira e tivemos cinco dias para decidir se avançaríamos ou não com um grande pedido de um datacenter para cumprir o prazo.
Todos os envolvidos tinham o mesmo entendimento, se não conseguíssemos que funcionasse em uma semana regular de 40 horas de trabalho, não avançaríamos. Isto significava que não havia pressão para fazer horas extras, mas só tínhamos cinco dias para determinar o futuro de um novo produto Linode.
Então, o que acabou acontecendo? Acontece que todas as nossas pesquisas deram frutos. Tentamos seguir alguma documentação existente, e funcionou exatamente como esperado. Em poucos dias, fomos capazes de anexar de forma confiável GPUs a Linodes em um ambiente de teste. Na sexta-feira, estávamos confiantes de que poderíamos conseguir isso. O teste foi um sucesso! Agora era hora de fazer uma grande encomenda para os clientes e seguir em frente.
Semana 2: Faça a camada de interface de hardware funcionar com GPUs
Após um teste inicial bem sucedido, chegamos ao escritório na segunda-feira recarregados e prontos para integrar o processo de fixação da GPU com nossos fluxos de trabalho existentes de criação da Linode. Tentamos tornar nossa interface o mais simples possível: apenas alguns cliques para implantar um Linode, e muita coisa vai para aquelas poucas ações que tivemos que contabilizar.
Para tornar as GPUs possíveis, várias peças de baixo nível tiveram que ser escritas e implementadas, tais como isolar a RAM para a GPU e o Linode, bem como dar ao Linode núcleos de CPU dedicados que foram emparelhados com a RAM isolada e a GPU. Pesquisamos a arquitetura NUMA (Non Uniform Memory Access) da placa-mãe e conseguimos isolar o grupo NUMA de RAM para a CPU a que estava mais estreitamente associada, e o grupo NUMA que estava anexado à pista PCIe (PCI [Peripheral Computer Interface] Express) na qual a GPU estava conectada. Isto nos permitiu iniciar um Linode com 1, 2, 3 ou 4 GPUs anexadas, e ocupar a parte da RAM e os núcleos da CPU que estavam intimamente associados à placa GPU com base na estrutura da placa-mãe.

Depois que a camada de hardware foi feita, trabalhamos na interface com os mecanismos de fila de trabalho da Linode para que pudéssemos iniciar Linodes através de nosso Gerente de Nuvem e API. Nesta fase, pudemos começar a testar a confiabilidade. A última coisa que queríamos era que um engenheiro de plantão fosse chamado no meio da noite por causa de um sistema que falhou, ou que um sistema fosse desligado no meio do dia de trabalho para um cliente em um fuso horário diferente. Com os horários de sono dos clientes e dos engenheiros em mente, começamos a testar cedo, e continuamos a garantir que os clientes acabassem com um produto sólido e confiável.
Semana 3: Fazer alterações na interface do administrador e na contabilidade
Na terceira semana, tínhamos algumas perguntas administrativas pela frente: Como rastrear quais clientes são designados a quais Linodes? Como enviar clientes para uma instância Linode com GPU, e não para uma instância Linode sem GPU?
Todo o rastreamento e controle teve que ser implementado. Fizemos isso para que pudéssemos contabilizar quantos cartões de GPU tínhamos, quantos foram levados, quantos estavam vazios, e quantos ainda podíamos vender a novos clientes. Também tivemos que construir este rastreamento de GPU em nossas interfaces internas de administrador. Isto pode parecer um trabalho contábil chato, mas foi necessária muita engenhosidade de toda a equipe, e de membros externos da equipe, para fazer a interface deste novo produto com todos os nossos produtos existentes, sem exigir etapas manuais.
Felizmente, reunimos todos e pudemos escrever o código e testá-lo para garantir que funcionasse bem, que funcionasse de forma confiável e que não exigisse intervenção manual para colocar uma instância da GPU Linode em funcionamento. Outro benefício lateral de fazer este trabalho nesta fase foi que o teste era mais fácil. Tivemos simplesmente que clicar em um único botão em nossa interface de administrador para trazer à tona uma instância de GPU Linode.
Semana 4: Tornar público API Mudanças para que os clientes possam girar Linodes
Depois de fazer o botão de interface do administrador para trazer à tona uma instância da GPU Linode, estávamos nos sentindo muito bem. Agora, precisávamos trabalhar para expor esta mesma funcionalidade aos clientes. O público API é apoiado por Python, o que tornou o código extremamente intuitivo. Fomos capazes de lançar as mudanças e testá-las muito rapidamente. A parte complicada foi tornar esta funcionalidade disponível dentro da empresa para testes, mas não disponível fora da empresa até que tivéssemos feito os testes necessários para fins de confiabilidade.
Semana 5: Implantar! Ou, Como implantar uma característica voltada para o público por trás de uma bandeira de característica
Estávamos chegando ao arame, então fizemos a pergunta: como estamos nos sentindo ao lançar este serviço ao público e, em última análise, fazer com que os clientes utilizem este novo serviço?
A resposta foi lidar cedo com todas as incógnitas e prestar contas delas, implantando-as cedo, e com freqüência. Enquanto ainda estávamos testando alguns dos casos de uso na equipe, implantamos instâncias da GPU Linode para o público, mas escondidas atrás de uma bandeira de recurso. Fomos capazes de testar GPUs em nossas contas de funcionários e isto nos permitiu ter certeza de que as coisas se comportariam exatamente como esperado se um cliente a utilizasse. Sempre que encontramos algo que não estávamos esperando, fizemos uma correção e fizemos uma implantação pública.
Lentamente, mas seguramente, e implantando código quase todos os dias, resolvemos tudo o que estava em nossa lista. Ficamos sem mudanças para fazer e nos sentimos confiantes na verdadeira abertura para os clientes.
Semana 6: Teste! GPUs abertas para os funcionários da Linode
Uma das grandes coisas de se trabalhar na Linode é que podemos brincar com tecnologia de ponta antes de qualquer outra pessoa. (P.S. estamos contratando!) Cada funcionário tem a chance de colocar um novo produto em seus passos para que cada peça de tecnologia que lançamos tenha sido testada em batalha. Qualquer funcionário poderia se inscrever para testar uma instância de GPU Linode durante o horário de trabalho, mesmo depois do trabalho se realmente quisesse, para usar a instância de GPU Linode como um cliente o faria. Tudo o que eles tinham que fazer era marcar sua conta de funcionário e girar uma GPU.
Aqui estão algumas das maneiras como os Linodians experimentaram nossas novas GPUs:
- Jogos em nuvem - onde o jogo é executado na instância da GPU Linode e o vídeo e os controles são enviados via Steam Link™
- renderização 3D
- Transcodificação de vídeo
- Teste da força da senha
- TensorFlow em funcionamento
Após esta etapa, coletamos métricas de desempenho e decidimos que estávamos prontos para ir para a produção e lançamento aos clientes.
Lançamento!
Nós lançamos! Celebramos! Havia sorvete e swag! Os clientes começaram a experimentar o produto que estava em desenvolvimento há apenas algumas semanas. A melhor parte foi que tudo funcionou no dia do lançamento. Não tivemos que fazer nenhuma mudança de última hora, não houve incêndios para apagar, os clientes estavam felizes e tudo funcionou de forma confiável.
O lançamento real do código não foi difícil. Da perspectiva do código e da configuração do sistema, tudo o que foi necessário para lançar GPUs na produção foi a remoção de uma bandeira de recurso. Mas também há toneladas de outras coisas que vão para o lançamento de um produto na Linode: documentação técnica, fazendo as mudanças de IU no Linode Cloud Manager, e todos os divertidos materiais de marketing para ajudar a celebrar nosso novo produto.
Pós-lançamento: Sem mudanças de código por seis meses
Algumas perguntas estão sempre em nossa mente: fizemos testes suficientes? Seis semanas foi rápido demais?
Em nosso caso foi a velocidade certa: não tive que tocar no código desde o lançamento. E, as GPUs Linode têm visto o uso do cliente todos os dias. É ótimo quando você pode construir um produto e tê-lo funcionando, e depois continuar e construir outros grandes produtos, e aquela coisa que você construiu há dois anos ainda está funcionando, tudo por si só, com o mínimo de interação necessária
Em retrospectiva, aqui estão algumas coisas que nos permitiram ser tão bem sucedidos:
- Fazer pesquisa antes do tempo - Isto nos ajudou muito a enfrentar todas as incógnitas que podíamos sem realmente ter hardware em mãos.
- Fazer um plano - Tínhamos um plano muito detalhado e cada passo tinha que ser executado a tempo ou não teríamos sido capazes de lançar.
- Siga o plano - Concentre-se na tarefa em mãos e tenha em mente as tarefas restantes que precisam ser feitas.
- Tenha uma boa equipe de gerenciamento - Certifique-se de que todos os níveis de gerenciamento tenham o entendimento de que se um projeto com um prazo apertado falhar uma etapa, o prazo de lançamento não será cumprido. Esta pode ser a parte mais importante que nos permitiu ter sucesso. Alguma pressão é uma coisa boa, como foi no nosso caso, muita pressão leva ao esgotamento e ao fracasso. Depois de discutir a linha do tempo com a gerência, eles estavam completamente a bordo.
- Apoiar uns aos outros - A única equipe que teve uma chance não teria tido uma chance sem toda a estrutura de apoio do resto da organização. Quando todos os seus colegas de trabalho quiserem que você seja bem sucedido, todos eles entrarão e ajudarão se você precisar deles.
- Teste - Teste teste teste teste, se eu pudesse digitar mais uma vez, eu ainda diria teste. Tanto o teste automático como o manual. Esta foi, de longe, a principal razão pela qual ninguém da minha equipe teve que tocar no código em mais de 6 meses.
Saiba mais sobre as instâncias da GPU Linode verificando nossa documentação de GPU, e acabamos de expandir a disponibilidade da GPU em nossos centros de dados de Newark, Mumbai e Cingapura.
Interessado em experimentar as GPUs Linode para suas cargas de trabalho atuais? Você pode obter um teste gratuito de uma semana para ver como nossas GPUs funcionam para você. Saiba mais aqui.
(E novamente, se você quiser nos ajudar a construir e testar produtos como GPUs Linode, estamos contratando!)
Comentários (1)
how to make windows os in linode