O que é o padrão Compute Express Link (CXL)

O crescimento maciço na produção e consumo de dados, principalmente dados não estruturados, como imagens, fala digitalizada e vídeo, está resultando em um enorme aumento no uso de aceleradores. De acordo com o Relatório Global de Semicondutores do Bank of America Merrill Lynch de 2 de outubro de 2016, “um acelerador TAM estimado de US$ 1,64 bilhão em 2017 deve crescer além de US$ 10 bilhões em 2021”. Essa tendência de computação heterogênea no data center significa que, cada vez mais, diferentes tipos de processadores e coprocessadores devem trabalhar juntos de forma eficiente, enquanto compartilham memória. Essa desagregação pode fazer com que os sistemas experimentem gargalos significativos devido ao uso de grandes quantidades de memória nos aceleradores e à necessidade de compartilhar essa memória de forma coerente com os Hosts para evitar cópias desnecessárias e excessivas de dados.

Apresentando o padrão Compute Express Link

O Compute Express Link (CXL), um novo padrão de interconexão aberto, visa cargas de trabalho intensivas para CPUs e aceleradores específicos onde é necessário um acesso de memória eficiente e coerente entre um host e um dispositivo. Um consórcio para habilitar este novo padrão foi anunciado recentemente simultaneamente com o lançamento da especificação CXL 1.0. Este artigo descreve alguns dos principais recursos do CXL que os designers de sistema em um chip (SoC) precisam entender para determinar o melhor uso e implementação dessa nova tecnologia de interconexão em seus projetos para IA, aprendizado de máquina e aplicativos de computação em nuvem .

O PCI Express (PCIe) existe há muitos anos, e a versão recém-concluída da especificação básica PCIe 5.0 agora permite a interconexão de CPUs e periféricos em velocidades de até 32GT/s. No entanto, em um ambiente com grandes conjuntos de memória compartilhada e muitos dispositivos que exigem alta largura de banda, o PCIe tem algumas limitações. O PCIe não especifica mecanismos para dar suporte à coerência e não pode gerenciar com eficiência pools isolados de memória, pois cada hierarquia PCIe compartilha um único espaço de endereço de 64 bits. Além disso, a latência para links PCIe pode ser muito alta para gerenciar com eficiência a memória compartilhada em vários dispositivos em um sistema.

O padrão CXL aborda algumas dessas limitações fornecendo uma interface que aproveita a camada física e elétrica do PCIe 5.0, ao mesmo tempo em que fornece caminhos de latência extremamente baixa para acesso à memória e cache coerente entre processadores host e dispositivos que precisam compartilhar recursos de memória, como aceleradores e memória expansores. Os modos padrão do CXL suportados são focados em um PCIe 5.0 PHY operando a 32GT/s em uma configuração de x16 pistas (Tabela 1). Para permitir a bifurcação, 32GT/s também é suportado em configurações de pista x8 e x4. Qualquer coisa mais estreita que x4 ou mais lenta que 32GT/s é chamada de modo degradado, o que claramente não é esperado para ser comum em aplicativos de destino. Embora o CXL possa oferecer vantagens de desempenho significativas para muitos aplicativos, alguns dispositivos não precisam da interação próxima com o host e precisam principalmente sinalizar eventos de envio e conclusão de trabalho, geralmente ao trabalhar em grandes objetos de dados ou fluxos contíguos. Para esses dispositivos, o PCIe funciona muito bem para uma interface aceleradora e o CXL não oferece benefícios significativos.

Tabela 1: Modos de operação compatíveis com CXL

Os protocolos CXL

O padrão CXL define 3 protocolos que são multiplexados dinamicamente juntos antes de serem transportados por meio de um PCIe 5.0 PHY padrão a 32 GT/s:

O protocolo CXL.io é essencialmente um protocolo PCIe 5.0 com alguns aprimoramentos e é usado para inicialização, link-up, descoberta e enumeração de dispositivos e registro de acesso. Ele fornece uma interface de carregamento/armazenamento não coerente para dispositivos de E/S.

O protocolo CXL.cache define as interações entre um Host e um Dispositivo, permitindo que os dispositivos CXL conectados armazenem em cache a memória do Host com latência extremamente baixa usando uma abordagem de solicitação e resposta.

O protocolo CXL.mem fornece um processador host com acesso à memória anexada ao dispositivo usando comandos load e store com a CPU host atuando como solicitante e o dispositivo CXL atuando como subordinado e pode suportar arquiteturas de memória volátil e persistente.

Como pode ser visto na Figura 1, o CXL.cache e o CXL.mem são combinados e compartilham um link e uma camada de transação comuns, enquanto o CXL.io possui sua própria camada de link e transação.

Figura 1: Diagrama de blocos de um dispositivo CXL mostrando PHY, controlador e aplicativo

Os dados de cada um dos três protocolos são multiplexados dinamicamente pelo bloco Arbitration e Multiplexing (ARB/MUX) antes de serem entregues ao PCIe 5.0 PHY para transmissão a 32GT/s. O ARB/MUX arbitra entre solicitações das camadas de link CXL (CXL.io e CXL.cache/mem) e multiplexa os dados com base nos resultados da arbitragem, que usam arbitragem round-robin ponderada com pesos definidos pelo Host. O ARB/MUX também lida com solicitações de transição de estado de energia das camadas de link, criando uma única solicitação para a camada física para operação ordenada de desligamento.

O CXL transporta dados por meio de flits de 528 bits de largura fixa, que são compostos por quatro slots de 16 bytes com um CRC de dois bytes adicionados: (4 x 16 + 2 = 66 Bytes = 528 bits). Os slots são definidos em vários formatos e podem ser dedicados ao protocolo CXL.cache ou ao protocolo CXL.mem. O cabeçalho flit define os formatos dos slots e carrega as informações que permitem que a camada de transação roteie corretamente os dados para os protocolos pretendidos.

Como o CXL usa o PCIe 5.0 PHY e a parte elétrica, ele pode ser conectado efetivamente a um sistema em qualquer lugar que o PCIe 5.0 possa ser usado via Flex Bus, que é uma porta flexível de alta velocidade que pode ser configurada estaticamente para suportar PCIe ou CXL. A Figura 2 mostra um exemplo do link Flex Bus. Essa abordagem permite que um sistema CXL aproveite os retimers PCIe; no entanto, atualmente, o CXL é definido apenas como um link de CPU de conexão direta, portanto, não pode tirar proveito dos switches PCIe. À medida que o padrão evolui, a funcionalidade de comutação pode ser adicionada ao padrão; em caso afirmativo, novos switches CXL precisarão ser criados.

Figura 2: O barramento flexível. link suporta placas nativas PCIe e/ou CXL

Tipos de dispositivos CXL

Como o protocolo CXL.io é usado para inicialização e link-up, ele deve ser suportado por todos os dispositivos CXL e, se o protocolo CXL.io ficar inativo, o link não poderá operar. As diferentes combinações dos outros dois protocolos resultam em um total de três tipos de dispositivos CXL exclusivos que são definidos e podem ser suportados pelo padrão CXL.

A Figura 3 mostra os três tipos de dispositivos CXL definidos junto com seus protocolos correspondentes, aplicativos típicos e os tipos de acesso à memória suportados.

Figura 3: Três tipos de dispositivos CXL definidos

Para Dispositivos Tipo 2, o CXL definiu dois “Viés” de coerência que governam como o CXL processa os dados coerentes entre a memória anexada ao Host e ao Dispositivo. Os modos de polarização são referidos como polarização do host e polarização do dispositivo, e o modo de operação pode ser alterado conforme necessário para otimizar o desempenho de uma determinada tarefa durante a operação do link.

Quando um Dispositivo Tipo 2 (por exemplo, um acelerador) está trabalhando em dados entre o envio do horário de trabalho ao Host e sua conclusão subsequente, o modo de polarização do dispositivo é usado para garantir que o dispositivo possa acessar sua memória anexada ao dispositivo diretamente sem ter que falar com os mecanismos de coerência do Host. Assim, garante-se ao Dispositivo que o Host não possui a linha em cache. Isso dá o melhor desempenho de latência possível ao Dispositivo, tornando o Device bias o principal modo de operação para execução do trabalho pelo acelerador. O Host ainda pode acessar a memória anexada ao dispositivo quando estiver no modo Device bias, mas o desempenho não será o ideal.

O modo de polarização do host prioriza o acesso coerente do host à memória anexada ao dispositivo. Normalmente é usado durante o envio de trabalho quando os dados estão sendo gravados do Host para a memória anexada ao dispositivo e é usado para conclusão do trabalho quando os dados estão sendo lidos da memória anexada ao dispositivo pelo Host. No modo de polarização do host, a memória anexada ao dispositivo aparece para o dispositivo exatamente como a memória anexada ao host e, se o dispositivo precisar de acesso, ela será tratada por uma solicitação ao host.

O modo de polarização pode ser controlado usando software ou hardware por meio dos dois mecanismos de gerenciamento de modo suportados, que são assistidos por software e autônomos de hardware. Um acelerador ou outro dispositivo tipo 2 pode escolher o modo de polarização e, se nenhum modo for selecionado, o sistema assume o modo de polarização do host como padrão, de modo que todos os acessos à memória anexada ao dispositivo devem ser roteados pelo host. O modo de polarização pode ser alterado com uma granularidade de uma página de 4 KB e é rastreado por meio de uma tabela de polarização implementada no dispositivo Tipo 2.

Uma característica importante do padrão CXL é que o protocolo de coerência é assimétrico. O agente de cache Home reside apenas no Host. Assim, o Host controla o armazenamento em cache da memória, que resolve a coerência de todo o sistema para um determinado endereço das solicitações do Dispositivo CXL anexado. Isso contrasta com os protocolos de coerência aberta e proprietários existentes que estão em uso, particularmente aqueles para conexão CPU-a-CPU, pois geralmente são simétricos, tornando todos os dispositivos interconectados aos pares.

Embora isso tenha algumas vantagens, um protocolo de coerência de cache simétrico é mais complexo e a complexidade resultante deve ser tratada por cada dispositivo. Dispositivos com diferentes arquiteturas podem adotar diferentes abordagens de coerência que são otimizadas no nível da microarquitetura, o que pode tornar a adoção ampla do setor mais desafiadora. Usando uma abordagem assimétrica controlada pelo Host, diferentes CPUs e aceleradores podem facilmente se tornar parte do ecossistema CXL emergente.

Futuro do CXL

Pode-se imaginar vários protocolos sendo usados ​​juntos em grandes sistemas com coerência de memória para lidar com requisitos de CPU para CPU, CPU para dispositivo conectado e requisitos de chassi a chassi de maior distância. Atualmente, a CXL está focada em fornecer uma solução otimizada para servidores. Sua assimetria inerente significa que pode não ser ideal para conexões de CPU para CPU ou de acelerador para acelerador. Além disso, com sua dependência de PCI 5.0 PHYs, um transporte diferente pode ser mais adequado para melhorar o desempenho das instalações rack a rack.

Com o CXL fortemente acoplado ao PCIe 5.0, esperamos ver produtos que suportam o CXL chegando no mesmo período do PCIe 5.0. Em um editorial de 11 de março de 2019, a Intel diz que “planeja lançar produtos que incorporem a tecnologia CXL a partir das plataformas de data center 2021 da Intel, incluindo processadores Intel® Xeon®, FPGAs, GPUs e SmartNICs.”2

O consórcio CXL reconheceu a necessidade de oferecer suporte a algum tipo de programa de interoperabilidade e conformidade para ajudar na adoção do padrão. Como resultado, algumas pequenas atualizações serão feitas na especificação para ajudar a suportar esse requisito e, eventualmente, um programa de conformidade parece provável que seja implementado.

Comentários

Postagens mais visitadas deste blog

Alan Wake 2: Como acariciar o prefeito Setter (troféu / conquista das coisas boas da vida)

FXAA vs MSAA: o que é melhor para jogos?

Como executar o Windows 11 no Mac M1/M2/M3 gratuitamente