# HG changeset patch # User Ken Miyahira # Date 1613141380 -32400 # Node ID 71e1425687f3293b5a1dd2c995d897b63af28a43 # Parent 47a9b8bf069bd82d3567d7fe95951fe3fac06ad5 update tex diff -r 47a9b8bf069b -r 71e1425687f3 paper/chapter/system_review.tex --- 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の書き込みを行う. diff -r 47a9b8bf069b -r 71e1425687f3 paper/chapter/system_usage.tex --- 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 diff -r 47a9b8bf069b -r 71e1425687f3 paper/fig/system.graffle Binary file paper/fig/system.graffle has changed diff -r 47a9b8bf069b -r 71e1425687f3 paper/file/benchmark/bar.py --- 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() diff -r 47a9b8bf069b -r 71e1425687f3 paper/file/benchmark/pdf/container2.pdf Binary file paper/file/benchmark/pdf/container2.pdf has changed diff -r 47a9b8bf069b -r 71e1425687f3 paper/final_thesis.pdf Binary file paper/final_thesis.pdf has changed diff -r 47a9b8bf069b -r 71e1425687f3 paper/final_thesis.tex --- 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}{ソースコード目次} diff -r 47a9b8bf069b -r 71e1425687f3 slide/images/container2.png Binary file slide/images/container2.png has changed diff -r 47a9b8bf069b -r 71e1425687f3 slide/images/syscall.png Binary file slide/images/syscall.png has changed diff -r 47a9b8bf069b -r 71e1425687f3 slide/slide.html --- 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 @@
  • 情報通信技術の普及に伴い学ぶことが増えている
  • その学習環境として、Virtual MachineやContainerがある @@ -205,41 +207,17 @@ } " class="slide" data-marpit-pagination="6" data-marpit-pagination-total="32" style="--paginate:true;--class:slide;--theme:default; ;"> -

    オンプレミス環境

    +

    教育情報システムの要件

    コンテナ環境の導入

      -
    • 要件としてマルチユーザであり、GPUが利用できるなどがある
    • -
    • そこで、Podman、Singularityを導入する
    • +
    • マルチユーザで利用できるPodman、Singularityを導入する
    • Podman
      • rootlessで利用できる
      • @@ -350,11 +327,7 @@
      • Podman

          -
        • イメージの作成やコンテナの作成が遅い -
            -
          • Podmanがまだ開発段階
          • -
          -
        • +
        • イメージの作成やコンテナの作成が遅い
        • rootlessでは実行できない機能がある
          • IPアドレスの割り当て
          • @@ -1069,8 +1042,13 @@
          • イメージのBuild速度を比較する
        • -
        • -

          Build速度の比較

          +
        +
        FROM ubuntu:20.04
        +RUN apt-get update && \
        +    apt-get upgrade -y
        +
        +
          +
        • Build速度の比較
          • Docker
          • Podman (rootless)
          • @@ -1079,47 +1057,6 @@
    -
    -

    ie-podmanの評価 2/3

    -
    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
    -
    -
    +

    ie-podmanの評価 2/3

    +
    +
    +;">

    ie-podmanの評価 3/3

    +
      +
    • Rootlessはsyscallが複数呼ばれている +
        +
      • そのため、イメージの作成が遅いのではないか
      • +
      +
    • +
    • 左がrootless、右がrootfull
    • +
    +

    height:325

    -
    {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{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)}(); -

    --- +# オンプレミス環境 + +- 汎用サーバ x 4 +- ディスクサーバ x 2 + +| | | +| :---: | :---: | +| CPU | Intel Xeon Gold 6238 (2.10GHz/22Core) | +| GPU | Nvidia Tesla V100S | +| メモリ | 512GB | +| SAS SSD | 5TB | +| NVMe SSD | 1.5TB |