WPEngine uses NFS/NAS which is a show-stopper. Dreamhost has the same issue, and GoDaddy (still?)
You never, ever, use NFS on something with hundreds of files to load for every page (ie. WordPress).
Every file takes 2-2.5ms to stat/load on NFS (from my tests on WPengine) which seems small but adds up fast.
It means you instantly have 700ms or more of overhead on the SERVER side to render a page (not transmit to the browser, just to render).
You can somewhat get around this by using an opcode cache and turning off file stat but there are still some files that have to be checked like static data read from the disk and turning stat off has other issues when editing code like having to flush the cache.
There's a fair amount of criticism flying around about us on this thread, but that's one I can't make any apologies over.
There's all sorts of interesting things we're doing with NFS, along with caching layers, that ensure this is never a bottleneck -- and even provides benefits in other ways.
I recently removed some code that stat'd 4000 files over NFS. It took ~5 seconds, so it wasn't as bad as you say. Also, I'm pretty sure NFS can do better if you tune it.
Found this [1], which might be helpful. The linked python program shows really high numbers for me though. Hopefully it's incorrect or I just misunderstand what the numbers mean.
If WPengine is getting 2+ms response times then something is very wrong (are they using linux backed vanilla linux style NFS storage? ....bad, bad, bad). If not, then they need to investigate their load averages on their filers :P.
I don't think you follow that with a local file system, file stat (basically to see if the timestamp has changed or file modified) can be done directly inside the local memory cache.
On NFS/NAS it cannot be done locally, because other devices may have had access to the remote filesystem and changed files. So it has to travel the network to make the query. Even if it doesn't have to touch the disk remotely and can fetch it from a remote cache, it's significantly slower than local. Even if it's only 1ms per file, if there are 300 files, that's 300ms (a third of a second) on the SERVER side, before it can start sending output to the internet.
You never, ever, use NFS on something with hundreds of files to load for every page (ie. WordPress).
Every file takes 2-2.5ms to stat/load on NFS (from my tests on WPengine) which seems small but adds up fast.
It means you instantly have 700ms or more of overhead on the SERVER side to render a page (not transmit to the browser, just to render).
You can somewhat get around this by using an opcode cache and turning off file stat but there are still some files that have to be checked like static data read from the disk and turning stat off has other issues when editing code like having to flush the cache.