Microsoft explora gestão manual de memória no .Net

No Projecto Snowflake, a empresa está a investigar a possibilidade de juntar o suporte gestão manual de memória, mais segura, com a “recolha lixo” procurando conjugar o melhor de dois modos.

A Microsoft Research está a fazer experiências para a integração da gestão de memória manual segura, com o sistema de recolha de lixo de programação, “garbage collector”(GC) no.Net. O objectivo é oferecer aos programadores a conveniência e a segurança da gestão de memória automatizada, mas também a oportunidade de melhorar desempenhos, com a libertação de memória manual.

A iniciativa, denominada Project Snowflake, é tema num artigo publicado na semana passada pela Microsoft Research e autores da Universidade de Cambridge e Universidade de Princeton. Com a proposta do projecto, os programadores podem escolher entre alocar objectos no GC ou na estrutura de dados manual.

A tecnologia combina o “runtime” .Net com maior facilidade para gerir memória manualmente sem comprometer o desempenho ou a segurança. As aplicações são executadas sem modificação usando o GC, sem degradação de desempenho.

“Os resultados experimentais da nossa implementação .Net CoreCLR em aplicações mostram ganhos substanciais de desempenho especialmente em cenários de “múltiplos” encadeamentos de execução: uma economia de três vezes em conjuntos de execução extrema e de duas vezes no “runtime””, sustentam os investigadores.

O modelo de gestão de memória manual da Microsoft baseia-se na noção de proprietários únicos de objectos manuais, localizados no “stack“ ou na estrutura de dados, mantendo só uma referência sobre os mesmos na estrutura manual. O conceito de “shield”, ou escudo, é introduzido para permitir a partilha simultânea e segura de objectos manuais.

O Projecto Snowflake modifica o “runtime” do CoreCLR na implementação open source de .Net, conhecida como .Net Core, e amplia as bibliotecas normalizadas com API que usam a memória manual.

O escudo cria um estado no armazenamento de encadeamentos de execução para evitar a dupla atribuição de memória enquanto um objecto está a ser usado. Enquanto os sistema de “recolha de lixo”, como o .Net GC, oferecem altos débitos através, por exemplo da recolha de objectos recentes, estudos mostram que o GC pode introduzir uma sobrecarga de desempenho, em comparação com a gestão manual de memória, dizem os investigadores.

Estas sobrecargas são amplificadas na analítica grandes volumes de dados e aplicações de processamento de fluxos em tempo real, em parte devido à necessidade de monitorizar grandes volumes, explicaram. “Essa tendência deverá manter-se conforme os servidores modernos usam memórias cada vez maiores ‒ aquelas de centenas de gigabytes, ou mesmo terabytes, já são comuns”, observam os pesquisadores.

A gestão manual de memória resolve o problema ao evitar o rastreio de grupos de objectos interligados, para libertar objectos livres. Permite que os programadores usem o seu próprio conhecimento sobre a vidas dos objetos para libertar os objectos nos locais específicos de um programa. Isso melhora a taxa de transferência e o uso de memória, de acordo com os investigadores.

Mas a gestão manual de memória é “tipicamente insegura” e pode levar a falhas e vulnerabilidades. Também cancela os benefícios de produtividade do GC. O Projecto Snowflake modifica o “runtime” do CoreCLR na implementação open source de .Net, conhecida como .Net Core, e amplia as bibliotecas normalizadas com API que usam a memória manual.

O modelo de programação flexível é reforçado para a gestão manual de memória, permitindo que os objectos estejam alocados e deixem de estar em locais arbitrários de programas, sendo partilhados simultaneamente e com segurança entre múltiplos segmentos.




Deixe um comentário

O seu email não será publicado