Há mais coisas acontecendo do que simplesmente colocar dados na RAM quando você está usando um sistema de arquivos na memória. Você ainda precisa manipular as estruturas de dados associadas ao arquivo, incluindo o rastreamento em que, na memória, estão todas as alocações para ele. Escrever essas informações também leva tempo (em particular, para o teste que você está fazendo, o tamanho do arquivo está sendo atualizado em cada gravação, o que imediatamente duplica o número de lugares que os dados estão mudando na memória).
Além disso, a alocação de memória é extremamente lenta. Na verdade, trata-se de uma das coisas mais lentas que você pode fazer na maioria dos sistemas que não envolvem E / S, sendo que a única coisa significativamente mais lenta é criar um novo thread ou processo. Ferramentas como ramspeed
pré-alocam toda a memória que irão usar quando são inicializadas, para que possam testar o desempenho real da memória. Em comparação, o tmpfs não tem idéia do tamanho de um arquivo que você vai criar, então ele tem que alocar tudo sob demanda, e o faz em pedaços não maiores do que o tamanho do bloco dd
(acho que é 64k, mas não tenho certeza). Por causa disso, você tem sobrecarga em cada bloco para alocar memória para armazenar esse bloco.