Mercurial > hg > Papers > 2014 > masakoha-thesis > final
view paper/chapter4.tex @ 37:ce985cabf699
add OUTLINE chapter4
author | Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 14 Feb 2014 23:01:03 +0900 |
parents | 5e67750b1c4f |
children | 6bb9cae3f7e4 |
line wrap: on
line source
\chapter{並列処理向け I/O の設計と実装} \label{chap:poordirection} \section{mmap} ・mmap の仕様 mmap の細かい話をここで書く [image]mmap の読み込むときの図をここに ・ mmap は kernel 部分の実装によるものなので、OS によってかわってしまう。 ・ mmap が呼び出されているときにファイルを読み込むわけではない。仮想メモリに格納されているだけ。 ・ mmap された領域に対してアクセスされたときに初めて実メモリに呼び出される。 ・ OS によってうごきが変わってしまうので、自分自身で制御できない ・ 並列処理でファイル読み込みを行う Task を扱うと、1つ1つの Task が[読み込む → Task が走る] ・ I/O 読み込みはネックになるが、そのネックが Task 1つ1つにふりかかる。 ・ I/O と Task を完全に分けたほうがいいのでは。と考えた。 \section{pread} (これ書かなくてもいい説?) ・ I/O を mmap ではなく、pread 関数で実装した ・ pread の概要 ・ pread で実装すると、自分自身で制御できる。 ・ TaskManager で allocate して、Task として呼び出した pread で allocate 部分に格納している ・ 格納してから Task が走っているので、まだ並列には走っていない(IO後、Task が走るようになっている) ・ [image]その時の状況でも図にする?? ・ その時の実行速度も?? \section{Broked Read の設計と実装} ・ pread で実装したものを、Task と IO が並列に動くようにしないといけない ・ pread は常に走っていているのが理想 ・ [image]そのimage をここに貼る ・ Task は実際には 1個1個生成しているのではなく ・ これで IO と Task が同時にはしるようになった ・ 実験結果?? ・ Cerium の Task に CPU Type を設定することができる。しかし、同じCPU Type を使用すると、IO を担当している CPU に Task が割り振られて、read 全体の速度が遅くなってしまう。 ・ [image] priority を上げる前の image 図 \section{Cerium の改良} ・ Cerium では ptherad で並列処理を記述している ・ SPY\_ANY という CPU Type は、Cerium 側が自動的に CPU 割り当てを行う便利なマクロ ・ SPE\_ANY を使用すると、IO の部分にも割り込まれてしまうので、これをどうにかしたい。 ・ IO\_0 という新しい CPU Type を追加 ・ pthread の API で CPU の priority をあげることができる。 ・ [image] priority を上げたときの image 図 ・ これで IO 部分に割り込みがおこらないよね!!