Mercurial > hg > Papers > 2014 > masakoha-thesis > final
annotate paper/chapter4.tex @ 50:22740fb4d522
write mmap
author | masa |
---|---|
date | Fri, 21 Feb 2014 00:26:56 +0900 |
parents | e8dd2f96d046 |
children | 06f75bca7a70 |
rev | line source |
---|---|
11
5e67750b1c4f
write chapter label
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
6
diff
changeset
|
1 \chapter{並列処理向け I/O の設計と実装} |
0 | 2 \label{chap:poordirection} |
3 | |
47 | 4 \section{map reduce} |
5 | |
50 | 6 \begin{figure}[htbp] |
7 \begin{center} | |
8 \includegraphics[width=1.0\textwidth]{fig/mapreduce.pdf} | |
9 \end{center} | |
10 \caption{map reduce image} | |
11 \label{fig:mmap} \end{figure} | |
12 | |
47 | 13 \section{mmap での実装の問題点} |
50 | 14 mmap とは、sys/mman.h に含まれている関数で、ファイルの読み込み等に使用される関数である。 |
15 ファイルディスクリプタで指定したファイルを offset から len バイトの範囲を読み込む。 | |
16 この時にアドレス addr からメモリを確保するようにする。 | |
17 prot には、PROT\_READによるページの読み込み、PROT\_WRITEによるページへの書き込みなどを指定でき、 | |
18 flags にはメモリ確保する際のオプションを指定することができる。\ref{table:mmap} | |
19 | |
20 \begin{tiny} | |
21 \begin{table}[ht] | |
22 \begin{center} | |
23 \label{table:mmap} | |
24 \small | |
25 void * mmap(void *addr, size\_t len, int prot, int flags, int fd, off\_t offset); | |
0 | 26 |
50 | 27 \begin{tabular}[t]{c|l} |
28 \hline | |
29 void *addr & メモリに確保するときの先頭のアドレス\\ | |
30 \hline | |
31 size\_t len & メモリを確保するサイズ\\ | |
32 \hline | |
33 int prot & ファイルモード選択\\ | |
34 \hline | |
35 int flags & 確保するときのオプション指定\\ | |
36 \hline | |
37 int fd & 読み込むファイルのファイルディスクリプタ\\ | |
38 \hline | |
39 off\_t offset & ファイル読み込みの先頭からの開始位置 \\ | |
40 \hline | |
41 \end{tabular} | |
42 \caption{mmap 関数の概要} | |
43 \end{center} | |
44 \end{table} | |
45 \end{tiny} | |
37
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
46 |
50 | 47 mmap でファイルを読み込むタイミングは、mmap 関数が呼ばれたときではなく、mmap した領域に対して何らかのアクセスをしたときに初めてファイルが読み込まれる。 |
48 | |
49 図\ref{fig:mmap}では、読み込んだファイルを分割して、それらの領域に何らかの処理を加えるときの図である。これらの処理を Task と呼ぶ。 | |
50 Task 1 という1個目の Task が実行される。実行されたときに初めてそれらの領域にファイルが読み込まれ、その後何らかの処理が行われ、そして Task 2 も同様に読み込みを行ってから処理が行われる。 | |
51 これら Task は並列に実行されるべきであるが、ファイル読み込みの I/O 部分がネックとなり、本来並列実行される Task が読み込み待ちを起こしてしまう恐れがある。 | |
52 その上、読み込み方法が OS 依存となるために環境によって左右されやすく、プログラムの書き手が読み込みに関して制御しにくい。 | |
53 | |
54 それらを解決するためには、ファイル読み込みと Task を分離し、ファイルの読み込みも制御しやすくでき、なおかつ高速で動くのではないかと考えた。 | |
49 | 55 |
56 \begin{figure}[htbp] | |
57 \begin{center} | |
58 \includegraphics[width=1.0\textwidth]{fig/mmap.pdf} | |
59 \end{center} | |
60 \caption{mmap のイメージ} | |
61 \label{fig:mmap} \end{figure} | |
62 | |
47 | 63 \section{Broked Read の設計と実装} |
37
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
64 ・ I/O を mmap ではなく、pread 関数で実装した |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
65 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
66 ・ pread の概要 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
67 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
68 ・ pread で実装すると、自分自身で制御できる。 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
69 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
70 ・ TaskManager で allocate して、Task として呼び出した pread で allocate 部分に格納している |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
71 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
72 ・ pread で実装したものを、Task と IO が並列に動くようにしないといけない |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
73 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
74 ・ pread は常に走っていているのが理想 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
75 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
76 |
42 | 77 図\ref{fig:mmap} |
37
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
78 |
42 | 79 \begin{figure}[htbp] |
80 \begin{center} | |
81 \includegraphics[width=1.0\textwidth]{fig/blockedreadimage.pdf} | |
82 \end{center} | |
83 \caption{[image]blocked read image} | |
84 \label{fig:mmap} | |
85 \end{figure} | |
37
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
86 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
87 ・ これで IO と Task が同時にはしるようになった |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
88 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
89 ・ 実験結果?? |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
90 |
42 | 91 ・ Task は実際には 1個1個生成しているのではなく |
92 | |
37
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
93 ・ Cerium の Task に CPU Type を設定することができる。しかし、同じCPU Type を使用すると、IO を担当している CPU に Task が割り振られて、read 全体の速度が遅くなってしまう。 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
94 |
42 | 95 |
96 図\ref{fig:speany} | |
97 | |
98 \begin{figure}[htbp] | |
99 \begin{center} | |
100 \includegraphics[width=1.0\textwidth]{fig/speany.pdf} | |
101 \end{center} | |
102 \caption{[image]priority を上げる前の image 図} | |
103 \label{fig:speany} | |
104 \end{figure} | |
105 | |
37
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
106 |
47 | 107 \section{I/O 専用 thread の実装} |
37
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
108 ・ Cerium では ptherad で並列処理を記述している |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
109 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
110 ・ SPY\_ANY という CPU Type は、Cerium 側が自動的に CPU 割り当てを行う便利なマクロ |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
111 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
112 ・ SPE\_ANY を使用すると、IO の部分にも割り込まれてしまうので、これをどうにかしたい。 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
113 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
114 ・ IO\_0 という新しい CPU Type を追加 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
115 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
116 ・ pthread の API で CPU の priority をあげることができる。 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
117 |
42 | 118 |
119 図\ref{fig:io0} | |
120 | |
121 \begin{figure}[htbp] | |
122 \begin{center} | |
123 \includegraphics[width=1.0\textwidth]{fig/io0.pdf} | |
124 \end{center} | |
125 \caption{[image]priority を上げたときの image 図} | |
126 \label{fig:io0} | |
127 \end{figure} | |
37
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
128 |
ce985cabf699
add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
11
diff
changeset
|
129 ・ これで IO 部分に割り込みがおこらないよね!! |