From: Aaron Lu <aaron.lu@intel.com>
To: "Huang, Ying" <ying.huang@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>,
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: Fri, 12 Aug 2016 10:16:18 +0800 [thread overview]
Message-ID: <85bd3208-d65e-ce55-d488-9115f1f57858@intel.com> (raw)
In-Reply-To: <87h9arz6cw.fsf@yhuang-mobile.sh.intel.com>
On 08/11/2016 11:13 PM, Huang, Ying wrote:
> 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>
Oh right, sorry about that.
Regards,
Aaron
prev parent reply other threads:[~2016-08-12 2:16 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-11 7:44 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 ` [PATCH] x86/irq: do " Huang, Ying
2016-08-12 2:16 ` Aaron Lu [this message]
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=85bd3208-d65e-ce55-d488-9115f1f57858@intel.com \
--to=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 \
--cc=ying.huang@intel.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome