O kernel do Linux é a espinha dorsal dos sistemas operacionais (SO) Linux e é a interface fundamental entre o hardware de um computador e seus processos.
Recentemente, a notícia de que Google fez uma proposta através das listas de discussão de desenvolvedores do kernel Linux, para transferência de dados de rede entre dispositivos.
A proposta como tal é em uma implementação do mecanismo Memória do dispositivo TCP (devmem TCP), que permite que os dados sejam transferidos diretamente pela rede da memória de alguns dispositivos para a memória de outros dispositivos, sem a cópia intermediária desses dados em buffers localizados na memória do sistema host.
Sobre a proposta do Google, é mencionado que Espera-se que a memória TCP do dispositivo aumente significativamente a eficiência de interação em clusters e sistemas de aprendizado de máquina distribuídos usando placas aceleradoras adicionais.
Além disso, é mencionado que o uso de aceleradores de aprendizado de máquina leva a um aumento significativo na quantidade de informações transferidas no processo de treinamento de modelos de armazenamento para memória GPU/TPU. Em alguns casos, treinando modelos de aprendizado de máquina pode consumir apenas 50% dos recursos de computação TPU disponíveis, e uma maneira de eliminar o tempo de inatividade e aproveitar ao máximo os recursos de GPU/TPU é aumentar o desempenho e a eficiência da transferência de dados.
Atualmente, a transferência de dados entre dispositivos em hosts diferentes limita-se a copiar dados de memória do dispositivo para hospedar a memória, transferência informação para outro host na rede e copie da memória do host destino para a memória de outro dispositivo. Tal esquema não é o ideal e, ao transferir grandes quantidades de informações, cria uma carga adicional na largura de banda da memória e no barramento PCIe.
Hoje, a maioria das transferências de dados de dispositivo para dispositivo na rede são implementado com as seguintes operações de baixo nível: copiar do dispositivo para o host, Transferência de rede de host para host e cópia de host para dispositivo.
A implementação não é ideal, especialmente para transferências de dados em massa, e pode colocam uma pressão significativa nos recursos do sistema, como largura de banda da memória do host,Largura de banda PCIe, etc. Uma razão importante por trás do estado atual é a falta de semântica do kernel para expressar transferências de dispositivo para rede.
O mecanismo TCP da memória do dispositivo permite excluir a memória do host dessa cadeia e transferir dados imediatamente pela rede da memória do dispositivo e colocar os dados recebidos em pacotes de rede na memória do dispositivo.
Para que o TCP de memória do dispositivo funcione, é necessária uma placa de rede que possa processar separadamente cabeçalhos de pacotes e dados encapsulados em pacotes (carga útil) em diferentes buffers. Os dados são carregados da memória do dispositivo para o buffer de carga NIC usando o mecanismo dmabuf, e os cabeçalhos são passados da memória principal e preenchidos pela pilha TCP/IP do sistema. Para melhorar a eficiência, os recursos das placas de rede podem ser usados adicionalmente para processamento separado de fluxos em diferentes filas rx.
A necessidade de um mecanismo de troca de dados de alto desempenho entre os dispositivos está aumentando considerando o uso de sistemas distribuídos para aprendizado de máquina, onde os aceleradores estão localizados em hosts diferentes, bem como quando os dados para treinamento do modelo são transferidos de SSDs externos. testes de performance feito em uma configuração com 4 GPUs e 4 placas de rede mostrou que o uso do Device Memory TCP permite atingir um nível de 96,6% da velocidade linha disponível ao transferir dados diretamente entre a memória do dispositivo.
Finalmente, vale a pena mencionar que a implementação ainda está no estágio RFC, ou seja, é para discussão e revisão pela comunidade, mas não formalizado para envio ao ramo principal do kernel do Linux.
fonte: https://lore.kernel.org/