Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Nov 2006 14:53:33 +0800
From:      David Xu <davidxu@freebsd.org>
To:        Bruce Evans <bde@zeta.org.au>
Cc:        arch@freebsd.org, Kip Macy <kip.macy@gmail.com>, Alan Cox <alc@cs.rice.edu>, freebsd-arch@freebsd.org
Subject:   Re: superpage plans
Message-ID:  <200611231453.34287.davidxu@freebsd.org>
In-Reply-To: <20061123170941.T36132@delplex.bde.org>
References:  <b1fa29170611220939g32469638ncf3a3ddd4bba3670@mail.gmail.com> <200611231205.55629.davidxu@freebsd.org> <20061123170941.T36132@delplex.bde.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thursday 23 November 2006 14:28, Bruce Evans wrote:
> On Thu, 23 Nov 2006, David Xu wrote:
> > On Thursday 23 November 2006 11:25, Bruce Evans wrote:
> >> On Wed, 22 Nov 2006, Alan Cox wrote:
> >>> There is only one caveat.  Idle-time page prezeroing is not supported.
> >>> However, ever since the VM system emerged from the Giant kernel lock,
> >>> I've seen little or no benefit from it.  ...
> >>
> >> That's probably because PREEMPTION is broken and the brokenness turns
> >> idle-time page prezeroing into a pessimization.  Without PREEMPTION I
> >> see much the same benefits from idle-time page prezeroing as in RELENG_4
> >> -- a speedup of a few percent for makeworld.  E.g., for makeworld -j4
> >
> > I think on SMP, the BSD scheduler code does not preempt an idle
> > thread in remote cpu, this might explain the reason why page_zero
> > uses much time on SMP. the maybe_preempt() only works
> > for current cpu.
>
> See my previous mail to freebsd-arch about this.  IPI_PREEMPTION should
> result in preempting pgzero, but doesn't seem to, and if it did then
> you would wish it wouldn't since it has larger overheads than voluntarility
> giving up control.  For user idle threads, there is nothing better
> than sending an IPI, but pgzero does a good job of limiting itself so
> preempting it just pessimizes it.  Even non-IPI preemption will sometimes
> have higher overheads.
>
> Bruce

Do you really believe IPI_PREEMPTION works as expected ? the problem
is in sched_4bsd.c, the remote cpu running an idle cpu is only
interrupted by IPI_AST not IPI_PREEMPT, IPI_AST has no effect for kernel
thread, note that kick_other_cpu is only used for bound thread which is
being resumed, kick_other_cpu does send IPI_PREEMPT,  though pagezero
thread is a bound thread in most time, but it is not the case that 
kick_other_cpu will be used, we want to preempt it not resuem it, so
PREEMPTION and IPI_PREEPMTION do not work for pagezero thread running
on remote cpu.

David Xu



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200611231453.34287.davidxu>