A Microsoft abriu o código para o sistema de alocação de memória mimalloc

A Microsoft abriu uma biblioteca sob a licença do MIT mmalloc a partir de implementações de um sistema de alocação de memória originalmente criado para componentes de tempo de execução de linguagens Koka и Lean. Mimalloc é adaptado para uso em aplicativos padrão sem alterar seu código e pode atuar como um substituto transparente para a função malloc. Suporta trabalho em Windows, macOS, Linux, BSD e outros sistemas semelhantes a Unix.

A principal característica do mimalloc é sua implementação compacta (menos de 3500 linhas de código) e desempenho muito alto. EM testes realizados mimalloc superou todas as bibliotecas concorrentes de alocação de memória, incluindo Jemalloc, tcmalloc, snmalloc, rpmalloc и hoard.

Para avaliar o desempenho, um conjunto de testes padrão Em alguns testes, o mimalloc é muitas vezes mais rápido que outros sistemas; por exemplo, no teste de migração de objetos entre diferentes threads, o mimalloc revelou-se mais de 2.5 vezes mais rápido que o tcmalloc e o jemalloc. Ao mesmo tempo, na maioria dos testes também é observado menor consumo de memória, em algumas situações o consumo de memória pode ser reduzido em 25%.

A Microsoft abriu o código para o sistema de alocação de memória mimalloc

O alto desempenho é alcançado principalmente através do uso de fragmentação de lista gratuita. Em vez de uma lista grande, mimalloc usa uma série de listas menores, cada uma delas vinculada a uma página de memória. Essa abordagem reduz a fragmentação e aumenta a localidade dos dados na memória. Uma página de memória é um conjunto agrupado de blocos de tamanho semelhante. Em sistemas de 64 bits, o tamanho da página normalmente é de 64 KB. Se não houver mais blocos ocupados na página, ela será totalmente liberada e a memória será devolvida ao sistema operacional, o que reduz os custos de memória e a fragmentação em programas de longa execução.

A biblioteca pode ser incluída na fase de vinculação ou carregada para um programa já montado (“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”). A biblioteca também oferece API para integrar funcionalidade em tempo de execução e controle de comportamento refinado, por exemplo, para conectar manipuladores de liberação de memória lenta e aumentar monotonicamente contadores de referência. É possível criar e utilizar vários “heaps” em uma aplicação para distribuição em diferentes áreas de memória. Também é possível liberar totalmente a pilha, sem passar e liberar separadamente os objetos nela colocados.

É possível construir a biblioteca em modo seguro, no qual páginas especiais de verificação de memória (páginas de proteção) são substituídas nos limites do bloco, e são utilizadas randomização da distribuição de blocos e criptografia de listas de blocos liberados. Essas medidas permitem bloquear as técnicas mais típicas de exploração de buffer overflows baseados em heap. Ao ativar o Modo de segurança, o desempenho diminui aproximadamente 3%.

Dentre as características do mimalloc, destaca-se também que ele não é suscetível a problemas de inchaço devido à grande fragmentação. Na pior das hipóteses, o consumo de memória aumenta 0.2% para metadados e pode chegar a 16.7% para memória distribuída. Para evitar conflitos ao acessar recursos, o mimalloc utiliza apenas operações atômicas.

Fonte: opennet.ru

Adicionar um comentário