• C
    [IA64] optimize flush_tlb_range on large numa box · ce9eed5a
    Chen, Kenneth W 提交于
    It was reported from a field customer that global spin lock ptcg_lock
    is giving a lot of grief on munmap performance running on a large numa
    machine.  What appears to be a problem coming from flush_tlb_range(),
    which currently unconditionally calls platform_global_tlb_purge().
    For some of the numa machines in existence today, this function is
    mapped into ia64_global_tlb_purge(), which holds ptcg_lock spin lock
    while executing ptc.ga instruction.
    
    Here is a patch that attempt to avoid global tlb purge whenever
    possible.  It will use local tlb purge as much as possible. Though the
    conditions to use local tlb purge is pretty restrictive.  One of the
    side effect of having flush tlb range instruction on ia64 is that
    kernel don't get a chance to clear out cpu_vm_mask.  On ia64, this mask
    is sticky and it will accumulate if process bounces around.  Thus
    diminishing the possible use of ptc.l.  Thoughts?
    Signed-off-by: NKen Chen <kenneth.w.chen@intel.com>
    Acked-by: NJack Steiner <steiner@sgi.com>
    Acked-by: NKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Signed-off-by: NTony Luck <tony.luck@intel.com>
    ce9eed5a
tlb.c 4.7 KB