On Fri, Sep 29, 2017 at 03:13:29PM +0200, Peter Zijlstra wrote: > On Fri, Sep 29, 2017 at 02:24:03PM +0200, Vitaly Kuznetsov wrote: > > 1) In case the system is under extreme memory pressure and > > __get_free_page() is failing in tlb_remove_table() we'll be doing > > smp_call_function() for _each_ call (avoiding batching). We may want to > > have a pre-allocated pool. > > MMU_GATHER_BUNDLE should avoid it being for _every_ call.
My bad, that's only for pages, not tables :/ > Also, note that tlb_gather is preemptible, so pre-alloc is 'difficult' > and you will run out, esp. when memory is right. > > > 2) The default MAX_TABLE_BATCH is static (it is equal to the number of > > pointer we can fit into one page - sizeof(struct mmu_table_batch) == > > 509), we may want to adjust it for very big systems. > > That would then put more stress on the memory allocator because you're > then asking for higher order pages.