Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Jul 2008 17:25:24 +0000 (UTC)
From:      John Baldwin <jhb@FreeBSD.org>
To:        src-committers@FreeBSD.org, cvs-src@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/kern sched_4bsd.c
Message-ID:  <200807281725.m6SHPgMP052305@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
jhb         2008-07-28 17:25:24 UTC

  FreeBSD src repository

  Modified files:
    sys/kern             sched_4bsd.c 
  Log:
  SVN rev 180923 on 2008-07-28 17:25:24Z by jhb
  
  Implement support for cpusets in the 4BSD scheduler.
  - When a cpuset is applied to a thread, walk the cpuset to see if it is a
    "full" cpuset (includes all available CPUs).  If not, set a new
    TDS_AFFINITY flag to indicate that this thread can't run on all CPUs.
    When inheriting a cpuset from another thread during thread creation, the
    new thread also inherits this flag.  It is in a new ts_flags field in
    td_sched rather than using one of the TDF_SCHEDx flags because fork()
    clears td_flags after invoking sched_fork().
  - When placing a thread on a runqueue via sched_add(), if the thread is not
    pinned or bound but has the TDS_AFFINITY flag set, then invoke a new
    routine (sched_pickcpu()) to pick a CPU for the thread to run on next.
    sched_pickcpu() walks the cpuset and picks the CPU with the shortest
    per-CPU runqueue length.  Note that the reason for the TDS_AFFINITY flag
    is to avoid having to walk the cpuset and examine runq lengths in the
    common case.
  - To avoid walking the per-CPU runqueues in sched_pickcpu(), add an array
    of counters to hold the length of the per-CPU runqueues and update them
    when adding and removing threads to per-CPU runqueues.
  
  MFC after:      2 weeks
  
  Revision  Changes    Path
  1.128     +116 -0    src/sys/kern/sched_4bsd.c



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