タグ

ブックマーク / akachochin.hatenadiary.org (3)

  • CFSのvruntimeの値の粒度 - akachochinの日記

    Linuxのスケジューラ CFSの実装を読んでいる。このスケジューラはタスクの中で一番vruntimeの少ないタスクを次の動作タスクに選ぶ。 このvruntimeの粒度がどの程度のものか知りたくソースを読んだ。 結論から言うと、ナノ秒単位のモノトニックタイマがvruntimeのもとになっていることがわかった。 kernel/sched/fair.cの__update_curr()でvruntimeに足している値はdelta_exec_weighted。 delta_exec_weightedはdelta_execから作られる。 さらにdelta_execはupdate_curr()で「rq_of(cfs_rq)->clock_task」と「curr->exec_start」の差から作られる。 ということは「rq_of(cfs_rq)->clock_task」と「curr->exec_sta

    CFSのvruntimeの値の粒度 - akachochinの日記
    hiboma
    hiboma 2016/12/23
    > ちなみにx86の場合、arch/x86/kernel/tsc.cにsched_clock()の別実装がある。 > こいつはTSCの値を元にしてナノ秒単位のモノトニックな時間経過の値を返している。
  • ftraceについて調べる(前回からの続き) - akachochinの日記

    ftraceの仕組みを調べるためにググっていたら、http://bit.ly/9cGM9d という論文を発見。 早速読んでみる。 ftraceはgcc の -pgオプションを利用して、関数の入り口でmcount()という関数をコールするようにしている。 (-pgはプロファイラなどのために用意されたオプションで、このオプションでコンパイルされた関数は入り口でmcount()という関数を呼ぶようになるらしい) そして、各CPUアーキテクチャごとに定義されたmcount()の中でスタックを弄り、mcount()呼び出し元の関数が終了した時に戻るべきリターンアドレスを書き換えておく。 これにより、関数終了時に別途測定用の関数がコールされることになる。 早速仕組みを実装で追いかけるべく、mipsアーキテクチャを選んで読んで見た。 98 NESTED(_mcount, PT_SIZE, ra) 99

    ftraceについて調べる(前回からの続き) - akachochinの日記
    hiboma
    hiboma 2014/10/28
    ftrace, -pg, mcount
  • Linuxのhuge zero pageについて - akachochinの日記

    記事のソースは「http://lwn.net/Articles/517465/」。 匿名ページは0クリアされるが、"多くのゼロフィルされたページには書き込まれることはない。それらのページはプロセスのライフサイクル中ずっと0のまま"という事に気づいた人が。 で、やったことは「匿名ページに対するリードアクセスで、ROなゼロフィル共有ページを該当アドレス空間にマップ。で、実際に該当アドレス空間に書き込みがあったときにフォルトが発生し、そこでようやっと物理ページを割り当てる。」という動作。これが、THP(Transparent Huge Page)に対する改良か。 基的にCOWに近い技術ですね。まあ、基は変わらない、という事だと強く感じた次第。

    Linuxのhuge zero pageについて - akachochinの日記
  • 1