O ZFS em plataformas não-Solaris parece ter um desempenho muito ruim quando mmap()
é usado para gravar dados.
Veja este tópico da antiga lista de discussão do OpenSolaris :
Remedies for suboptimal mmap performance on zfs
I'm getting sub-optimal performance with an mmap based database (mongodb) which is running on zfs of Solaris 10u9.
...
Isso foi em uma versão mais antiga do Solaris. Isso é relevante por causa de este tópico de julho de 2016 da lista de discussão do FreeBSD (ênfase adicionada ):
Short story: ZFS was tacked on the kernel and was never properly integrated into the VM page management, which leads to DRAMATIC poor performance for anything which uses mmap() for write IO. This was solved in Oracle Solaris with the great VM allocator rewrite which landed after Opensolaris was made closed source again.
Without a complete rewrite of the VM system this problem is unsolvable.
com este acompanhamento :
... since the initial import very little has been done to improve integration, and I don't know of anyone who is up to the task taking an interest in it. Consequently, mmap() performance is likely "doomed" for the foreseeable future.
Então o problema foi corrigido no Solaris, mas não no FreeBSD.
Se você precisar de um desempenho mais rápido em mmap()
, recomendo limitar drasticamente o tamanho do seu ZFS ARC. Isso deve reduzir o impacto de problemas de coerência entre o cache de páginas que o mmap()
usa e o ARC. Isso pode melhorar o desempenho. Então, novamente, talvez não. Mas vale a pena tentar. Apenas não seja muito pequeno, ou seu limite de ARC será ignorado.