このページを編集する際は、編集に関する方針に従ってください。

概要

  • include/linux/sched.hにて定義
  • スケジュール・ドメイン
    • スケジュール・ドメインはSMTやSMP、そしてNUMAのようなハードウェアの階層構造に対応するためにスケジューラも階層化したものである
    • スケジューリング方針、ロードバランス方針などを共有する集合体である「ドメイン」(sched_domain構造体)と、ドメインに属するCPUである「グループ」(sched_group構造体)から成っており、よりきめの細かいスケジューリングが可能

  • sched_domainの初期化一覧
    • SD_NODE_INIT
      • NUMA用ドメインの初期化
    • SD_CPU_INIT
      • 物理CPU用ドメインの初期化
    • SD_SIBLING_INIT
      • 論理CPU用ドメインの初期化
SD_NODE_INITSD_CPU_INITSD_SIBLING_INIT
spanCPU_MASK_NONECPU_MASK_NONECPU_MASK_NONE
parentNULLNULLNULL
groupsNULLNULLNULL
min_interval811
max_interval3242
busy_factor32648
imbalance_pct125125110
cache_hot_time(10*1000)(5*1000/2)0
cache_nice_tries110
per_cpu_gain10010025
flagsSD_LOAD_BALANCESD_LOAD_BALANCESD_LOAD_BALANCE
SD_BALANCE_EXECSD_BALANCE_NEWIDLESD_BALANCE_NEWIDLE
SD_WAKE_BALANCESD_BALANCE_EXECSD_BALANCE_EXEC
SD_WAKE_AFFINESD_WAKE_AFFINE
SD_WAKE_BALANCESD_WAKE_IDLE
SD_SHARE_CPUPOWER
last_balancejiffiesjiffiesjiffies
balance_interval111
nr_balance_failed000

実装

struct sched_domain {

	/* These fields must be setup */
	struct sched_domain *parent;	/* top domain must be null terminated */
  • 親ドメイン
    • ルートドメインはnullに設定されている
	struct sched_group *groups;	/* the balancing groups of the domain */
  • ドメインのグループ
	cpumask_t span;			/* span of all CPUs in this domain */
  • このドメイン内で動作するすべてのCPUを示す
	unsigned long min_interval;	/* Minimum balance interval ms */
  • 最小のバランス処理の時間の間隔(単位はms)
	unsigned long max_interval;	/* Maximum balance interval ms */
  • 最大のバランス処理の時間の間隔(単位はms)
	unsigned int busy_factor;	/* less balancing by factor if busy */
	unsigned int imbalance_pct;	/* No balance until over watermark */
  • ここに設定された値まではバランス調整はしない
	unsigned long long cache_hot_time; /* Task considered cache hot (ns) */
  • キャッシュが有効とみなせる時間(単位はns)
	unsigned int cache_nice_tries;	/* Leave cache hot tasks for # tries */
  • (意味不明)
	unsigned int per_cpu_gain;	/* CPU % gained by adding domain cpus */
  • CPUをドメインに加えることによって、増えるCPUの%(意味不明)
	int flags;			/* See SD_* */
  • ドメインのフラグ
    フラグ名説明(英語)説明の(適当な)訳
    SD_LOAD_BALANCE1Do load balancing on this domain.このドメイン内にてロードバランスをする
    SD_BALANCE_NEWIDLE2Balance when about to become idleアイドル状態になろうとしているときにロードバランスをする
    SD_BALANCE_EXEC4Balance on exec実行時にロードバランスをする
    SD_WAKE_IDLE8Wake to idle CPU on task wakeupタスク起床時、アイドル状態のCPUが動き出す
    SD_WAKE_AFFINE16Wake task to waking CPUCPUがタスクを起こす
    SD_WAKE_BALANCE32Perform balancing at task wakeupタスク起床時、パフォーマンスのバランスを取る
    SD_SHARE_CPUPOWER64Domain members share cpu powerドメインのメンバがCPUのパワーを共有する
	/* Runtime fields. */
	unsigned long last_balance;	/* init to jiffies. units in jiffies */
  • 最後にバランス処理が行われた時間(単位はjiffies)
	unsigned int balance_interval;	/* initialise to 1. units in ms. */
  • バランス処理の時間の間隔(初期値は1、単位はms)
	unsigned int nr_balance_failed; /* initialise to 0 */
  • バランス処理の失敗数(初期値は0)

#ifdef CONFIG_SCHEDSTATS

  • ロードバランスのステイタス
    	/* load_balance() stats */
    	unsigned long lb_cnt[MAX_IDLE_TYPES];
  • ドメイン内で特定のアイドル状態になったタスクをカウントする
	unsigned long lb_failed[MAX_IDLE_TYPES];
  • ドメイン内のタスクの移動に失敗した回数
	unsigned long lb_imbalance[MAX_IDLE_TYPES];
  • ドメイン内の移動させたいタスクの数
	unsigned long lb_nobusyg[MAX_IDLE_TYPES];
  • ドメイン内でビジーではないグループ
	unsigned long lb_nobusyq[MAX_IDLE_TYPES];
  • ドメイン内でビジーではないキュー
	/* sched_balance_exec() stats */
	unsigned long sbe_attempts;
	unsigned long sbe_pushed;
	/* try_to_wake_up() stats */
	unsigned long ttwu_wake_affine;
	unsigned long ttwu_wake_balance;

#endif

};

履歴

  • 作者:ひら
  • 日付:2005/2/4
  • 対象:2.6.10
    更新日更新者更新内容

コメント

  • 1 -- 1? 2015-06-15 (月) 22:24:59
  • 1 -- 1? 2015-06-15 (月) 22:25:02
  • 1 -- -1'? 2015-06-15 (月) 22:25:04
    • 1' -- 1? 2015-06-15 (月) 22:25:05
  • 1 -- 1? 2015-06-15 (月) 22:25:07

  • 1 -- 1? 2015-06-15 (月) 22:25:01

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-06-15 (月) 22:25:07 (711d)