changeset 49:71e1425687f3

update tex
author Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
date Fri, 12 Feb 2021 23:49:40 +0900
parents 47a9b8bf069b
children cce74203f5d3
files paper/chapter/system_review.tex paper/chapter/system_usage.tex paper/fig/system.graffle paper/file/benchmark/bar.py paper/file/benchmark/pdf/container2.pdf paper/final_thesis.pdf paper/final_thesis.tex slide/images/container2.png slide/images/syscall.png slide/slide.html slide/slide.md
diffstat 11 files changed, 140 insertions(+), 157 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter/system_review.tex	Fri Feb 12 16:21:54 2021 +0900
+++ b/paper/chapter/system_review.tex	Fri Feb 12 23:49:40 2021 +0900
@@ -16,8 +16,8 @@
 ddは,低レベルのI/Oフロー制御機能を備えており,シーケンシャル書き込み,または読み取りの速度を測定できる.
 データの変換方法にfdatasyncを指定することで,書き込み終了の直前にsyncを1回要求するため,実際の動作に近い動作で測定が可能である.
 \par
-書き込みには下記のコマンドを用いる.
-\begin{lstlisting}[caption=ベンチマークコマンド]
+書き込みにはソースコード\ref{pg:dd}のコマンドを用いる.
+\begin{lstlisting}[caption=ベンチマークコマンド, label=pg:dd]
 $ dd if=/dev/zero of=benchmark bs=64K count=2K conv=fdatasync
 \end{lstlisting}
 また,ファイルサイズは128MB,256MB,512MB,1GB,2GB,4GBの書き込みを行う.
--- a/paper/chapter/system_usage.tex	Fri Feb 12 16:21:54 2021 +0900
+++ b/paper/chapter/system_usage.tex	Fri Feb 12 23:49:40 2021 +0900
@@ -78,24 +78,23 @@
 run時に--gpuオプションを指定することでコンテナ内にGPUを割り当てる.
 また,--ipオプションを指定することで,使用されていないIPアドレスが割り振られる.
 コンテナ名は指定することもできるが,ユーザ名で補完されるため,他ユーザと重複することはない.
-ie-podmanを使用して,新しいコンテナの作成は下記のように行う.
-\begin{lstlisting}[caption=コンテナの作成]
+ie-podmanを使用して,新しいコンテナの作成はソースコード\ref{pg:ie-run}のように行う.
+\begin{lstlisting}[caption=コンテナの作成, label=pg:ie-run]
 $ ie-podman run --ip --gpu --name [CONTAINER_NAME] [IMAGE]
 \end{lstlisting}
 
 新システムにインストールされているPodmanはrootlessでコンテナイメージの作成は低速である.
 これは,開発段階ということが考えられる.
-%新システムのユーザのホームディレクトリはCephFSで提供されているためである.
 ie-podmanはrootのPodmanを利用しSSD上に作成されるため,Podmanと比較し高速である.
 イメージ名はコンテナ名と同じくユーザ名で補完されることで,他ユーザと重複することはない.
-ie-podmanを使用して,新しいイメージの作成は下記のように行う.
-\begin{lstlisting}[caption=イメージのビルド]
+ie-podmanを使用して,新しいイメージの作成はソースコード\ref{pg:ie-build}のように行う.
+\begin{lstlisting}[caption=イメージのビルド, label=pg:ie-build]
 $ ie-podman build --tag [IMAGE_NAME] [CONTEXT]
 \end{lstlisting}
 
-また,作成したコンテナイメージは下記の操作で一覧を表示することができる.
+また,作成したコンテナイメージはソースコード\ref{pg:ie-image}の操作で一覧を表示することができる.
 一覧で表示されるイメージはie-podmanで作成したイメージのみである.
-\begin{lstlisting}[caption=イメージ一覧の出力]
+\begin{lstlisting}[caption=イメージ一覧の出力, label=pg:ie-image]
 $ ie-podman images
 \end{lstlisting}
 
@@ -106,8 +105,8 @@
 だが,イメージのビルド中にエラーが発生すると,一からビルドを再開する必要がある.
 DockerやPodmanはイメージのビルド時にレイヤーごとにキャッシュされるため,Containerfileに追加や編集を行っても前回のキャッシュが使用されることで,高速にビルドが行われる.
 そこで,ie-podmanで作成したイメージをsifファイルへ変換する機能を作成した.
-ie-podmanでイメージを作成し,下記の操作を行うことでsifファイルへ変換が行える.
-\begin{lstlisting}[caption=イメージのsif変換]
+ie-podmanでイメージを作成し,ソースコード\ref{pg:ie-sif}の操作を行うことでsifファイルへ変換が行える.
+\begin{lstlisting}[caption=イメージのsif変換, label=pg:ie-sif]
 $ ie-podman sif [IMAGE_NAME]
 \end{lstlisting}
 
@@ -116,15 +115,15 @@
 ie-podmanからだけでなく,Podmanや手元のPCのDockerからも利用できる.
 レジストリへの登録には,登録するイメージにtagを付けpushする必要がある.
 ie-podmanでは本コースのレジストリを利用しやすくするため,簡単に操作できる機能を作成した.
-ie-podmanでは下記の操作で本コースで利用するレジストリへ登録できる.
-\begin{lstlisting}[caption=レジストリへの登録]
+ie-podmanではソースコード\ref{pg:ie-push}の操作で本コースで利用するレジストリへ登録できる.
+\begin{lstlisting}[caption=レジストリへの登録, label=pg:ie-push]
 $ ie-podman registry push [IMAGE_NAME]
 \end{lstlisting}
 
 また,レジストリに登録されているイメージ一覧を表示することも可能である.
-下記の操作でイメージ一覧を表示を行う.
+ソースコード\ref{pg:ie-search}の操作でイメージ一覧を表示を行う.
 イメージ名を指定することで,イメージのtag一覧の表示も可能である.
-\begin{lstlisting}[caption=レジストリの検索]
+\begin{lstlisting}[caption=レジストリの検索, label=pg:ie-search]
 $ ie-podman registry search
 $ ie-podman registry search [IMAGE_NAME]
 \end{lstlisting}
@@ -135,31 +134,31 @@
 だが,プログラムの実行にはSlurmにJobとして投下する必要がある.
 そのため,イメージを単一ファイルベースとして扱え,ユーザのホームディレクトリがコンテナにマウントされるSingularityを主に利用する.
 %プログラムを実行する環境のみをsifファイルとして構築し,実行するプログラム,データをホームディレクトリで管理することが可能である.
-Singularityのコンテナの実行は,下記の操作で行える.
+Singularityのコンテナの実行は,ソースコード\ref{pg:sing-run}の操作で行える.
 また,実行時に--nvオプションを指定することで,コンテナからGPUを利用することが可能になる.
-\begin{lstlisting}[caption=Singularityの実行]
+\begin{lstlisting}[caption=Singularityの実行, label=pg:sing-run]
 $ singularity run --nv [SIF_NAME]
 \end{lstlisting}
 
 実行にはrun,exec,shellのサブコマンドがあり,runではsifファイルを作成する際に指定が可能なrunscriptが実行される.
 指定されない場合はshellが起動する.また,execではイメージ内にインストールされている任意のコマンドを実行することが可能である.
 これらのサブコマンドを利用し,SlurmにJobを投下する際のbatchファイルを作成する.
-batchファイルはソース\ref{pg:batch}の2$\sim$8行目ように,Jobに必要なリソースを定義する.
+batchファイルはソースコード\ref{pg:batch}の2$\sim$8行目ように,Jobに必要なリソースを定義する.
 リソースの定義後に,実行したい処理を記述する.
 \lstinputlisting[language=Bash, numbers=left, breaklines=true, basicstyle=\ttfamily\footnotesize, frame=single, caption=batchファイル, label=pg:batch]{file/batch.bash}
 
-batchファイルを作成後,下記の操作でJobを投下することが可能である.
-\begin{lstlisting}[caption=Jobの投下]
+batchファイルを作成後,ソースコード\ref{pg:sbatch}の操作でJobを投下することが可能である.
+\begin{lstlisting}[caption=Jobの投下, label=pg:sbatch]
 $ sbatch [BATCH_FILENAME]
 \end{lstlisting}
 
-また,Jobの各種情報は,下記の操作で表示することが可能である.
-\begin{lstlisting}[caption=Job情報の出力]
+また,Jobの各種情報は,ソースコード\ref{pg:squeue}の操作で表示することが可能である.
+\begin{lstlisting}[caption=Job情報の出力, label=pg:squeue]
 $ squeue
 \end{lstlisting}
 
-投下したJobを停止するには,下記の操作で行うことができる.
+投下したJobを停止するには,ソースコード\ref{pg:scansel}の操作で行うことができる.
 SlurmはユーザごとにJobが管理されるため,他ユーザのJobを停止するこはできない.
-\begin{lstlisting}[caption=Jobの停止]
+\begin{lstlisting}[caption=Jobの停止, label=pg:scansel]
 $ scansel [JOB_ID]
 \end{lstlisting}
\ No newline at end of file
Binary file paper/fig/system.graffle has changed
--- a/paper/file/benchmark/bar.py	Fri Feb 12 16:21:54 2021 +0900
+++ b/paper/file/benchmark/bar.py	Fri Feb 12 23:49:40 2021 +0900
@@ -6,7 +6,9 @@
     print("データ読み込み")
     x = [1, 2, 3]
     label = ["Docker", "ie-podman", "Podman"]
-    y = [758.16, 809.34, 4999.47]
+    realtime = [59.52, 54.24, 199.40]
+    usertime = [7.52, 13.22, 23.18]
+    systime  = [7.89, 8.69, 23.78]
 
     name = input("GraphName: ")
     xlabel = input("xlabel: ")
@@ -17,18 +19,22 @@
     yr = yr.split(" ")
     # 画像出力
     print("画像出力")
-    plot_graph(name,x,y,float(xr[0]),float(xr[1]),float(yr[0]),float(yr[1]),xlabel,ylabel,label)
+    plot_graph(name,x,realtime,usertime,systime,float(xr[0]),float(xr[1]),float(yr[0]),float(yr[1]),xlabel,ylabel,label)
     return name
     
-def plot_graph(name,x,y,sx,ex,sy,ey,xlabel,ylabel,label):
+def plot_graph(name,x,realtime,usertime,systime,sx,ex,sy,ey,xlabel,ylabel,label):
     plt.xlim(sx,ex)
     plt.xlabel(str(xlabel))
     plt.ylim(sy,ey)
     plt.ylabel(str(ylabel))
-    plt.bar(x, y, tick_label=label, align="center")
-    #for i in range(len(x)):
-    #    plt.plot(x[i],y[i], label=FILES[i].split("/")[-1])#markersize=0.5)
-    #plt.legend()
+    realx = [1, 2, 3]
+    userx = [1.3,2.3,3.3]
+    sysx = [1.6,2.6,3.6]
+    plt.bar(realx, realtime, label="real", width=0.3, align="center")
+    plt.bar(userx, usertime, label="user", width=0.3, align="center")
+    plt.bar(sysx, systime, label="sys", width=0.3, align="center")
+    plt.legend()
+    plt.xticks([1.25, 2.25, 3.25], label)
     plt.savefig("./pdf/"+str(name)+".pdf")
     plt.delaxes()
 
Binary file paper/file/benchmark/pdf/container2.pdf has changed
Binary file paper/final_thesis.pdf has changed
--- a/paper/final_thesis.tex	Fri Feb 12 16:21:54 2021 +0900
+++ b/paper/final_thesis.tex	Fri Feb 12 23:49:40 2021 +0900
@@ -5,7 +5,7 @@
 \usepackage{mythesis}
 \usepackage{multirow}
 \usepackage{here}
-\usepackage{listings}
+\usepackage{listings,jlisting}
 \usepackage{comment}
 \usepackage{caption}
 \usepackage{url}
@@ -33,13 +33,13 @@
 \def\lstlistlistingname{リスト目次}
 
 \setlength{\itemsep}{-1zh}
-\title{コンテナ技術を用いた教育情報システムの構築}
+\title{コンテナ技術を用いた\\教育情報システムの構築}
 \icon{
 		\includegraphics[width=50mm]{fig/ryukyu.pdf}
 }
 \year{令和2年度 卒業論文}
 \belongto{琉球大学工学部工学科知能情報コース}
-\author{175733E 氏名 {宮平 賢}\\ 指導教員 : {河野 真治} }
+\author{175733E {宮平 賢}\\ 指導教員 : {河野 真治} }
 
 \makeatletter
 \renewcommand{\lstlistlistingname}{ソースコード目次}
Binary file slide/images/container2.png has changed
Binary file slide/images/syscall.png has changed
--- a/slide/slide.html	Fri Feb 12 16:21:54 2021 +0900
+++ b/slide/slide.html	Fri Feb 12 23:49:40 2021 +0900
@@ -69,12 +69,14 @@
 <li>情報通信技術の普及に伴い学ぶことが増えている</li>
 <li>その学習環境として、Virtual MachineやContainerがある
 <ul>
-<li>高性能なPC</li>
-<li>クラウドサービス
-<ul>
-<li>無料だと制限がある</li>
+<li>実行には高性能なPCが必要な場合がある</li>
+<li>クラウドサービスもあるが、無料だと制限がある</li>
 </ul>
 </li>
+<li>学生の学習環境として、コストを支払う必要のない環境を提供したい</li>
+<li>今年度はシステム更新があり、新しくSSDとGPUが搭載される
+<ul>
+<li>リソースを最大限利用できる教育情報システムが必要となる</li>
 </ul>
 </li>
 </ul>
@@ -205,41 +207,17 @@
 }
 " class="slide" data-marpit-pagination="6" data-marpit-pagination-total="32" style="--paginate:true;--class:slide;--theme:default;
 ;">
-<h1>オンプレミス環境</h1>
+<h1>教育情報システムの要件</h1>
 <ul>
-<li>汎用サーバ x 4</li>
-<li>ディスクサーバ x 2</li>
+<li>マルチユーザに対応
+<ul>
+<li>本コースの学生、教員に対応する必要がある</li>
 </ul>
-<table>
-<thead>
-<tr>
-<th style="text-align:center"></th>
-<th style="text-align:center"></th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td style="text-align:center">CPU</td>
-<td style="text-align:center">Intel Xeon Gold 6238 (2.10GHz/22Core)</td>
-</tr>
-<tr>
-<td style="text-align:center">GPU</td>
-<td style="text-align:center">Nvidia Tesla V100S</td>
-</tr>
-<tr>
-<td style="text-align:center">メモリ</td>
-<td style="text-align:center">512GB</td>
-</tr>
-<tr>
-<td style="text-align:center">SAS SSD</td>
-<td style="text-align:center">5TB</td>
-</tr>
-<tr>
-<td style="text-align:center">NVMe SSD</td>
-<td style="text-align:center">1.5TB</td>
-</tr>
-</tbody>
-</table>
+</li>
+<li>学生がサーバのリソースを利用できる環境</li>
+<li>手間が少なく利用できる環境</li>
+<li>信頼性の高いファイルシステム</li>
+</ul>
 </section>
 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="7" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
   background-color: #FFFFFF;
@@ -304,8 +282,7 @@
 ;">
 <h1>コンテナ環境の導入</h1>
 <ul>
-<li>要件としてマルチユーザであり、GPUが利用できるなどがある</li>
-<li>そこで、Podman、Singularityを導入する</li>
+<li>マルチユーザで利用できるPodman、Singularityを導入する</li>
 <li>Podman
 <ul>
 <li>rootlessで利用できる</li>
@@ -350,11 +327,7 @@
 <li>
 <p>Podman</p>
 <ul>
-<li>イメージの作成やコンテナの作成が遅い
-<ul>
-<li>Podmanがまだ開発段階</li>
-</ul>
-</li>
+<li>イメージの作成やコンテナの作成が遅い</li>
 <li>rootlessでは実行できない機能がある
 <ul>
 <li>IPアドレスの割り当て</li>
@@ -1069,8 +1042,13 @@
 <li>イメージのBuild速度を比較する</li>
 </ul>
 </li>
-<li>
-<p>Build速度の比較</p>
+</ul>
+<pre><code class="language-Dockerfile"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-keyword">FROM</span> ubuntu:<span class="hljs-number">20.04</span>
+<span class="hljs-keyword">RUN</span><span class="bash"> apt-get update &amp;&amp; \
+    apt-get upgrade -y</span>
+</span></span></foreignObject></svg></code></pre>
+<ul>
+<li>Build速度の比較
 <ul>
 <li>Docker</li>
 <li>Podman (rootless)</li>
@@ -1079,47 +1057,6 @@
 </li>
 </ul>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="28" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
-  background-color: #FFFFFF;
-  font-size: 28px;
-  color: #4b4b4b;
-  font-family: &quot;Arial&quot;, &quot;Hiragino Maru Gothic ProN&quot;;
-}
-
-section.title {
-  font-size: 40px;
-  padding: 40px;
-}
-section.title h1 {
-  text-align: center;
-}
-
-section.slide h1 {
-  position: absolute;
-  left: 50px; top: 35px;
-}
-" class="slide" data-marpit-pagination="28" data-marpit-pagination-total="32" style="--paginate:true;--class:slide;--theme:default;
-;">
-<h1>ie-podmanの評価 2/3</h1>
-<pre><code class="language-Dockerfile"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-keyword">FROM</span> ubuntu:<span class="hljs-number">18.04</span>
-<span class="hljs-keyword">RUN</span><span class="bash"> apt-get update &amp;&amp; \
-    apt-get upgrade -y &amp;&amp; \
-    DEBIAN_FRONTEND=noninteractive \
-    apt-get install -y \
-	qemu-utils qemu-efi-aarch64 \
-	qemu-system-arm qemu-system-x86 \
-	build-essential uuid-dev \
-	git python iasl wget vim nasm &amp;&amp; \
-    DEBIAN_FRONTEND=noninteractive \
-    apt-get install -y \
-	crossbuild-essential-armhf</span>
-
-<span class="hljs-keyword">WORKDIR</span><span class="bash"> /workdir</span>
-<span class="hljs-keyword">RUN</span><span class="bash"> git <span class="hljs-built_in">clone</span> --recursive https://github.com/tianocore/edk2 &amp;&amp; \
-    wget https://sourceforge.net/projects/gnu-efi/files/gnu-efi-3.0.12.tar.bz2/download &amp;&amp; \
-    tar xf download</span>
-</span></span></foreignObject></svg></code></pre>
-</section>
 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section data-paginate="true" data-class="slide" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
@@ -1139,8 +1076,31 @@
   position: absolute;
   left: 50px; top: 35px;
 }
-" class="slide" data-marpit-pagination="29" data-marpit-pagination-total="32" style="--paginate:true;--class:slide;--theme:default;
-;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;images/container.png&quot;);background-size:70%;"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="29" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
+" class="slide" data-marpit-pagination="28" data-marpit-pagination-total="32" style="--paginate:true;--class:slide;--theme:default;
+;" data-marpit-advanced-background="background"><div data-marpit-advanced-background-container="true" data-marpit-advanced-background-direction="horizontal"><figure style="background-image:url(&quot;images/container2.png&quot;);background-size:70%;"></figure></div></section></foreignObject><foreignObject width="1280" height="720"><section id="28" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
+  background-color: #FFFFFF;
+  font-size: 28px;
+  color: #4b4b4b;
+  font-family: &quot;Arial&quot;, &quot;Hiragino Maru Gothic ProN&quot;;
+}
+
+section.title {
+  font-size: 40px;
+  padding: 40px;
+}
+section.title h1 {
+  text-align: center;
+}
+
+section.slide h1 {
+  position: absolute;
+  left: 50px; top: 35px;
+}
+" class="slide" data-marpit-pagination="28" data-marpit-pagination-total="32" style="--paginate:true;--class:slide;--theme:default;
+;" data-marpit-advanced-background="content">
+<h1>ie-podmanの評価 2/3</h1>
+</section>
+</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section class="slide" style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="28" data-marpit-pagination-total="32"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="29" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
   color: #4b4b4b;
@@ -1160,10 +1120,19 @@
   left: 50px; top: 35px;
 }
 " class="slide" data-marpit-pagination="29" data-marpit-pagination-total="32" style="--paginate:true;--class:slide;--theme:default;
-;" data-marpit-advanced-background="content">
+;">
 <h1>ie-podmanの評価 3/3</h1>
+<ul>
+<li>Rootlessは<code>syscall</code>が複数呼ばれている
+<ul>
+<li>そのため、イメージの作成が遅いのではないか</li>
+</ul>
+</li>
+<li>左がrootless、右がrootfull</li>
+</ul>
+<p><img src="images/syscall.png" alt="height:325" style="height:325px;" /></p>
 </section>
-</foreignObject><foreignObject width="1280" height="720" data-marpit-advanced-background="pseudo"><section class="slide" style="" data-marpit-advanced-background="pseudo" data-marpit-pagination="29" data-marpit-pagination-total="32"></section></foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="30" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="30" data-paginate="true" data-class="slide" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
   color: #4b4b4b;
@@ -1267,7 +1236,19 @@
 </ul>
 </section>
 <script>!function(){"use strict";const t="marpitSVGPolyfill:setZoomFactor,",e=Symbol();let r,o;function n(n){const i="object"==typeof n&&n.target||document,a="object"==typeof n?n.zoom:n;window[e]||(Object.defineProperty(window,e,{configurable:!0,value:!0}),window.addEventListener("message",(({data:e,origin:r})=>{if(r===window.origin)try{if(e&&"string"==typeof e&&e.startsWith(t)){const[,t]=e.split(","),r=Number.parseFloat(t);Number.isNaN(r)||(o=r)}}catch(t){console.error(t)}})));let l=!1;Array.from(i.querySelectorAll("svg[data-marpit-svg]"),(t=>{var e,n,i,s;t.style.transform||(t.style.transform="translateZ(0)");const c=a||o||t.currentScale||1;r!==c&&(r=c,l=c);const d=t.getBoundingClientRect(),{length:u}=t.children;for(let r=0;r<u;r+=1){const o=t.children[r],a=o.getScreenCTM();if(a){const t=null!==(n=null===(e=o.x)||void 0===e?void 0:e.baseVal.value)&&void 0!==n?n:0,r=null!==(s=null===(i=o.y)||void 0===i?void 0:i.baseVal.value)&&void 0!==s?s:0,l=o.firstChild,{style:u}=l;u.transformOrigin||(u.transformOrigin=`${-t}px ${-r}px`),u.transform=`scale(${c}) matrix(${a.a}, ${a.b}, ${a.c}, ${a.d}, ${a.e-d.left}, ${a.f-d.top}) translateZ(0.0001px)`}}})),!1!==l&&Array.from(i.querySelectorAll("iframe"),(({contentWindow:e})=>{null==e||e.postMessage(`${t}${l}`,"null"===window.origin?"*":window.origin)}))}r=1,o=void 0;const i=(t,e,r)=>{if(t.getAttribute(e)!==r)return t.setAttribute(e,r),!0};function a({once:t=!1,target:e=document}={}){const r="Apple Computer, Inc."===navigator.vendor?[n]:[];let o=!t;const a=()=>{for(const t of r)t({target:e});!function(t=document){Array.from(t.querySelectorAll('svg[data-marp-fitting="svg"]'),(t=>{var e;const r=t.firstChild,o=r.firstChild,{scrollWidth:n,scrollHeight:a}=o;let l,s=1;if(t.hasAttribute("data-marp-fitting-code")&&(l=null===(e=t.parentElement)||void 0===e?void 0:e.parentElement),t.hasAttribute("data-marp-fitting-math")&&(l=t.parentElement),l){const t=getComputedStyle(l),e=Math.ceil(l.clientWidth-parseFloat(t.paddingLeft||"0")-parseFloat(t.paddingRight||"0"));e&&(s=e)}const c=Math.max(n,s),d=Math.max(a,1),u=`0 0 ${c} ${d}`;i(r,"width",`${c}`),i(r,"height",`${d}`),i(t,"preserveAspectRatio",getComputedStyle(t).getPropertyValue("--preserve-aspect-ratio")||"xMinYMin meet"),i(t,"viewBox",u)&&t.classList.toggle("__reflow__")}))}(e),o&&window.requestAnimationFrame(a)};return a(),()=>{o=!1}}const l=Symbol(),s=document.currentScript;((t=document)=>{if("undefined"==typeof window)throw new Error("Marp Core's browser script is valid only in browser context.");if(t[l])return t[l];const e=a({target:t}),r=()=>{e(),delete t[l]};Object.defineProperty(t,l,{configurable:!0,value:r})})(s?s.getRootNode():document)}();
-</script></foreignObject></svg></div><script>!function(){"use strict";var e=function(e,t){var n,r=1===(e.parent||e).nodeType?e.parent||e:document.querySelector(e.parent||e),s=[].filter.call("string"==typeof e.slides?r.querySelectorAll(e.slides):e.slides||r.children,(function(e){return"SCRIPT"!==e.nodeName})),a={},i=function(e,t){return(t=t||{}).index=s.indexOf(e),t.slide=e,t},o=function(e,t){a[e]=(a[e]||[]).filter((function(e){return e!==t}))},l=function(e,t){return(a[e]||[]).reduce((function(e,n){return e&&!1!==n(t)}),!0)},c=function(e,t){s[e]&&(n&&l("deactivate",i(n,t)),n=s[e],l("activate",i(n,t)))},d=function(e,t){var r=s.indexOf(n)+e;l(e>0?"next":"prev",i(n,t))&&c(r,t)},u={off:o,on:function(e,t){return(a[e]||(a[e]=[])).push(t),o.bind(null,e,t)},fire:l,slide:function(e,t){if(!arguments.length)return s.indexOf(n);l("slide",i(s[e],t))&&c(e,t)},next:d.bind(null,1),prev:d.bind(null,-1),parent:r,slides:s,destroy:function(e){l("destroy",i(n,e)),a={}}};return(t||[]).forEach((function(e){e(u)})),n||c(0),u};function t(e){e.parent.classList.add("bespoke-marp-parent"),e.slides.forEach((e=>e.classList.add("bespoke-marp-slide"))),e.on("activate",(t=>{const n=t.slide,r=!n.classList.contains("bespoke-marp-active");e.slides.forEach((e=>{e.classList.remove("bespoke-marp-active"),e.setAttribute("aria-hidden","true")})),n.classList.add("bespoke-marp-active"),n.removeAttribute("aria-hidden"),r&&(n.classList.add("bespoke-marp-active-ready"),document.body.clientHeight,n.classList.remove("bespoke-marp-active-ready"))}))}function n(e){let t=0,n=0;Object.defineProperty(e,"fragments",{enumerable:!0,value:e.slides.map((e=>[null,...e.querySelectorAll("[data-marpit-fragment]")]))});const r=r=>void 0!==e.fragments[t][n+r],s=(r,s)=>{t=r,n=s,e.fragments.forEach(((e,t)=>{e.forEach(((e,n)=>{if(null==e)return;const a=t<r||t===r&&n<=s;e.setAttribute("data-bespoke-marp-fragment",a?"active":"inactive"),t===r&&n===s?e.setAttribute("data-bespoke-marp-current-fragment","current"):e.removeAttribute("data-bespoke-marp-current-fragment")}))})),e.fragmentIndex=s;const a={slide:e.slides[r],index:r,fragments:e.fragments[r],fragmentIndex:s};e.fire("fragment",a)};e.on("next",(({fragment:a=!0})=>{if(a){if(r(1))return s(t,n+1),!1;const a=t+1;e.fragments[a]&&s(a,0)}else{const r=e.fragments[t].length;if(n+1<r)return s(t,r-1),!1;const a=e.fragments[t+1];a&&s(t+1,a.length-1)}})),e.on("prev",(({fragment:a=!0})=>{if(r(-1)&&a)return s(t,n-1),!1;const i=t-1;e.fragments[i]&&s(i,e.fragments[i].length-1)})),e.on("slide",(({index:t,fragment:n})=>{let r=0;if(void 0!==n){const s=e.fragments[t];if(s){const{length:e}=s;r=-1===n?e-1:Math.min(Math.max(n,0),e-1)}}s(t,r)})),s(0,0)}
+</script></foreignObject></svg></div><div class="bespoke-marp-note" data-index="5" tabindex="0"><p>---
+# オンプレミス環境
+
+- 汎用サーバ x 4
+- ディスクサーバ x 2
+
+|  |  |
+| :---: | :---: |
+| CPU | Intel Xeon Gold 6238 (2.10GHz/22Core) |
+| GPU |  Nvidia Tesla V100S |
+| メモリ | 512GB |
+| SAS SSD | 5TB |
+| NVMe SSD | 1.5TB |</p></div><script>!function(){"use strict";var e=function(e,t){var n,r=1===(e.parent||e).nodeType?e.parent||e:document.querySelector(e.parent||e),s=[].filter.call("string"==typeof e.slides?r.querySelectorAll(e.slides):e.slides||r.children,(function(e){return"SCRIPT"!==e.nodeName})),a={},i=function(e,t){return(t=t||{}).index=s.indexOf(e),t.slide=e,t},o=function(e,t){a[e]=(a[e]||[]).filter((function(e){return e!==t}))},l=function(e,t){return(a[e]||[]).reduce((function(e,n){return e&&!1!==n(t)}),!0)},c=function(e,t){s[e]&&(n&&l("deactivate",i(n,t)),n=s[e],l("activate",i(n,t)))},d=function(e,t){var r=s.indexOf(n)+e;l(e>0?"next":"prev",i(n,t))&&c(r,t)},u={off:o,on:function(e,t){return(a[e]||(a[e]=[])).push(t),o.bind(null,e,t)},fire:l,slide:function(e,t){if(!arguments.length)return s.indexOf(n);l("slide",i(s[e],t))&&c(e,t)},next:d.bind(null,1),prev:d.bind(null,-1),parent:r,slides:s,destroy:function(e){l("destroy",i(n,e)),a={}}};return(t||[]).forEach((function(e){e(u)})),n||c(0),u};function t(e){e.parent.classList.add("bespoke-marp-parent"),e.slides.forEach((e=>e.classList.add("bespoke-marp-slide"))),e.on("activate",(t=>{const n=t.slide,r=!n.classList.contains("bespoke-marp-active");e.slides.forEach((e=>{e.classList.remove("bespoke-marp-active"),e.setAttribute("aria-hidden","true")})),n.classList.add("bespoke-marp-active"),n.removeAttribute("aria-hidden"),r&&(n.classList.add("bespoke-marp-active-ready"),document.body.clientHeight,n.classList.remove("bespoke-marp-active-ready"))}))}function n(e){let t=0,n=0;Object.defineProperty(e,"fragments",{enumerable:!0,value:e.slides.map((e=>[null,...e.querySelectorAll("[data-marpit-fragment]")]))});const r=r=>void 0!==e.fragments[t][n+r],s=(r,s)=>{t=r,n=s,e.fragments.forEach(((e,t)=>{e.forEach(((e,n)=>{if(null==e)return;const a=t<r||t===r&&n<=s;e.setAttribute("data-bespoke-marp-fragment",a?"active":"inactive"),t===r&&n===s?e.setAttribute("data-bespoke-marp-current-fragment","current"):e.removeAttribute("data-bespoke-marp-current-fragment")}))})),e.fragmentIndex=s;const a={slide:e.slides[r],index:r,fragments:e.fragments[r],fragmentIndex:s};e.fire("fragment",a)};e.on("next",(({fragment:a=!0})=>{if(a){if(r(1))return s(t,n+1),!1;const a=t+1;e.fragments[a]&&s(a,0)}else{const r=e.fragments[t].length;if(n+1<r)return s(t,r-1),!1;const a=e.fragments[t+1];a&&s(t+1,a.length-1)}})),e.on("prev",(({fragment:a=!0})=>{if(r(-1)&&a)return s(t,n-1),!1;const i=t-1;e.fragments[i]&&s(i,e.fragments[i].length-1)})),e.on("slide",(({index:t,fragment:n})=>{let r=0;if(void 0!==n){const s=e.fragments[t];if(s){const{length:e}=s;r=-1===n?e-1:Math.min(Math.max(n,0),e-1)}}s(t,r)})),s(0,0)}
 /*!
 * screenfull
 * v5.0.2 - 2020-02-13
--- a/slide/slide.md	Fri Feb 12 16:21:54 2021 +0900
+++ b/slide/slide.md	Fri Feb 12 23:49:40 2021 +0900
@@ -41,9 +41,11 @@
 
 - 情報通信技術の普及に伴い学ぶことが増えている
 - その学習環境として、Virtual MachineやContainerがある
-    - 高性能なPC
-    - クラウドサービス
-        - 無料だと制限がある
+    - 実行には高性能なPCが必要な場合がある
+    - クラウドサービスもあるが、無料だと制限がある
+- 学生の学習環境として、コストを支払う必要のない環境を提供したい
+- 今年度はシステム更新があり、新しくSSDとGPUが搭載される
+    - リソースを最大限利用できる教育情報システムが必要となる
 
 ---
 <!-- class: slide -->
@@ -79,6 +81,15 @@
 
 ---
 <!-- class: slide -->
+# 教育情報システムの要件
+
+- マルチユーザに対応
+    - 本コースの学生、教員に対応する必要がある
+- 学生がサーバのリソースを利用できる環境
+- 手間が少なく利用できる環境
+- 信頼性の高いファイルシステム
+
+<!-- ---
 # オンプレミス環境
 
 - 汎用サーバ x 4
@@ -91,7 +102,7 @@
 | メモリ | 512GB |
 | SAS SSD | 5TB |
 | NVMe SSD | 1.5TB |
-
+-->
 ---
 # VM貸出サービスの移行
 
@@ -108,8 +119,7 @@
 ---
 # コンテナ環境の導入
 
-- 要件としてマルチユーザであり、GPUが利用できるなどがある
-- そこで、Podman、Singularityを導入する
+- マルチユーザで利用できるPodman、Singularityを導入する
 - Podman
     - rootlessで利用できる
     - nvidia-dockerの設定を行えばGPUを利用できる
@@ -123,7 +133,6 @@
 
 - Podman
     - イメージの作成やコンテナの作成が遅い
-        - Podmanがまだ開発段階
     - rootlessでは実行できない機能がある
         - IPアドレスの割り当て
 - Singularity
@@ -207,11 +216,6 @@
         - POSIX互換のファイルシステム
 
 ---
-# バックアップ戦略
-
-- 
-
----
 # 教育情報システムの構成
 
 - 汎用サーバ全てにKVM、Podman、Singularityをインストール
@@ -312,6 +316,12 @@
 - 実験概要
     - イメージのBuild速度を比較する
 
+```Dockerfile
+FROM ubuntu:20.04
+RUN apt-get update && \
+    apt-get upgrade -y
+```
+
 - Build速度の比較
     - Docker
     - Podman (rootless)
@@ -319,30 +329,17 @@
 
 ---
 # ie-podmanの評価 2/3
-```Dockerfile
-FROM ubuntu:18.04
-RUN apt-get update && \
-    apt-get upgrade -y && \
-    DEBIAN_FRONTEND=noninteractive \
-    apt-get install -y \
-	qemu-utils qemu-efi-aarch64 \
-	qemu-system-arm qemu-system-x86 \
-	build-essential uuid-dev \
-	git python iasl wget vim nasm && \
-    DEBIAN_FRONTEND=noninteractive \
-    apt-get install -y \
-	crossbuild-essential-armhf
 
-WORKDIR /workdir
-RUN git clone --recursive https://github.com/tianocore/edk2 && \
-    wget https://sourceforge.net/projects/gnu-efi/files/gnu-efi-3.0.12.tar.bz2/download && \
-    tar xf download
-```
+![bg 70%](images/container2.png)
 
 ---
 # ie-podmanの評価 3/3
 
-![bg 70%](images/container.png)
+- Rootlessは`syscall`が複数呼ばれている
+    - そのため、イメージの作成が遅いのではないか
+- 左がrootless、右がrootfull
+
+![height:325](images/syscall.png)
 
 ---
 # 学習環境の評価