changeset 15:9683e2b1bbe7

sched_setaffinity
author Yuhi TOMARI <yuhi@cr.ie.u-ryukyu.ac.jp>
date Tue, 18 Nov 2014 18:09:17 +0900
parents 75b31f123159
children 642a7f5a5bad
files s6/blank.html
diffstat 1 files changed, 51 insertions(+), 120 deletions(-) [+]
line wrap: on
line diff
--- 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 @@
             <br>Code Segment:処理の単位(実行単位)
             <br>Data Segment:データ構造</dd>
           
-          <li>CS/DSベースのフレームワーク(?)の開発</li>
-          <dd>もっと大きい何かなのでは……?</dd>
-          <dd>CS/DSを用いた手法でプログラミングを行う言語、CbCを用いてフレームワークの開発を行う</dd>
+          <li>CS/DSベースのプログラミングモデルの開発</li>
+          <dd>CS/DSを用いた手法でプログラミングを行う言語、Continuation Based Cを用いて開発を行う</dd>
           <li>独自のMemory Managementの機構を持つ</li>
-          <li>Cerium、Alice、jungleで得られた知見を……</li>
-          <li>名前も考える必要がある?(システム自体と、"CS","DS")</li>
+          <li>Cerium、Alice、Jungleで得られた知見を……</li>
+          <li>名前も考える必要がある?(システム自体の名前と、CS/DSの名前)</li>
+        </ul>
+        <p>ただこれCerium再実装の話なので、使わないかも</p>
+      </div>
+
+      <div class='slide'>
+        <h2>進捗</h2>
+        <ul>
+          <li><dt>CPU固定でthreadを生成するAPI</dt>
+            <dd>OSXで無理っぽい->(できるのでは->無理っぽい)x2</dd>
+            <dd>とりあえずLinuxで例題の作成</dd>
+          </li>
+          
+          <li>
+            <dt>LinuxでCeriumが動くかどうか</dt>
+          </li>
         </ul>
       </div>
 
       <div class='slide'>
-        <h2>Code/Data Segment Systemの構造</h2>
-        <p>全体図。</p>
-        <img src="images/new_cerium.png" width="800">
+        <h2>Affinityを設定するAPI(Linux)</h2>
+        <pre class="code">
+          int sched_setaffinity(pid_t pid,
+          size_t cpusetsize, const cpu_set_t *mask);
+        </pre>
+        
+        <ul>
+          <li><dt>affinity(親和度、cpu_set_t)は、そのスレッドが実行を許可されているCPUの集合を決定する
+              <dd>maskにCPUをsetするときは、CPU_SETを使用する(例:CPU_SET(cpu_id,&mask)</dd></dt></li>
+          <li><dt>スレッドのaffinityマスクを一つのCPUに設定し、スレッドをCPUに括りつけることができる(Man page)</dt></li>
+        </ul>
       </div>
 
       <div class='slide'>
-        <h2>Temporary/Persistent Space</h2>
-        <table>
-          <tr>
-            <th><img src="images/ts_ps.png" width="400"></th>
-            <th>
-              <dl align="left">
-                <dl align="left">
-                  <p>全てはDSとして扱われる。CSもDSの一種。</p>
-                  <dt>Temporary Space, Persistent Space</dt>
-                  <dd><li>DSはTemporary SpaceかPersistent Spaceに属する</dd>
-                  <dd><li>Temporary Spaceはポインタでアクセス。</li>
-                    <li>Persistent SpaceはURLでアクセス。つまり、名前を持つ。<br>
-                      (Persistent Space に書き込む = DBに登録する)</dd>
-                </dl>
-              </dl>
-            </th>
-          </tr>
-        </table>
-        <dt>Task</dt>
-        <li>TaskもDSで、CSとDSの組になっている。</li>
-        <dd><li>Input DS, Output DS</li></dd>
-        <dd><li>Input DSが全て揃った時点で実行される。そろったかどうかはTaskが持つ。</dd>
-        <dd><li>DSには持ってるTaskへのポインタが必要(Cerium、Aliceと同じ)</dd>
-        <dd><li>接続って具体的にどうやる?Ceriumで言うcreateTaskに相当する?</dd>
+        <h2>sched_setaffinity Sample</h2>
+        <pre class="code">
+          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;
+          }</pre>
+        <p>
+          どうやって本当に割り当てられてるか調べるか。taskset? sar?
+        </p>
+        
       </div>
 
 
-      <div class='slide'>
-        <h2>Persistent DS</h2>
-        <p>
-          Persitent DSはkey(URL)を持つ。keyを持ってるので、書き込みは
-          <pre class="code">
-            goto write(ds);</pre>
-          でよい。DS自体がURLを持っているので、goto write(ds, key);とかしなくて良い。
-        </p>
-        <p>
-          ? ds->nextは即座に実行される。ds->nextがなければ、そこで計算は終了。
-        </p>
-        <p>
-          読み込みは、
-          <pre class="code">
-          goto read(ds);</pre>
-          すれば良いだけだが、ds->nextに次に行う演算が入っている。
-        </p>
-      </div>
-      
-
 
       <div class='slide'>
-        <h2>Meta Space</h2>
-        <table>
-          <tr>
-            <th><img src="images/meta_space.png" width="400"></th>
-            <th align="left">
-              <p>Meta SpeceにはTaskのScheduleを行うScheduler、
-                DSの管理を行うDS Manager、Taskの生成を行うTaskManager(Ceriumと同等の機能)、
-                Memory Spaceの制御を行うSegment Manager(OSやOpenCLにもある)がある。
-                Segment ManagerはMemory間のコピーも行う。
-              </p>
-            </th>
-          </tr>
-        </table>
-      </div>
-
-      <div class='slide'>
-        <h2>Memory Manager</h2>
-        <table>
-          <tr>
-            <th><img src="images/memory_manager.png" width="500"></th>
-            <th align="left">
-              <p>
-                DataSegmentは2^n allocatorで配分される。それらは</p>
-                <ul>
-                  <li>Physical Memory</li>
-                  <li>Cache Memory</li>
-                  <li>Parsistent Memory(Disk or Flash)</li>
-              </ul>
-              <p>
-                にMappingされる。
-              </p>
-              <p>
-                Persistent Space はDSの非破壊なBlanced Binary Treeにより構成される(jungle)
-              </p>
-            </th>
-          </tr>
-
-        </table>
-      </div>
-
-      <div class='slide'>
-        <h2>とりあえず取り掛かれること</h2>
+        <h2>Todo</h2>
         <ul>
-          <li>Segment Manager(Memory Allocator)
-          <li>Data SegmentのNon Destructive Tree
-          <li>TaskManager(Ceriumと同等の機能)
+          <li><dt>sched_setaffinityをCeriumに実装</dt></li>
+          <li><dt>Memory Allocatorの設計と実装</dt></li>
         </ul>
-      </div>      
-
-      <div class='slide'>
-        <h2>これからやること</h2>
-        <ul>
-          <li>CbCの練習がてら、FreeList(memory allocatorの例題)を簡単に書いてみる</li></ul>
-        <table border="0">
-          <tr>
-            <th>
-              <img src="images/free_list_list.png" width="400">
-            </th>
-            <th valign="top" align="left">
-              <ul>
-                <li>mallocで要求されたsizeを8で割れば自分が使用するindexとなる</li>
-                <li>Chunkヘッダー(自分のサイズや前のchunkへのポインタ等を持つ構造体)のリスト</li>
-                <li>CbCである程度の大きさのプログラムってどう書くんだろう…</li>
-            </th>
-          </tr>
-        </table>
-        <ul>
-          <li>
-            CbC-gccのmakeを通す……
-        </li></ul>
       </div>