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