Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 25 Feb 2002 18:13:17 +1100 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Matthew Dillon <dillon@apollo.backplane.com>
Cc:        Terry Lambert <tlambert2@mindspring.com>, Alfred Perlstein <alfred@FreeBSD.ORG>, Bosko Milekic <bmilekic@unixdaemons.com>, Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp>, <current@FreeBSD.ORG>, John Baldwin <jhb@FreeBSD.ORG>
Subject:   Re: Success!  critical_enter()/critical_exit() revamp (was Re: malloc_bucket() idea (was Re: How to fix malloc.))
Message-ID:  <20020225180234.C39518-100000@gamplex.bde.org>
In-Reply-To: <200202250152.g1P1q1d27292@apollo.backplane.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 24 Feb 2002, Matthew Dillon wrote:

> :cpu_switch() certainly needs to do this if it can be called with the
> :interrupt enable flag[s] in different states.  I need the sti's (actually
> :enable_intr()'s because I don't want fast interrupts to be disabled
> :during context switches.  This works because enabling interrupts is sure
> :to be safe, since we might be switching to a thread that will enable
> :them.  Some sort of lock is needed to prevent interrupts interfering
> :with the switch.  I think soft-masking them in critical_enter() is
> :sufficient in your version too.
>
>     I don't think we want to make sched_lock any more complex then it
>     already is, so at least for the foreseeable future we are not
>     going to be able to actually execute an interrupt handler until
>     the sched_lock is released in (typically) msleep().  I am rather

Well, my kernel has been executing fast interrupt handlers while sched_lock
is held for almost a year.  It's actually less complicated with respect to
sched_lock but more complicated with respect to fast interrupt handlers.

>     annoyed that two levels of procedure have to be called with the
>     sched_lock held (mi_switch() and cpu_switch()), leaving interrupts
>     disabled for a fairly long period of time, but I don't see any way
>     around it right now.

The worst offenders for interrupt latency seemed to be calcru() and/or
the sched_locking related to fork and/or exit.  Latency was many thousand
instructions (reasonable only on 100+ MIPS machines).  sched_locking for
calcru() is moostly bogus and should be easy to avoid, but not so for
context switching.

>     Eventually (presumably) we will have per-cpu run queues.  That combined
>     with interrupt stealing may resolve the problem for us.   I am still
>     not convinced that making the various *pending* flags globals will
>     be more efficient, because it introduces significant cache mastership
>     issues.  It might be easier to do this:

OK.  I don't care about this yet.

Bruce


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




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