プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

スポンサーサイト このエントリーをはてなブックマークに追加

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)

CFSのnice値について このエントリーをはてなブックマークに追加

某所で話題に上がったので軽くまとめてみる
以下のようなテストプログラムを走らせてみる。nice値5とnice値10のスレッドが
ビジーループを何回回すことができるか競争するというプログラムである


struct thread_param {
int prio;
long counter;
};

#define barrier() __asm__ __volatile__("": : :"memory")

void* loop(void* _param)
{
struct thread_param *param = _param;

setpriority(PRIO_PROCESS, 0, param->prio);
usleep(1000);

for(;;) {
param->counter++;
barrier();
}

return NULL;
}

int main()
{
pthread_t thr;
cpu_set_t cpuset;
struct thread_param param1 = {
.prio = 5,
};
struct thread_param param2 = {
.prio = 10,
};

CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);

sched_setaffinity(0, sizeof(cpu_set_t), &cpuset);

pthread_create(&thr, NULL, loop, ¶m1);
pthread_create(&thr, NULL, loop, ¶m2);

sleep(1);

printf("%ld %ld %f\n", param1.counter, param2.counter,
((double)param1.counter)/param2.counter);

return 0;
}


そうすると、ほぼブレなく、のように、2つのループの差が3倍となる。
219989975 72166990 3.048346

これは kernel watchのスケジューラ特集の回 で説明したように、カーネル内部で優先度1違う毎に1.25倍のボーナスがついているので、1.25^5 ≒ 3 という理屈である。

まとめるとnice値が5変わるごとに3倍CPU時間が変わる。という関係は憶えておくと便利だよ。と
関連記事


linux | 【2010-04-25(Sun) 01:18:18】 | Trackback:(0) | Comments:(0)
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。