I tried both regular IO and mmap and was unable to make regular IO as fast as mmap.
This is on a machine with 32 real cores running 64 job threads, saturating all of them with jobs. The jobs are a mixture of small (metadata) and big (textures and models) files. In theory, this should be a pretty bad situation for the TLB shootdown, and I was concerned about them.
But in reality it seemed to be fine, and a fair amount faster than with regular IO due to being able to have one less extra copy of the data.