From: Marcelo Tosatti <mtosatti@redhat.com>
To: Hillf Danton <hdanton@sina.com>
Cc: Aaron Tomlin <atomlin@redhat.com>,
frederic@kernel.org, linux-kernel@vger.kernel.org,
linux-mm@kvack.org
Subject: Re: [PATCH v8 5/5] tick/sched: Ensure quiet_vmstat() is called when the idle tick was stopped too
Date: Mon, 17 Oct 2022 13:04:47 -0300 [thread overview]
Message-ID: <Y019H0l48s9bXfxc@fuller.cnet> (raw)
In-Reply-To: <20221003124435.1769-1-hdanton@sina.com>
On Mon, Oct 03, 2022 at 08:44:35PM +0800, Hillf Danton wrote:
> On 26 Sep 2022 10:20:04 +0100 Aaron Tomlin <atomlin@redhat.com> wrote:
> > On Sun 2022-09-25 09:05 +0800, Hillf Danton wrote:
> > > On 24 Sep 2022 16:24:41 +0100 Aaron Tomlin <atomlin@redhat.com> wrote:
> > > >
> > > > In the context of the idle task and an adaptive-tick mode/or a nohz_full
> > > > CPU, quiet_vmstat() can be called: before stopping the idle tick,
> > > > entering an idle state and on exit. In particular, for the latter case,
> > > > when the idle task is required to reschedule, the idle tick can remain
> > > > stopped and the timer expiration time endless i.e., KTIME_MAX. Now,
> > > > indeed before a nohz_full CPU enters an idle state, CPU-specific vmstat
> > > > counters should be processed to ensure the respective values have been
> > > > reset and folded into the zone specific 'vm_stat[]'. That being said, it
> > > > can only occur when: the idle tick was previously stopped, and
> > > > reprogramming of the timer is not required.
> > > >
> > > > A customer provided some evidence which indicates that the idle tick was
> > > > stopped; albeit, CPU-specific vmstat counters still remained populated.
> > > > Thus one can only assume quiet_vmstat() was not invoked on return to the
> > > > idle loop.
> > >
> > > Why did housekeeping CPUs fail to do their works, with this assumption
> > > put aside?
> >
> > Hi Hillf,
> >
> > I'm not sure I understand your question.
> >
> > In this context, when tick processing is stopped, delayed work is not going
> > to be handled until the CPU exits idle.
>
> Given work canceled because per-CPU pages can be freed remotely from
> housekeeping CPUs (see patch 3/5), what is added here is not needed.
>
> IOW which one is incorrect?
>
> BTW given delayed work is not going to be handled until the CPU exits idle,
Hi Hilf,
The comment on the codebase now is:
void quiet_vmstat(void)
{
if (system_state != SYSTEM_RUNNING)
return;
if (!delayed_work_pending(this_cpu_ptr(&vmstat_work)))
return;
if (!need_update(smp_processor_id()))
return;
/*
* Just refresh counters and do not care about the pending delayed
* vmstat_update. It doesn't fire that often to matter and canceling
* it would be too expensive from this path.
* vmstat_shepherd will take care about that for us.
*/
refresh_cpu_vm_stats(false);
}
However this is incorrect. The pending delayed work is only cancelled
when executed and not requeued from:
static void vmstat_update(struct work_struct *w)
{
if (refresh_cpu_vm_stats(true)) {
/*
* Counters were updated so we expect more updates
* to occur in the future. Keep on running the
* update worker thread.
*/
queue_delayed_work_on(smp_processor_id(), mm_percpu_wq,
this_cpu_ptr(&vmstat_work),
round_jiffies_relative(sysctl_stat_interval));
}
}
Since this patchset changes the synchronization to happen at return to
userspace or entering idle, we do want to cancel that work (which, after
synchronization, is not necessary).
> canceling work is noop in 3/5, despite what the vmstat shepherd does depends
> not on tick.
Canceling work is a not a noop in 3/5: If the work is not cancelled (if 3/5
is dropped), there will be a pending work to be executed, from the kworker thread
on an isolated CPU. Which is undesired for a fully isolated CPU, with no
interruptions.
prev parent reply other threads:[~2022-10-17 16:06 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-24 15:22 [PATCH v8 0/5] Ensure quiet_vmstat() is called when the idle tick was stopped too Aaron Tomlin
2022-09-24 15:22 ` [PATCH v8 1/5] mm/vmstat: Add CPU-specific variable to track a vmstat discrepancy Aaron Tomlin
2022-09-24 15:22 ` [PATCH v8 2/5] mm/vmstat: Use vmstat_dirty to track CPU-specific vmstat discrepancies Aaron Tomlin
2022-10-01 14:55 ` kernel test robot
2022-09-24 15:22 ` [PATCH v8 3/5] mm/vmstat: Do not queue vmstat_update if tick is stopped Aaron Tomlin
2022-10-24 11:03 ` Frederic Weisbecker
2022-11-09 19:40 ` Marcelo Tosatti
2022-11-10 19:15 ` Marcelo Tosatti
2022-11-14 12:12 ` Frederic Weisbecker
2022-10-24 11:54 ` Frederic Weisbecker
2022-09-24 15:22 ` [PATCH v8 4/5] tick/nohz_full: Ensure quiet_vmstat() is called on exit to user-mode when the idle " Aaron Tomlin
[not found] ` <CAOr2xH5DjEy7agHYx=5+4cr+OeJz52HUeUttkF9ueS8JHbQMFg@mail.gmail.com>
2022-09-29 8:22 ` Aaron Tomlin
2022-09-29 12:49 ` Rafael Folco
2022-10-21 14:50 ` Frederic Weisbecker
2022-11-10 19:14 ` Marcelo Tosatti
2022-09-24 15:24 ` [PATCH v8 5/5] tick/sched: Ensure quiet_vmstat() is called when the idle tick was stopped too Aaron Tomlin
[not found] ` <20220925010511.1482-1-hdanton@sina.com>
2022-09-26 9:20 ` Aaron Tomlin
[not found] ` <20221003124435.1769-1-hdanton@sina.com>
2022-10-12 12:41 ` Aaron Tomlin
2022-10-17 16:04 ` Marcelo Tosatti [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=Y019H0l48s9bXfxc@fuller.cnet \
--to=mtosatti@redhat.com \
--cc=atomlin@redhat.com \
--cc=frederic@kernel.org \
--cc=hdanton@sina.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox