All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Huang\, Ying" <ying.huang@intel.com>
To: Aaron Lu <aaron.lu@intel.com>
Cc: <x86@kernel.org>, <linux-kernel@vger.kernel.org>,
	Alex Shi <alex.shi@linaro.org>,
	Tomoki Sekiyama <tomoki.sekiyama.qu@hitachi.com>,
	Davidlohr Bueso <dave@stgolabs.net>,
	"Huang Ying" <ying.huang@intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"\"H. Peter Anvin\"" <hpa@zytor.com>
Subject: Re: [PATCH] x86/irq: do not substract irq_tlb_count from irq_call_count
Date: Thu, 11 Aug 2016 08:13:19 -0700	[thread overview]
Message-ID: <87h9arz6cw.fsf@yhuang-mobile.sh.intel.com> (raw)
In-Reply-To: <20160811074430.GA18163@aaronlu.sh.intel.com> (Aaron Lu's message of "Thu, 11 Aug 2016 15:44:30 +0800")

Aaron Lu <aaron.lu@intel.com> writes:

> Since commit 52aec3308db8 ("x86/tlb: replace INVALIDATE_TLB_VECTOR by
> CALL_FUNCTION_VECTOR"), the tlb remote shootdown is done through call
> function vector. That commit didn't take care of irq_tlb_count so later
> commit fd0f5869724f ("x86: Distinguish TLB shootdown interrupts from
> other functions call interrupts") tried to fix it.
>
> The fix assumes every increase of irq_tlb_count has a corresponding
> increase of irq_call_count. So the irq_call_count is always bigger than
> irq_tlb_count and we could substract irq_tlb_count from irq_call_count.
>
> Unfortunately this is not true for the smp_call_function_single case.
> The IPI is only sent if the target CPU's call_single_queue is empty when
> adding a csd into it in generic_exec_single. That means if two threads
> are both adding flush tlb csds to the same CPU's call_single_queue, only
> one IPI is sent. In other words, the irq_call_count is incremented by 1
> but irq_tlb_count is incremented by 2. Over time, irq_tlb_count will be
> bigger than irq_call_count and the substract will produce a very large
> irq_call_count value due to overflow.
>
> Considering that:
> 1 it's not worth to send more IPIs for the sake of accurate counting of
>   irq_call_count in generic_exec_single;
> 2 it's not easy to tell if the call function interrupt is for TLB
>   shootdown in __smp_call_function_single_interrupt.
> Not to exclude TLB shootdown from call function count seems to be the
> simplest fix and this patch just did that.
>
> This is found by LKP's cyclic performance regression tracking recently
> with the vm-scalability test suite. I have bisected to commit
> 0a7ce4b5a632 ("mm/rmap: share the i_mmap_rwsem"). This commit didn't do
> anything wrong but revealed the irq_call_count problem. IIUC, the commit
> makes rwc->remap_one in rmap_walk_file concurrent with multiple threads.
> When remap_one is try_to_unmap_one, then multiple threads could queue
> flush tlb to the same CPU but only one IPI will be sent.
>
> Since the commit enter Linux v3.19, the counting problem only shows up
> from v3.19. Considering this is a behaviour change, I'm not sure if I
> should add the stable tag here.
>
> Signed-off-by: Aaron Lu <aaron.lu@intel.com>

Thanks for fix.  You forget to add :)

Reported-by: "Huang, Ying" <ying.huang@intel.com>

Best Regards,
Huang, Ying

  parent reply	other threads:[~2016-08-11 15:13 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-11  7:44 [PATCH] x86/irq: do not substract irq_tlb_count from irq_call_count Aaron Lu
2016-08-11  9:13 ` Ingo Molnar
2016-08-11  9:16   ` Aaron Lu
2016-08-11 11:57 ` [tip:x86/urgent] x86/irq: Do " tip-bot for Aaron Lu
2016-08-11 15:13 ` Huang, Ying [this message]
2016-08-12  2:16   ` [PATCH] x86/irq: do " Aaron Lu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87h9arz6cw.fsf@yhuang-mobile.sh.intel.com \
    --to=ying.huang@intel.com \
    --cc=aaron.lu@intel.com \
    --cc=alex.shi@linaro.org \
    --cc=dave@stgolabs.net \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=tomoki.sekiyama.qu@hitachi.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.