Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 1 Oct 2008 16:44:00 -0700
From:      "Murty, Ravi" <ravi.murty@intel.com>
To:        <freebsd-hackers@freebsd.org>
Cc:        "Teller, Justin S" <justin.s.teller@intel.com>
Subject:   Sched_ule.c - 8.0
Message-ID:  <AEBCFC23C0E40949B10BA2C224FC61B0087FA4DE@orsmsx416.amr.corp.intel.com>

next in thread | raw e-mail | index | archive | help
Hello All,

=20

I was browsing the ULE 8.0 scheduler code and happen to find something
interesting. This might be intentional; since I don't think it is that
big a deal and is certainly not a bug.

In the implementation of sched_affinity - which from what I understand
gets called when the cpuset mask for a thread or a process is setup and
threads need to potentially migrated.

The code is pretty straightforward and one of the checks it does is=20

=20

if (!TD_IS_RUNNING(td))

    return;

=20

I initially read this to mean, if the thread isn't running, it's
probably inhibited and that's okay because when it wanders into
sched_add eventually and since its cpuset mask is setup, it'll make its
way to the runq of one of the "legal" cpus. However the very next
thought I had was this thread could be on a runq right now and the macro
will return the fact that the thread isn't running. In such a case we
would probably end up running on the wrong CPU for a while before
realizing that we aren't allowed to do so.

=20

Thanks

Ravi

=20

=20




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