Cache Memory Leak (ou parecido com um) desacelera um programa

1

Eu tenho um problema estranho que parece um vazamento no cache de memória (não um vazamento de memória) que leva a uma lentidão de um programa.

Deixe-me preparar o palco primeiro. Reprodutivamente (usando gânglios para monitorar), em um cluster, notei que a memória em cache está aumentando, de forma relativamente lenta. Quando se torna grande, algo como 2/3 da memória total (Intel Gold com 32 núcleos e 192Gb), um programa está sendo executado mais devagar por um fator de ~ 1.5. Se eu limpar o cache e sincronizar o disco (não testei o que importa) com " sync ; echo 3 > /proc/sys/vm/drop_caches ", a velocidade do programa aumenta novamente (~ 1,5 vezes mais rápido).

O problema está associado a E / S - somente CPUs que estão fazendo qualquer E / S mostram o vazamento do cache. O programa está fazendo uma boa quantidade de I / O, mas não quantidades massivas (10-40 Mb). Eu compilar usando ifort com -assume buffered_io. Parece que a E / S deixa os arquivos em cache no final, efetivamente um "vazamento de memória cache".

Existem várias partes para este problema, tanto porque este "vazamento" está ocorrendo, como evitá-lo (por exemplo, a força bruta cron uma limpeza de cache a cada 3 h) e como / porque o programa diminui tanto (ineficiência de operações vetoriais para memória não-contígua como uma especulação que não tenho certeza se acredito).

Toda e qualquer sugestão tanto para curas quanto para formas de melhor entender seria útil.

N.B., é um grande programa, portanto, reproduzi-lo com um código pequeno pode não ser relevante.

    
por Laurence Marks 25.10.2018 / 14:30

0 respostas