On Wed, Mar 11, 2020 at 4:17 PM Kirill Tkhai <ktkhai@xxxxxxxxxxxxx> wrote: > > Hi, Pasha, > > On 11.03.2020 20:45, Pavel Tatashin wrote: > > On Wed, Mar 11, 2020 at 8:39 AM Shile Zhang > > <shile.zhang@xxxxxxxxxxxxxxxxx> wrote: > >> > >> When 'CONFIG_DEFERRED_STRUCT_PAGE_INIT' is set, 'pgdatinit' kthread will > >> initialise the deferred pages with local interrupts disabled. It is > >> introduced by commit 3a2d7fa8a3d5 ("mm: disable interrupts while > >> initializing deferred pages"). > >> > >> On machine with NCPUS <= 2, the 'pgdatinit' kthread could be bound to > >> the boot CPU, which could caused the tick timer long time stall, system > >> jiffies not be updated in time. > >> > >> The dmesg shown that: > >> > >> [ 0.197975] node 0 initialised, 32170688 pages in 1ms > >> > >> Obviously, 1ms is unreasonable. > >> > >> Now, fix it by restore in the pending interrupts for every 32*1204 pages > >> (128MB) initialized, give the chance to update the systemd jiffies. > >> The reasonable demsg shown likes: > >> > >> [ 1.069306] node 0 initialised, 32203456 pages in 894ms > > > > Sorry for joining late to this thread. I wonder if we could use > > sched_clock() to print this statistics. Or not to print statistics at > > all? > > This won't work for all cases since sched_clock() may fall back to jiffies-based > implementation, which gives wrong result, when interrupts are disabled. > > And a bigger problem is not a statistics, but it's advancing jiffies. Some parallel > thread may expect jiffies are incrementing, and this will be a surprise for that > another component. > > So, this fix is more about modularity and about not introduction a new corner case. Makes sense. Reviewed-by: Pavel Tatashin <pasha.tatashin@xxxxxxxxxx> Thank you, Pasha