annotate paper/chapter4.tex @ 50:22740fb4d522

write mmap
author masa
date Fri, 21 Feb 2014 00:26:56 +0900
parents e8dd2f96d046
children 06f75bca7a70
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
9bf2694ed231 add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 \label{chap:poordirection}
9bf2694ed231 add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
47
6cb2ab3726bf chapter3 ok
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
4 \section{map reduce}
6cb2ab3726bf chapter3 ok
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
5
50
22740fb4d522 write mmap
masa
parents: 49
diff changeset
6 \begin{figure}[htbp]
22740fb4d522 write mmap
masa
parents: 49
diff changeset
7 \begin{center}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
8 \includegraphics[width=1.0\textwidth]{fig/mapreduce.pdf}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
9 \end{center}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
10 \caption{map reduce image}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
11 \label{fig:mmap} \end{figure}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
12
47
6cb2ab3726bf chapter3 ok
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
13 \section{mmap での実装の問題点}
50
22740fb4d522 write mmap
masa
parents: 49
diff changeset
14 mmap とは、sys/mman.h に含まれている関数で、ファイルの読み込み等に使用される関数である。
22740fb4d522 write mmap
masa
parents: 49
diff changeset
15 ファイルディスクリプタで指定したファイルを offset から len バイトの範囲を読み込む。
22740fb4d522 write mmap
masa
parents: 49
diff changeset
16 この時にアドレス addr からメモリを確保するようにする。
22740fb4d522 write mmap
masa
parents: 49
diff changeset
17 prot には、PROT\_READによるページの読み込み、PROT\_WRITEによるページへの書き込みなどを指定でき、
22740fb4d522 write mmap
masa
parents: 49
diff changeset
18 flags にはメモリ確保する際のオプションを指定することができる。\ref{table:mmap}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
19
22740fb4d522 write mmap
masa
parents: 49
diff changeset
20 \begin{tiny}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
21 \begin{table}[ht]
22740fb4d522 write mmap
masa
parents: 49
diff changeset
22 \begin{center}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
23 \label{table:mmap}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
24 \small
22740fb4d522 write mmap
masa
parents: 49
diff changeset
25 void * mmap(void *addr, size\_t len, int prot, int flags, int fd, off\_t offset);
0
9bf2694ed231 add some files
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
50
22740fb4d522 write mmap
masa
parents: 49
diff changeset
27 \begin{tabular}[t]{c|l}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
28 \hline
22740fb4d522 write mmap
masa
parents: 49
diff changeset
29 void *addr & メモリに確保するときの先頭のアドレス\\
22740fb4d522 write mmap
masa
parents: 49
diff changeset
30 \hline
22740fb4d522 write mmap
masa
parents: 49
diff changeset
31 size\_t len & メモリを確保するサイズ\\
22740fb4d522 write mmap
masa
parents: 49
diff changeset
32 \hline
22740fb4d522 write mmap
masa
parents: 49
diff changeset
33 int prot & ファイルモード選択\\
22740fb4d522 write mmap
masa
parents: 49
diff changeset
34 \hline
22740fb4d522 write mmap
masa
parents: 49
diff changeset
35 int flags & 確保するときのオプション指定\\
22740fb4d522 write mmap
masa
parents: 49
diff changeset
36 \hline
22740fb4d522 write mmap
masa
parents: 49
diff changeset
37 int fd & 読み込むファイルのファイルディスクリプタ\\
22740fb4d522 write mmap
masa
parents: 49
diff changeset
38 \hline
22740fb4d522 write mmap
masa
parents: 49
diff changeset
39 off\_t offset & ファイル読み込みの先頭からの開始位置 \\
22740fb4d522 write mmap
masa
parents: 49
diff changeset
40 \hline
22740fb4d522 write mmap
masa
parents: 49
diff changeset
41 \end{tabular}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
42 \caption{mmap 関数の概要}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
43 \end{center}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
44 \end{table}
22740fb4d522 write mmap
masa
parents: 49
diff changeset
45 \end{tiny}
37
ce985cabf699 add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
46
50
22740fb4d522 write mmap
masa
parents: 49
diff changeset
47 mmap でファイルを読み込むタイミングは、mmap 関数が呼ばれたときではなく、mmap した領域に対して何らかのアクセスをしたときに初めてファイルが読み込まれる。
22740fb4d522 write mmap
masa
parents: 49
diff changeset
48
22740fb4d522 write mmap
masa
parents: 49
diff changeset
49 図\ref{fig:mmap}では、読み込んだファイルを分割して、それらの領域に何らかの処理を加えるときの図である。これらの処理を Task と呼ぶ。
22740fb4d522 write mmap
masa
parents: 49
diff changeset
50 Task 1 という1個目の Task が実行される。実行されたときに初めてそれらの領域にファイルが読み込まれ、その後何らかの処理が行われ、そして Task 2 も同様に読み込みを行ってから処理が行われる。
22740fb4d522 write mmap
masa
parents: 49
diff changeset
51 これら Task は並列に実行されるべきであるが、ファイル読み込みの I/O 部分がネックとなり、本来並列実行される Task が読み込み待ちを起こしてしまう恐れがある。
22740fb4d522 write mmap
masa
parents: 49
diff changeset
52 その上、読み込み方法が OS 依存となるために環境によって左右されやすく、プログラムの書き手が読み込みに関して制御しにくい。
22740fb4d522 write mmap
masa
parents: 49
diff changeset
53
22740fb4d522 write mmap
masa
parents: 49
diff changeset
54 それらを解決するためには、ファイル読み込みと Task を分離し、ファイルの読み込みも制御しやすくでき、なおかつ高速で動くのではないかと考えた。
49
masa
parents: 47
diff changeset
55
masa
parents: 47
diff changeset
56 \begin{figure}[htbp]
masa
parents: 47
diff changeset
57 \begin{center}
masa
parents: 47
diff changeset
58 \includegraphics[width=1.0\textwidth]{fig/mmap.pdf}
masa
parents: 47
diff changeset
59 \end{center}
masa
parents: 47
diff changeset
60 \caption{mmap のイメージ}
masa
parents: 47
diff changeset
61 \label{fig:mmap} \end{figure}
masa
parents: 47
diff changeset
62
47
6cb2ab3726bf chapter3 ok
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
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
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
77 図\ref{fig:mmap}
37
ce985cabf699 add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
78
42
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
79 \begin{figure}[htbp]
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
80 \begin{center}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
81 \includegraphics[width=1.0\textwidth]{fig/blockedreadimage.pdf}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
82 \end{center}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
83 \caption{[image]blocked read image}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
84 \label{fig:mmap}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
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
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
91 ・ Task は実際には 1個1個生成しているのではなく
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
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
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
95
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
96 図\ref{fig:speany}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
97
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
98 \begin{figure}[htbp]
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
99 \begin{center}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
100 \includegraphics[width=1.0\textwidth]{fig/speany.pdf}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
101 \end{center}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
102 \caption{[image]priority を上げる前の image 図}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
103 \label{fig:speany}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
104 \end{figure}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
105
37
ce985cabf699 add OUTLINE chapter4
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 11
diff changeset
106
47
6cb2ab3726bf chapter3 ok
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 42
diff changeset
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
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
118
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
119 図\ref{fig:io0}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
120
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
121 \begin{figure}[htbp]
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
122 \begin{center}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
123 \includegraphics[width=1.0\textwidth]{fig/io0.pdf}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
124 \end{center}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
125 \caption{[image]priority を上げたときの image 図}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
126 \label{fig:io0}
6bb9cae3f7e4 add images
Masataka Kohagura <e085726@ie.u-ryukyu.ac.jp>
parents: 37
diff changeset
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 部分に割り込みがおこらないよね!!