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. 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.

