# HG changeset patch # User Yuhi TOMARI # Date 1416301757 -32400 # Node ID 9683e2b1bbe78184bb0bda8a9ee1b56827d7543c # Parent 75b31f1231591afdafe6ee8c8dc1902a52d04eec sched_setaffinity diff -r 75b31f123159 -r 9683e2b1bbe7 s6/blank.html --- a/s6/blank.html Tue Nov 04 08:30:12 2014 +0900 +++ b/s6/blank.html Tue Nov 18 18:09:17 2014 +0900 @@ -121,141 +121,72 @@
Code Segment:処理の単位(実行単位)
Data Segment:データ構造 -
  • CS/DSベースのフレームワーク(?)の開発
  • -
    もっと大きい何かなのでは……?
    -
    CS/DSを用いた手法でプログラミングを行う言語、CbCを用いてフレームワークの開発を行う
    +
  • CS/DSベースのプログラミングモデルの開発
  • +
    CS/DSを用いた手法でプログラミングを行う言語、Continuation Based Cを用いて開発を行う
  • 独自のMemory Managementの機構を持つ
  • -
  • Cerium、Alice、jungleで得られた知見を……
  • -
  • 名前も考える必要がある?(システム自体と、"CS","DS")
  • +
  • Cerium、Alice、Jungleで得られた知見を……
  • +
  • 名前も考える必要がある?(システム自体の名前と、CS/DSの名前)
  • + +

    ただこれCerium再実装の話なので、使わないかも

    + + +
    +

    進捗

    +
    -

    Code/Data Segment Systemの構造

    -

    全体図。

    - +

    Affinityを設定するAPI(Linux)

    +
    +          int sched_setaffinity(pid_t pid,
    +          size_t cpusetsize, const cpu_set_t *mask);
    +        
    + +
    -

    Temporary/Persistent Space

    - - - - - -
    -
    -
    -

    全てはDSとして扱われる。CSもDSの一種。

    -
    Temporary Space, Persistent Space
    -
  • DSはTemporary SpaceかPersistent Spaceに属する
  • -
  • Temporary Spaceはポインタでアクセス。
  • -
  • Persistent SpaceはURLでアクセス。つまり、名前を持つ。
    - (Persistent Space に書き込む = DBに登録する)
  • -
    -
    -
    -
    Task
    -
  • TaskもDSで、CSとDSの組になっている。
  • -
  • Input DS, Output DS
  • -
  • Input DSが全て揃った時点で実行される。そろったかどうかはTaskが持つ。
  • -
  • DSには持ってるTaskへのポインタが必要(Cerium、Aliceと同じ)
  • -
  • 接続って具体的にどうやる?Ceriumで言うcreateTaskに相当する?
  • +

    sched_setaffinity Sample

    +
    +          void set_cpu(int cpu_id) {
    +              cpu_set_t mask;
    +              CPU_ZERO(&mask);
    +              CPU_SET(cpu_id, &mask);
    +
    +              if (sched_setaffinity(0, sizeof(mask), &mask) == -1) {
    +                  printf("Failed to set CPU affinity. \n");
    +                  return;
    +              }
    +              printf("Succeed to set CPU %d\n",cpu_id);
    +              return;
    +          }
    +

    + どうやって本当に割り当てられてるか調べるか。taskset? sar? +

    +
    -
    -

    Persistent DS

    -

    - Persitent DSはkey(URL)を持つ。keyを持ってるので、書き込みは -

    -            goto write(ds);
    - でよい。DS自体がURLを持っているので、goto write(ds, key);とかしなくて良い。 -

    -

    - ? ds->nextは即座に実行される。ds->nextがなければ、そこで計算は終了。 -

    -

    - 読み込みは、 -

    -          goto read(ds);
    - すれば良いだけだが、ds->nextに次に行う演算が入っている。 -

    -
    - -
    -

    Meta Space

    - - - - - -
    -

    Meta SpeceにはTaskのScheduleを行うScheduler、 - DSの管理を行うDS Manager、Taskの生成を行うTaskManager(Ceriumと同等の機能)、 - Memory Spaceの制御を行うSegment Manager(OSやOpenCLにもある)がある。 - Segment ManagerはMemory間のコピーも行う。 -

    -
    -
    - -
    -

    Memory Manager

    - - - - - - -
    -

    - DataSegmentは2^n allocatorで配分される。それらは

    -
      -
    • Physical Memory
    • -
    • Cache Memory
    • -
    • Parsistent Memory(Disk or Flash)
    • -
    -

    - にMappingされる。 -

    -

    - Persistent Space はDSの非破壊なBlanced Binary Treeにより構成される(jungle) -

    -
    -
    - -
    -

    とりあえず取り掛かれること

    +

    Todo

    -
    - -
    -

    これからやること

    - - - - - - -
    - - -
      -
    • mallocで要求されたsizeを8で割れば自分が使用するindexとなる
    • -
    • Chunkヘッダー(自分のサイズや前のchunkへのポインタ等を持つ構造体)のリスト
    • -
    • CbCである程度の大きさのプログラムってどう書くんだろう…
    • -
    -