O mapeamento de memória diminui com o tempo, alternativas?

Eu tenho cerca de 700 matrizes armazenadas em disco, cada uma com cerca de 70 mil linhas e 300 colunas.

Eu tenho que carregarpartes dessas matrizes relativamente rapidamente, em torno de 1k linhas por matriz, em outra matriz que tenho na memória. A maneira mais rápida que encontrei para fazer isso é usando mapas de memória, onde inicialmente posso carregar as linhas de 1k em cerca de 0,02 segundos. No entanto, o desempenho não é consistente e, às vezes, o carregamento leva até 1 segundo por matriz!

Meu código fica assim:

target = np.zeros((7000, 300))
target.fill(-1)  # allocate memory

for path in os.listdir(folder_with_memmaps):
    X = np.memmap(path, dtype=_DTYPE_MEMMAPS, mode='r', shape=(70000, 300))
    indices_in_target = ... # some magic
    indices_in_X = ... # some magic
    target[indices_in_target, :] = X[indices_in_X, :]

Com o tempo linha a linha, determinei que é definitivamente a última linha que diminui com o tempo.

Upadte: Plotar os tempos de carregamento fornece resultados diferentes. Uma vez, ficou assim, ou seja, a degradação não foi gradual, mas saltou após precisamente 400 arquivos. Poderia ser algum limite de SO?

Mas outra vez parecia completamente diferente:

Depois de mais alguns testes, parece que o segundo gráfico é bastante típico do desenvolvimento de desempenho.

Além disso, tenteidel X após o loop, sem nenhum impacto. Nem acessar o Python subjacentemmap através daX._mmap.close() trabalhos.

Alguma idéia de por que há desempenho inconsistente? Existem alternativas mais rápidas para armazenar e recuperar essas matrizes?

questionAnswers(2)

yourAnswerToTheQuestion