# HG changeset patch # User Ken Miyahira # Date 1612854687 -32400 # Node ID 497861888cb6fc756861fc662c12b1dc583a3b05 # Parent 5637b4972373a59e290884ee2142c0b232656668 update diff -r 5637b4972373 -r 497861888cb6 paper/chapter/system_review.tex --- a/paper/chapter/system_review.tex Tue Feb 09 15:45:11 2021 +0900 +++ b/paper/chapter/system_review.tex Tue Feb 09 16:11:27 2021 +0900 @@ -1,30 +1,30 @@ \chapter{教育情報システムの評価} -本章では, 教育情報システムの評価を行う。 -新たに採用したCephとの比較, VM貸出サービス, コンテナ環境の評価を述べる。 +本章では,教育情報システムの評価を行う. +新たに採用したCephとの比較,VM貸出サービス,コンテナ環境の評価を述べる. \section{ファイルシステムの評価} -旧システムのVM保存場所として利用していたGFS2, ユーザのホームディレクトリとして利用していたNFSとの速度比較を行う。 +旧システムのVM保存場所として利用していたGFS2,ユーザのホームディレクトリとして利用していたNFSとの速度比較を行う. \subsection{実験概要} -実験に使用する汎用サーバ環境は, 表\ref{tb:newserver}を使用する。 -また, Cephの構成は図\ref{fig:system}となっている。 +実験に使用する汎用サーバ環境は,表\ref{tb:newserver}を使用する. +また,Cephの構成は図\ref{fig:system}となっている. \par -ベンチマークにはddというファイル変換やコピーを目的としたGNU/Linuxのコアユーティリティを用いる。 -ddは, 低レベルのI/Oフロー制御機能を備えており, シーケンシャル書き込み, または読み取りの速度を測定できる。 -データの変換方法にfdatasyncを指定することで, 書き込み終了の直前にsyncを1回要求するため, 実際の動作に近い動作で測定が可能である。 +ベンチマークにはddというファイル変換やコピーを目的としたGNU/Linuxのコアユーティリティを用いる. +ddは,低レベルのI/Oフロー制御機能を備えており,シーケンシャル書き込み,または読み取りの速度を測定できる. +データの変換方法にfdatasyncを指定することで,書き込み終了の直前にsyncを1回要求するため,実際の動作に近い動作で測定が可能である. \par -書き込みには下記のコマンドを用いる。 +書き込みには下記のコマンドを用いる. \begin{verbatim} $ dd if=/dev/zero of=benchmark bs=64K count=2K conv=fdatasync \end{verbatim} -また, ファイルサイズは128MB, 256MB, 512MB, 1GB, 2GB, 4GBの書き込みを行う。 -5回測定を行い平均を比較する。 +また,ファイルサイズは128MB,256MB,512MB,1GB,2GB,4GBの書き込みを行う. +5回測定を行い平均を比較する. \subsection{ファイルシステムの速度比較} -図\ref{fig:write}はCephFS, Ceph RBD, GFS2, NFSにおけるファイルサイズに対する書き込み速度である。 +図\ref{fig:write}はCephFS,Ceph RBD,GFS2,NFSにおけるファイルサイズに対する書き込み速度である. \begin{figure}[H] \begin{center} @@ -35,35 +35,35 @@ \end{figure} \subsection{考察} -旧システムのホームディレクトリは, iSCSI経由でマウントされたデバイスをNFSから提供していた。 -iSCSIの通信には10Gbpsの回線で接続されているが, NFSの提供はVMで行われており, 1Gbpsで提供されていた。 -そのため, 10Gbpsの回線で接続し, マウントしているCephでは書き込み速度の改善が見られる。 -しかし, GFS2は10Gbpsで接続されたクラスタで構成されているが, Cephより低速である。 -旧システムでは, パッケージ等のアップデートがされておらず, Kernelの更新もされていなかった。 -KernelはI/Oに関する多くの機能を提供するため, GFS2の書き込みより, Cephが高速になったのではないかと考えられる。 +旧システムのホームディレクトリは,iSCSI経由でマウントされたデバイスをNFSから提供していた. +iSCSIの通信には10Gbpsの回線で接続されているが,NFSの提供はVMで行われており,1Gbpsで提供されていた. +そのため,10Gbpsの回線で接続し,マウントしているCephでは書き込み速度の改善が見られる. +しかし,GFS2は10Gbpsで接続されたクラスタで構成されているが,Cephより低速である. +旧システムでは,パッケージ等のアップデートがされておらず,Kernelの更新もされていなかった. +KernelはI/Oに関する多くの機能を提供するため,GFS2の書き込みより,Cephが高速になったのではないかと考えられる. \par -今回の計測では, 読み込み速度の測定を行えなかった。 -これは, 旧システムで読み込み時にバッファキャッシュを削除せずに測定を行ったためである。 -そのため, 純粋な読み込み速度を測定することができなかったことは反省点である。 +今回の計測では,読み込み速度の測定を行えなかった. +これは,旧システムで読み込み時にバッファキャッシュを削除せずに測定を行ったためである. +そのため,純粋な読み込み速度を測定することができなかったことは反省点である. \section{VM貸出サービスの評価} -本コースのVM貸出サービスでは, VMの作成やスペックの変更にはシステム管理チームへの申請が必要であった。 -これは, VMがリソースを過剰に使用できないようシステム管理チームで管理するためである。 -VMの作成やスペックの変更申請が届くと, システム管理チームと利用者の間でやりとりを行い対応していた。 -しかし, システム管理チームの状況によっては迅速に対応できず利用者を待たせることもあった。 -新システムでは, VMの作成やスペックの変更はie-virshにより対応できるようになり, システム管理チームや利用者の手間を減らすことが可能になった。 +本コースのVM貸出サービスでは,VMの作成やスペックの変更にはシステム管理チームへの申請が必要であった. +これは,VMがリソースを過剰に使用できないようシステム管理チームで管理するためである. +VMの作成やスペックの変更申請が届くと,システム管理チームと利用者の間でやりとりを行い対応していた. +しかし,システム管理チームの状況によっては迅速に対応できず利用者を待たせることもあった. +新システムでは,VMの作成やスペックの変更はie-virshから対応できるようになり,システム管理チームや利用者の手間を減らすことが可能になった. \par -また, これまでのVM貸出サービスはテンプレートのVMイメージをCloneしていたため, 新しくVMを作成すると10GBの容量を使用していた。 -そこで, ie-virshでは差分でVMを作成機能が追加され, 新しく作成されるVMは数十MBになることで, 使用するディスク容量を抑えることが可能になった。 +また,これまでのVM貸出サービスはテンプレートのVMイメージをCloneしていたため,新しくVMを作成すると10GBの容量を使用していた. +そこで,ie-virshでは差分でVMを作成機能が追加され,新しく作成されるVMは数十MBになることで,使用するディスク容量を抑えることが可能になった. \section{コンテナ環境の評価} -新しく導入したPodmanは, Dockerと同じCLIを提供するため, Dockerを利用したことがある学生は抵抗なく利用できる。 -また, ie-podmanにより特権が必要な機能も, 利用者に特別な権限を与えることなく利用できるようになる。 -Singularityの導入により, GPUを手軽に利用できるため, 演習や研究等での利用も広がると考えられる。 +新しく導入したPodmanは,Dockerと同じCLIを提供するため,Dockerを利用したことがある学生は抵抗なく利用できる. +また,ie-podmanにより特権が必要な機能も,利用者に特別な権限を与えることなく利用できるようになる. +Singularityの導入により,GPUを手軽に利用できるため,演習や研究等での利用も広がると考えられる. \par -VMでは新しくVMを作成するたびに環境構築が必要であったが, コンテナイメージを作成することで環境構築は一度のみになる。 -また, 学科のレジストリーにイメージを登録することで, 他の利用者に共有も可能となる。 -Singularityでは単一ファイルのsifのコピーを配布することで, 同じ環境でプログラムの実行することができる。 +VMでは新しく作成するたびに環境構築が必要であったが,コンテナイメージを作成することで環境構築は一度のみになる. +また,学科のレジストリーにイメージを登録することで,他の利用者に共有も可能となる. +Singularityでは単一ファイルのsifのコピーを配布することで,同じ環境でプログラムの実行することができる. \par -これまでのVMベースのシステムから, コンテナベースのシステムへの移行により, 汎用バーバのリソースを効率よく利用できる。 -また, 学生も気軽に利用できるようになったのではないかと考えられる。 \ No newline at end of file +これまでのVMベースのシステムから,コンテナベースのシステムへの移行により,汎用バーバのリソースを効率よく利用できる. +また,学生も気軽に利用できるようになったのではないかと考えられる. \ No newline at end of file diff -r 5637b4972373 -r 497861888cb6 paper/chapter/system_usage.tex --- a/paper/chapter/system_usage.tex Tue Feb 09 15:45:11 2021 +0900 +++ b/paper/chapter/system_usage.tex Tue Feb 09 16:11:27 2021 +0900 @@ -1,55 +1,55 @@ \chapter{教育情報システムの管理} -本章では, 構築した教育情報システムの管理方法, 利用方法について述べる。 +本章では,構築した教育情報システムの管理方法,利用方法について述べる. \section{LDAPによる権限管理} -教育情報システムは, 本コースの学生や教師のユーザアカウントをLDAPで管理している。 -また, ユーザの権限も管理される。 -VM貸出サービスやコンテナ環境はLDAPからユーザアカウントの情報を取得することで, 他の利用者のリソースに対して操作を制限する。 +教育情報システムは,本コースの学生や教師のユーザアカウントをLDAPで管理している. +また,ユーザの権限も管理される. +VM貸出サービスやコンテナ環境はLDAPからユーザアカウントの情報を取得することで,他の利用者のリソースに対して操作を制限する. \section{VM貸出サービスの利用} -ie-virshは旧システムより利用されている。 -新システムでも利用を継続し, 新たに機能の追加を行った。 +ie-virshは旧システムより利用されている. +新システムでも利用を継続し,新たに機能の追加を行った. \par -これまでのie-virshではVMを利用するには, 手元のPCで作成したVMイメージをサーバにアップロードを行い, ie-virshでドメインの定義が必要であった。 -そこで, 新たにVMのテンプレートのイメージを用意し, テンプレートから差分でVMを作成できるようにした。 -VMのテンプレートから新たにVMを作成するには下記のように行う。 -また, --gdbオプションを付与することで, GDBによるLinux KernelのDebugを行える。 +これまでのie-virshではVMを利用するには,手元のPCで作成したVMイメージをサーバにアップロードを行い,ie-virshでドメインの定義が必要であった. +そこで,新たにVMのテンプレートのイメージを用意し,テンプレートから差分でVMを作成できるようにした. +VMのテンプレートから新たにVMを作成するには下記のように行う. +また,--gdbオプションを付与することで,GDBによるLinux KernelのDebugを行える. \begin{verbatim} $ ie-virsh define --template Ubuntu-20 [VM_NAME] \end{verbatim} -VMの作成で利用できるテンプレートは下記の操作で確認することができる。 +VMの作成で利用できるテンプレートは下記の操作で確認することができる. \begin{verbatim} $ ie-virsh templates \end{verbatim} -また, 作成したVMのデフォルトのリソースは旧システムから変更はなく, CPU1コア, メモリ1GB, ディスク容量10GBとなっている。 -これまでは, リソースの変更は申請が必要であったが, 下記の操作でVMのリソースを変更が行える。 -しかし, ディスク容量の変更には申請が必要となっている。 +また,作成したVMのデフォルトのリソースは旧システムから変更はなく,CPU1コア,メモリ1GB,ディスク容量10GBとなっている. +これまでは,リソースの変更は申請が必要であったが,下記の操作でVMのリソースを変更が行える. +しかし,ディスク容量の変更には申請が必要となっている. \begin{verbatim} $ ie-virsh edit [VM_NAME] \end{verbatim} -作成したVMにIPアドレスを割り当てるには, IPアドレス管理サービスにMacアドレスを登録する必要がある。 -VMのMacアドレスはie-virshが作成するXMLファイルに定義されており, dumpxmlでXMLを出力し確認できる。 -しかし, XMLを出力すると必要とする情報以外も多く表示されるため, 下記の操作でVMのインターフェース情報を出力できるようになっている。 +作成したVMにIPアドレスを割り当てるには,IPアドレス管理サービスにMACアドレスを登録する必要がある. +VMのMACアドレスはie-virshが作成するXMLファイルに定義されており,dumpxmlでXMLを出力し確認できる. +しかし,XMLを出力すると必要とする情報以外も多く表示されるため,下記の操作でVMのインターフェース情報を出力できるようになっている. \begin{verbatim} $ ie-virsh domiflist [VM_NAME] \end{verbatim} \section{コンテナ環境の利用} -新システムではコンテナエンジンであるPodmanとSingularityを導入した。 -また, PodmanやSingularityを使用する上での不便な点を補うために作成したie-podmanについて説明を行う。 +新システムではコンテナエンジンであるPodmanとSingularityを導入した. +また,PodmanやSingularityを使用する上での不便な点を補うために作成したie-podmanについて説明を行う. \subsection{ie-podman} -%Podmanは主にコンテナで実行するプロセスに特権が必要となる場合に利用する。 -ie-podmanはPodmanをwrappし複数ユーザで利用することができるコンテナ管理ツールである。 -Podmanはマルチユーザに対応しているため, ie-podmanを利用せずともコンテナの作成などを行える。 -だが, コンテナへのIPアドレスの割り当てには, root権限が必要となるためrootlessでは実行できない。 -そのため, Webなどを実行しアクセするにはポートフォワードを設定し, SSHポートフォワードを行う必要がある。 -そこで, ie-podmanではPodmanのすべての機能をwrappするのではなく, rootlessでは実行できない機能を提供する。 -表\ref{tb:ie-podman}はie-podmanで利用できる機能である。 +%Podmanは主にコンテナで実行するプロセスに特権が必要となる場合に利用する. +ie-podmanはPodmanをwrappし複数ユーザで利用することができるコンテナ管理ツールである. +Podmanはマルチユーザに対応しているため,ie-podmanを利用せずともコンテナの作成などを行える. +だが,コンテナへのIPアドレスの割り当てには,root権限が必要となるためrootlessでは実行できない. +そのため,Webなどを実行しアクセスするにはポートフォワードを設定し,SSHポートフォワードを行う必要がある. +そこで,ie-podmanではPodmanのすべての機能をwrappするのではなく,rootlessでは実行できない機能を提供する. +表\ref{tb:ie-podman}はie-podmanで利用できる機能である. \begin{table}[htb] \begin{center} @@ -73,92 +73,93 @@ \end{center} \end{table} -新しいコンテナの作成は, Podmanのrunと同じように実行できる。 -しかし, ie-podman独自のオプションを提供する。 -run時に--gpuオプションを指定することでコンテナ内でGPUを使用できる。 -また, --ipオプションを指定することで, 使用されていないIPアドレスが割り振られる。 -コンテナ名は指定することもきるが, ユーザ名で補完されるため, 他ユーザと重複することはない。 -ie-podmanを使用して, 新しいコンテナの作成は下記のように行う。 +新しいコンテナの作成は,Podmanのrunと同じように実行できる. +しかし,ie-podman独自のオプションを提供する. +run時に--gpuオプションを指定することでコンテナ内にGPUを割り当てる. +また,--ipオプションを指定することで,使用されていないIPアドレスが割り振られる. +コンテナ名は指定することもできるが,ユーザ名で補完されるため,他ユーザと重複することはない. +ie-podmanを使用して,新しいコンテナの作成は下記のように行う. \begin{verbatim} $ ie-podman run --ip --gpu --name [CONTAINER_NAME] [IMAGE] \end{verbatim} -新システムにインストールされているPodmanはrootlessでコンテナイメージの作成は低速である。 -これは, 開発段階ということ, 新システムのユーザのホームディレクトリはCephFSで提供されているためである。 -ie-podmanはrootのPodmanを利用しSSD上に作成されるため, Podmanと比較し高速である。 -イメージ名はコンテナ名と同じくユーザ名で補完されることで, 他ユーザと重複することはない。 -ie-podmanを使用して, 新しいイメージの作成は下記のように行う。 +新システムにインストールされているPodmanはrootlessでコンテナイメージの作成は低速である. +これは,開発段階ということが考えられる. +%新システムのユーザのホームディレクトリはCephFSで提供されているためである. +ie-podmanはrootのPodmanを利用しSSD上に作成されるため,Podmanと比較し高速である. +イメージ名はコンテナ名と同じくユーザ名で補完されることで,他ユーザと重複することはない. +ie-podmanを使用して,新しいイメージの作成は下記のように行う. \begin{verbatim} $ ie-podman build --tag [IMAGE_NAME] [CONTEXT] \end{verbatim} -また, 作成したコンテナイメージは下記の操作で一覧を表示することができる。 -一覧で表示されるイメージはie-podmanで作成したイメージのみである。 +また,作成したコンテナイメージは下記の操作で一覧を表示することができる. +一覧で表示されるイメージはie-podmanで作成したイメージのみである. \begin{verbatim} $ ie-podman images \end{verbatim} -SingularityはDockerで作成したイメージをsifファイルに変換し, Singualrityで利用できる。 -sifファイルへの変換はdockerデーモンへリクエストを行う必要があるが, Podmanはデーモンレスで動作する。 -そのため, Podmanで作成したイメージをSingularityに変換するには一手間掛かる。 -SingularityはDefinitionfileを作成し, ビルドすることで, sifファイルを作成できる。 -だが, イメージのビルド中にエラーが発生すると, 一からビルドを行う必要がある。 -DockerやPodmanはイメージのビルド時にレイヤーごとにキャッシュされるため, Containerfileに追加や編集を行っても前回のキャッシュが使用されることで, 高速にビルドが行われる。 -そこで, ie-podmanで作成したイメージをsifファイルへ変換する機能を作成した。 -ie-podmanでイメージを作成し, 下記の操作を行うことでsifファイルへ変換を行う。 +SingularityはDockerで作成したイメージをsifファイルに変換し,Singualrityで利用できる. +sifファイルへの変換はdockerデーモンへリクエストを行う必要があるが,Podmanはデーモンレスで動作する. +そのため,Podmanで作成したイメージをSingularityに変換するには一手間掛かる. +SingularityはDefinitionfileを作成し,ビルドすることで,sifファイルを作成できる. +だが,イメージのビルド中にエラーが発生すると,一からビルドを再開する必要がある. +DockerやPodmanはイメージのビルド時にレイヤーごとにキャッシュされるため,Containerfileに追加や編集を行っても前回のキャッシュが使用されることで,高速にビルドが行われる. +そこで,ie-podmanで作成したイメージをsifファイルへ変換する機能を作成した. +ie-podmanでイメージを作成し,下記の操作を行うことでsifファイルへ変換が行える. \begin{verbatim} $ ie-podman sif [IMAGE_NAME] \end{verbatim} -新システムではコンテナベースでシステムを構築するため, コンテナレジストリを導入した。 -レジストリの利用は学内ネットワークから可能であり, pushやpullが可能である。 -ie-podmanからだけでなく, Podmanや手元のPCのDockerからも利用できる。 -レジストリへの登録には, 登録するイメージにtagを付けpushする必要がある。 -ie-podmanでは本コースのレジストリを利用しやすくするため, 簡単に操作できる機能を作成した。 -ie-podmanでは下記の操作で本コースで利用するレジストリへ登録できる。 +新システムではコンテナベースでシステムを構築するため,コンテナレジストリを導入した. +レジストリの利用は学内ネットワークから可能であり,pushやpullが可能である. +ie-podmanからだけでなく,Podmanや手元のPCのDockerからも利用できる. +レジストリへの登録には,登録するイメージにtagを付けpushする必要がある. +ie-podmanでは本コースのレジストリを利用しやすくするため,簡単に操作できる機能を作成した. +ie-podmanでは下記の操作で本コースで利用するレジストリへ登録できる. \begin{verbatim} $ ie-podman registry push [IMAGE_NAME] \end{verbatim} -また, レジストリに登録されているイメージ一覧を表示することも可能である。 -下記の操作でイメージ一覧を表示を行う。 -イメージ名を指定することで, イメージのtag一覧の表示も可能である。 +また,レジストリに登録されているイメージ一覧を表示することも可能である. +下記の操作でイメージ一覧を表示を行う. +イメージ名を指定することで,イメージのtag一覧の表示も可能である. \begin{verbatim} $ ie-podman registry search $ ie-podman registry search [IMAGE_NAME] \end{verbatim} \subsection{GPUを利用した演習} -新システムでは, 汎用サーバに搭載されるGPUをコンテナから利用できる。 -コンテナからGPUの利用は, PodmanとSingularityの両方から可能である。 -だが, プログラムの実行にはSlurmにJobとして投下する必要がある。 -そのため, イメージを単一ファイルベースとして扱え, ユーザのホームディレクトリがコンテナにマウントされるSingularityを主に利用する。 -%プログラムを実行する環境のみをsifファイルとして構築し, 実行するプログラム, データをホームディレクトリで管理することが可能である。 -Singularityのコンテナの実行には, 下記の操作で行える。 -また, 実行時に--nvオプションを指定することで, コンテナからGPUを利用することが可能になる。 +新システムでは,汎用サーバに搭載されるGPUをコンテナから利用できる. +コンテナからGPUの利用は,PodmanとSingularityの両方から可能である. +だが,プログラムの実行にはSlurmにJobとして投下する必要がある. +そのため,イメージを単一ファイルベースとして扱え,ユーザのホームディレクトリがコンテナにマウントされるSingularityを主に利用する. +%プログラムを実行する環境のみをsifファイルとして構築し,実行するプログラム,データをホームディレクトリで管理することが可能である. +Singularityのコンテナの実行は,下記の操作で行える. +また,実行時に--nvオプションを指定することで,コンテナからGPUを利用することが可能になる. \begin{verbatim} $ singularity run --nv [SIF_NAME] \end{verbatim} -実行にはrun, exec, shellのサブコマンドがあり, runではsifファイルを作成する際に指定が可能なrunscriptが実行される。 -指定されない場合はshellが起動する。また, execではイメージ内にインストールされている任意のコマンドを実行することが可能である。 -これらのサブコマンドを利用し, SlurmにJobを投下する際のbatchファイルを作成する。 -batchファイルはソース\ref{pg:batch}の2$\sim$8行目ように, Jobに必要なリソースを定義する。 -リソースの定義後に, 実行したい処理を記述する。 +実行にはrun,exec,shellのサブコマンドがあり,runではsifファイルを作成する際に指定が可能なrunscriptが実行される. +指定されない場合はshellが起動する.また,execではイメージ内にインストールされている任意のコマンドを実行することが可能である. +これらのサブコマンドを利用し,SlurmにJobを投下する際のbatchファイルを作成する. +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を投下することが可能である。 +batchファイルを作成後,下記の操作でJobを投下することが可能である. \begin{verbatim} $ sbatch [BATCH_FILENAME] \end{verbatim} -また, Jobの各種情報は, 下記の操作で表示することが可能である。 +また,Jobの各種情報は,下記の操作で表示することが可能である. \begin{verbatim} $ squeue \end{verbatim} -投下したJobを停止するには, 下記の操作で行うことができる。 -SlurmはユーザごとにJobが管理されるため, 他ユーザのJobを停止するこはできない。 +投下したJobを停止するには,下記の操作で行うことができる. +SlurmはユーザごとにJobが管理されるため,他ユーザのJobを停止するこはできない. \begin{verbatim} $ scansel [JOB_ID] \end{verbatim} \ No newline at end of file diff -r 5637b4972373 -r 497861888cb6 paper/final_thesis.pdf Binary file paper/final_thesis.pdf has changed