view prepaper/pre.tex @ 60:424850058f1b

update prepaper
author Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
date Mon, 15 Feb 2021 19:37:52 +0900
parents e2149fb556e4
children
line wrap: on
line source

\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{picins}
\usepackage{fancyhdr}
\usepackage{abstract}
\usepackage{here}
\usepackage{url}
\usepackage{listings,jlisting}
%\pagestyle{fancy}
\lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部工学科知能情報コース 卒業研究発表会} 
\rhead{}
\cfoot{}

\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
\setlength{\headheight}{0mm}
\setlength{\headsep}{5mm}
\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
\setlength{\textwidth}{181mm}
\setlength{\textheight}{261mm}
\setlength{\footskip}{0mm}
\pagestyle{empty}

\renewcommand{\abstractname}{Abstract}
\begin{document}
\title{コンテナ技術を用いた教育情報システムの構築}
\author{175733E {宮平 賢}\\ 指導教員 : {河野 真治} }
\date{}
\twocolumn [
\maketitle

%\begin{abstract}
%琉球大学工学部の教育情報システムの更新が行われ,VMベースのシステムからコンテナベースのシステムへ移行する.
%コンテナエンジンには,マルチユーザに対応するためPodmanとSingularityを採用する.
%コンテナエンジンの不便さを改善するため,ie-podmanを作成する.
%また,リソースの管理としてSlurm,ファイルシステムにはCephを採用する.
%これらの技術を用い教育情報システムの構築し検証を行う.
%旧システムのファイルシステムとの速度比較を行い,改善がみられた.
%また,作成したie-podmanの有用性を示すことができた.
%\end{abstract}

\begin{onecolabstract}

We renew our Educational Information System of the Faculty of Engineering of the University of the Ryukyus. 
The system future container system mainly, which is deiferente VM-based old system. 
Podman and Singularity is used as container engines, but we found building Podman container is vely slow in rootless mode. 
To improve the inconvenience of the container engine, we create ie-podman, witch is a wrapper of rootfull Podman. 
We also use Slurm as a task manager and a resource management and Ceph as file systems. 
As a result the system be comes open and convenient for student and teachers.

\end{onecolabstract}]
\thispagestyle{fancy} 

\section{教育向けの情報システム}
情報通信技術の普及に伴い学生が学ぶ学習環境が必要となる.その学習環境としてVMやコンテナにより,手軽に開発し試せる技術が普及している.
だが,手元のPC上でVMやコンテナを立ち上げ,開発を行うことはできるが,VMやコンテナの使用には高性能PCや有料のクラウドサービスが必要になる場合がある.
これらの負担をIT技術を学ぶ学生に負わせない新たな仕組みが必要である.
\par
本研究では,本コースで提供するVM貸出サービスだけでなく,学科の汎用サーバのリソースを効率的に利用できる教育情報システムを提案する.
教育情報システムには複数の汎用サーバと大容量ストレージサーバが存在する.
複数のサーバを利用するにあたり,分散ストレージが必要となる.
また,学習環境として利用されることから,複数の並列なアクセスに耐えられ,信頼性の高いファイルシステムが必要である.
この用件を満たすストレージソフトウェアとしてCephを採用した.
汎用サーバのリソースを効率的に利用するために,コンテナエンジンであるPodman,Singularity,ジョブスケジューラであるSlurmを採用した.
これらのソフトウェアを合わせ教育情報システムの構築を行った.

\section{Podman}
PodmanはRedHat社が開発,提供するLinux上でOCIコンテナを開発,管理,実行するためのデーモンレスコンテナエンジンである\cite{podman}.
PodmanはOCI準拠のコンテナランタイムに依存するため,前述したDockerなど他のコンテナエンジンと互換性を持つ.
また,Podman CLIはDocker CLIと同じ機能を提供する.
Podmanはコンテナとイメージストレージ,コンテナランタイムを介してLinxuカーネルと直接対話することで,デーモンレスで実行される.
Podmanの制御下にあるコンテナは,特権ユーザ又は非特権ユーザのいずれかによって実行することができる.

\section{Singularity}
Singularity\cite{singularity} とは,HPC環境向けに設計されたコンテナプラットフォームである.
Singularityはマルチユーザに対応しており,コンテナ内での権限は実行ユーザの権限を引き継ぐため,ユーザに特別な権限の設定が必要ない.
またデフォルトで,\$HOME,/tmp,/proc,/sys,/dev がコンテナにマウントされ,サーバ上のGPUを簡単に利用できる.
コンテナイメージはSingularity Image Format(以下,sif)と呼ばれる単一ファイルベースのため,アーカイブや共有が容易である.

\section{Slurm}
Slurm\cite{slurm}はLinuxクラスタ向けのフォールトトレラント設計のジョブスケジューリングシステムである.
Slurmには以下の3つの主要機能を提供する.
\begin{itemize}
  \item 計算を実行するユーザに対してリソースへの排他的,非排他的なアクセスを割り当てる
  \item 割り当てられたノード上のジョブの開始,実行,モニタリングを行う
  \item 待機中のジョブキューを管理することにより,リソースの競合を解決する
\end{itemize}

\section{Ceph}
Cephは,RedHat社が開発,提供する分散ファイルシステムである.
Cephは分散オブジェクトストレージであるRADOS(Reliable Autonomic Distributred Object Storage)がベースとなっている.
RODOSはクラスタに保存されるデータの管理を待ち受け,保存オブジェクトへのアクセス方法としてObject Gateway,RADOS Block Device(以下,RBD),CephFS がある.
Object GatewayはHTTP REST経由でクラスタに保存されるオブジェクトへ直接アクセスが可能である.
RBD はブロックデバイスとしてアクセスが可能で,libvirt を組み合わせてVMのディスクとして使用できる.
また,RBDドライバを搭載したOSにマップし ext4 や XFS などでフォーマットして利用できる.
CephFS は POSIX互換のファイルシステムである.
複数のアクセス方法を提供することで,用途に合わせ柔軟に変更することができる.

\section{教育情報システムの構築}
新システムは,VMベースのシステムからコンテナベースへ移行する.
新システムでもVM貸出サービスを継続するが,新しく搭載されるGPUをVMで利用するためにはPCIパススルーなどの設定が必要となる.
しかし,PCIパススルーでは,VMとGPUが1対1の関係になるため,GPU希望する利用者全てに割り当てることができない.
そのため,コンテナに移行することにでリソースを効率よく利用し,管理を容易にする狙いがある.
また,基幹サービスのデータをSSD上に保存することで,サービスの高速化を図る.
\par
システムは学生や教授などが利用するため,マルチユーザで利用できるコンテナエンジンが必要となる.
そこで,マルチユーザに対応しているPodmanとSingularityを採用する.
Podmanは独自の名前空間でコンテナ内で特権機能を利用できるため,特権が必要なサービスなどの実行に向いている.
また,Singularityはコンテナ内で実行ユーザの権限を引き継ぐため,利用者が作成したプログラムの実行には向いている.
だが,Podmanのrootlessでは実行できない機能があり,SingularityではイメージのBuildがキャッシュされず低速である.
そこで,Podmanをwrapperしたie-podmanを作成した.
\par
新システムはコンテナベースに変更したことにより,利用者は汎用サーバのリソースを利用できる.
そのため,複数の利用者が多くのリソースを要求するプログラムを実行した場合,リソース不足やリソースの競合が考えられる.
そこで,汎用サーバのリソースを効率よく利用できるようにするため,ジョブスケジューラであるSlurmにより管理を行う.
Slurmの利用方針として,最悪待ち時間を減らすのではなく,計算リソースの利用効率を上げることを重視する.
\par
旧システムで使用したファイルシステムのGFS2はロックマネージャの影響が大きく,GFS2上のVMイメージにアクセスできなくなることがあった.
新システムでは汎用サーバにSAS SSDが5TBと旧システムより多く搭載されている.
2台のサーバに演習や研究用で利用する貸出VMのイメージを保存し,残り2台には本コースで利用しているサービスを提供するVMを保存する.
汎用サーバに保存することで,単一障害時の影響を小さくすることができる.
また,Cephは自己修復と自己管理機能を持つため,ユーザのホームディレクトリとして利用する.

\section{教育情報システムの利用}

構築した教育情報システムの管理方法,利用方法について述べる.

\subsection{ie-podmanの利用}
ie-podmanはPodmanをwrappし複数ユーザで利用することができるコンテナ管理ツールである.
Podmanはマルチユーザに対応しているため,ie-podmanを利用せずともコンテナの作成などを行える.
だが,コンテナへのIPアドレスの割り当てには,root権限が必要となるためrootlessでは実行できない.
そこで,ie-podmanではPodmanのすべての機能をwrappするのではなく,rootlessでは実行できない機能を提供する.
\par
新しいコンテナの作成は,Podmanのrunと同じように実行できる.
run時に--gpuオプションを指定することでコンテナ内にGPUを割り当てる.
また,--ipオプションを指定することで,使用されていないIPアドレスが割り振られる.
ie-podmanを使用して,新しいコンテナの作成はソースコード\ref{pg:ie-run}のように行う.
\begin{lstlisting}[caption=コンテナの作成, label=pg:ie-run]
$ ie-podman run --ip --gpu [IMAGE_NAME]
\end{lstlisting}
\par
Singularityからsifファイルの作成はPodmanと違いイメージのBuild時にレイヤーごとにキャッシュされない.
そのため,Build中にエラーが発生すると一からBuildを再開する必要がある.
そこで,ie-podmanで作成したイメージをsifファイルへ変換する機能を作成した.
ie-podmanでイメージを作成し,ソースコード\ref{pg:ie-sif}の操作を行うことでsifファイルへ変換が行える.
\begin{lstlisting}[caption=イメージのsif変換, label=pg:ie-sif]
$ ie-podman sif [IMAGE_NAME]
\end{lstlisting}

\section{教育情報システムの評価}
\subsection{ie-podmanの評価}
RootlessのPodman,Singularityの不便な点を補うため,Podmanのwrapperであるie-podmanを作成した.
ie-podmanにより特権が必要な機能も,利用者に特別な権限を与えることなく利用できるようになる.
また,ie-podmanはrootfullのPodmanをwrapperすることにより,コンテナやイメージがSSD上に保存される.
そのため,rootlessのPodmanより高速化を図ることが可能になる.
\par
そこで,ie-podmanでのイメージのBuild速度の比較を行う.
速度の比較を行うコンテナエンジンは,Docker,ie-podman,rootlessのPodmanである。
図\ref{fig:ie-podman-review}はコンテナエンジンにおけるイメージのBuild速度である.
\begin{figure}[H]
    \begin{center}
        \includegraphics[width=90mm]{fig/container2.pdf}
    \end{center}
    \caption{書込み速度の比較}
    \label{fig:ie-podman-review}
\end{figure}

RootlessのPodmanはコンテナイメージをユーザのホームディレクトリに保存する.
また,rootlessでは重複排除をサポートしていないVFSストレージに制限される.
RootlessのPodmanは独自の名前空間内で特権機能を利用できるようにするため,rootfullと比べ経由する関数が多くなる.
そのため,rootlessではrootfullと比べsyscallが多く呼ばれることにより,他と比べイメージのBuild速度が遅くなっているのではないかと考える.

\subsection{ファイルシステムの評価}
旧システムのVM保存場所として利用していたGFS2,ユーザのホームディレクトリとして利用していたNFSとの速度比較を行う.
ベンチマークにはddコマンドを使用する.
データの変換方法にfdatasyncを指定することで,書き込み終了の直前にsyncを1回要求するため,実際の動作に近い動作で測定が可能である.
図\ref{fig:write}はCephFS,Ceph RBD,GFS2,NFSにおけるファイルサイズに対する書き込み速度である.
\begin{figure}[H]
    \begin{center}
        \includegraphics[width=79mm]{fig/Write.pdf}
    \end{center}
    \caption{書込み速度の比較}
    \label{fig:write}
\end{figure}

旧システムでは,パッケージ等のアップデートがされておらず,Kernelの更新もされていなかった.
KernelはI/Oに関する多くの機能を提供するため,GFS2の書き込みより,Cephが高速になったのではないかと考えられる.
また,新システムでは,サーバのマシンスペックの他にネットワーク機器も更新されたことも要因だと考えられる.

\section{まとめ}
今年度のシステム更新で教育情報システムの構築を行い,VMベースからコンテナベースへの移行ができた.
また,学生が利用できる学習環境としてVM貸出サービスだけでなく,コンテナ環境も利用できるようにしたことにより,学生が自由にサーバのリソースを利用できるようになった.
コンテナ環境として採用したPodman,Singularityの不便な点を補うために作成したie-podmanの評価を行った.
新しく採用したCephと,旧システムのファイルシステムとして利用されたGFS2,NFSとの書き込み速度の比較を行い,速度向上がみられた.

\section{今後の課題}
旧システムのVM貸出サービスは講義等で告知されたりしたが,実際にはあまり周知されておらず利用も少なかった.
これは,システム管理チームからの利用方法について周知等が少なかったことも原因として挙げられる.
本研究で構築した教育情報システムは,VMからコンテナまで利用できる.
だが,利用は主にCLIから操作を行い,プログラムの実行にはSlurmを利用する.
VM貸出サービスの変更や,コンテナ環境の利用方法についてまとめる必要がある.
また,SlurmのJobの投下方法や必要なリソースの要求方法などをまとめ,定期的な周知を行う必要がある.
\par
ie-podmanで使用するネットワーク構成はプレフィックス長が24であるため,最大254個のIPアドレスしか割り当てできない.
そのため,コンテナを削除せず停止のままでは,割り当て可能なIPアドレスが枯渇する.
そこで,ie-podmanが利用するネットワーク構成の変更を行う,もしくはコンテナが停止のまま数日経つ場合にie-podmanから自動削除する必要がある.

\begin{thebibliography}{9}

\bibitem{podman} Podman,https://podman.io/,2021/1/4.
\bibitem{singularity} Singularity,https://sylabs.io/singularity/,2021/1/8.
\bibitem{slurm} Slurm, https://slurm.schedmd.com/overview.html, 2021/1/14.
\bibitem{ceph} Ceph,https://docs.ceph.com/en/latest/,2021/1/12.

\end{thebibliography}

\nocite{*}
\bibliographystyle{junsrt}
\bibliography{reference}
\end{document}