On Tue, Jun 9, 2015 at 2:14 PM, Dave Hansen <dave.hansen@xxxxxxxxx> wrote: > > The 0 cycle TLB miss was also interesting. It goes back up to something > reasonable if I put the mb()/mfence's back. So I've said it before, and I'll say it again: Intel does really well on TLB fills. The reason is partly historical, with Win95 doing a ton of TLB invalidation (I think every single GDI call ended up invalidating the TLB, so under some important Windows benchmarks of the time, you literally had a TLB flush every 10k instructions!). But partly it is because people are wrong in thinking that TLB fills have to be slow. There's a lot of complete garbage RISC machines where the TLB fill took forever, because in the name of simplicity it would stop the pipeline and often be done in SW. The zero-cycle TLB fill is obviously a bit optimistic, but at the same time it's not completely insane. TLB fills can be prefetched, and the table walker can hit the cache, if you do them right. And Intel mostly does. So the normal full (non-global) TLB fill really is fairly cheap. It's been optimized for, and the TLB gets re-filled fairly efficiently. I suspect that it's really the case that doing more than just a couple of single-tlb flushes is a complete waste of time: the flushing takes longer than re-filling the TLB well. Linus -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>