Mercurial > hg > Members > yuuhi > slide
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>