Skip to content

ertlnagoya/LowLevelRuntime_EvaluationTool_ForContainer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LowLevelRuntime_Evaluation_Tool_For_Container

コンテナ作成時に使用する低レベルランタイムの評価ツールです。
自動でベンチマークの実行、グラフとログの生成を行います。
グラフとログは実行した項目のディレクトリ下に生成されます。

Features

合計13種類のベンチマークを用意しました。

コンテナ内部の処理性能

  • cpu
  • memory
  • file_rnd_read
  • file_seq_read
  • file_rnd_write
  • file_seq_write
  • syscall
  • network

コンテナがホストで使用するリソース

  • lifecycle
  • resource_cpu
  • resource_memory
  • resource_storage

低レベルランタイムのセキュリティ(開発途中)

  • _cve
  • syscall_collect
  • AbstractResource_AttackProgram

Requirement

以下の全てのコマンドが使用できることを確認して下さい。
package_install.shを実行することで以下のコマンドを使用できるようになります。
ただし、journalctlと低レベルランタイムに関しては以下の記述を読んで、各自で設定を行ってください。

docker

リンク先を参考にDockerをインストールして下さい。
インストール後に、sudo権限なしでdockerコマンドを実行できるように変更して下さい。

$ sudo groupadd docker
$ sudo usermod -aG docker ユーザ名
$ sudo reboot

sysstat

$ sudo apt install -y sysstat

free

$ sudo apt install -y procps

iperf3

$ sudo apt install -y iperf3

sysdig

$ sudo apt install -y sysdig
$ echo ""$(whoami)" ALL=NOPASSWD:/usr/bin/sysdig,/usr/bin/pkill" | sudo EDITOR='tee -a' visudo

python3 (+pip3,numpy,matplotlib,selenium)

$ sudo apt install -y python3
$ sudo apt install -y python3-pip
$ pip3 install numpy
$ pip3 install matplotlib
$ pip3 install selenium

geckodriver

$ curl -OL https://github.com/mozilla/geckodriver/releases/download/v0.31.0/geckodriver-v0.31.0-linux64.tar.gz
$ tar -zxvf geckodriver-v0.31.0-linux64.tar.gz
$ sudo cp geckodriver /usr/local/bin/geckodriver

journalctl

resource_storageではsystem.journalのサイズが結果に影響を及ぼしかねません。
そのため、/etc/systemd/journald.confを変更し、journaldでログを収集しないように変更します。
ベンチマークが終了したら、元の設定に戻しても構いません。
ログのサイズも含めて評価する場合、設定の変更を行わず、低レベルランタイム毎にシステムを再起動してログをもとに戻して下さい。

$ sudo vi /etc/systemd/journald.conf

/etc/systemd/journald.confの一部を以下のように変更します。

[Journal]
Storage=none

変更後は、以下のコマンドで設定ファイルの内容を反映させて下さい。

$ sudo systemctl daemon-reload 
$ sudo systemctl restart systemd-journald.service

Installation

LowLevelRuntime_Evaluation_Tool_For_Container

githubからこのリポジトリをクローンして下さい。

$ git clone https://github.com/ertlnagoya/LowLevelRuntime_Evaluation_Tool_For_Container/

低レベルランタイム

必要に応じて、評価したい低レベルランタイムをインストールして下さい。
インストール後、/etc/docker/daemon.jsonに低ベレルランタイムのリンク先を記入して下さい。
ただし、runcは/etc/docker/daemon.jsonに記入せずとも、dockerをインストールした時点で使用できます。

以下に、crunをインストールする例を載せますので参考にして下さい。

#crunに必要な依存ツールをインストールします。
$ sudo apt-get install -y make git gcc build-essential pkgconf libtool \
    libsystemd-dev libprotobuf-c-dev libcap-dev libseccomp-dev libyajl-dev \
    go-md2man libtool autoconf python3 automake
$ git clone https://github.com/containers/crun

#crunをインストールします。
$ cd crunのディレクトリ
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

#dockerでcrunを使用できるように、/etc/docker/daemon.jsonへ書き込みを行います。
$ sudo vi /etc/docker/daemon.json

/etc/docker/daemon.jsonの中身を以下のように変更します。

{
    "runtimes": {
        "crun": {
            "path": "/usr/local/bin/crun"
        },
    },
}

Usage

コンテナ内部の処理性能を計測する場合(例:cpu)

cpuディレクトリのcpu.shに、評価対象とする低レベルランタイム(以下の例はcrun、runsc)を記入します。

declare -a low_level_runtime=("crun" "runsc")

引数としてcpu項目を指定し、start_bench.shを実行します。

$ source start_bench.sh cpu

コンテナがホストで使用するリソースを計測する場合(例:syscall_collect)

syscall_collectディレクトリのsyscall_collect.shに、評価対象とする低レベルランタイム(以下の例はcrun、runsc)を記入します。

declare -a low_level_runtime=("crun" "runsc")

引数としてsyscall_collect項目とコンテナイメージ(+コマンド)を指定し、start_bench.shを実行します。

$ source start_bench.sh syscall_collect "paipoi/sysbench_"$(uname -p)" sysbench --test=cpu --cpu-max-prime=20000 --num-threads=1 run"

抽象リソース攻撃を実行する場合(例:AbstractResource_AttackProgram)

抽象リソース毎にディレクトリが用意されているため、各ディレクトリの中の攻撃プログラムをコンテナの中で実行します。

Note

  • x86_64のUbuntu18.04とUbuntu20.04、aarch64のUbuntu20.04において、crunとrunscを指定した際の動作を確認しました。
  • dockerfileディレクトリは使用したコンテナイメージのDockerfileをまとめています。
  • tmpディレクトリはツールの作成時に実験的に作成したファイルをまとめています。

Licence

  • このツール本体(LowLevelRuntime_Evaluation_Tool_For_Container)はMITライセンスで公開されています。
  • このツールで使用されているライブラリ・ソフト等のライセンスについては以下の通りです。
ソフトウェア・ライブラリ名 ライセンス
docker engine Apache License Version 2.0
sysstat GNU General Public License v2.0
sysdig Apache License Version2.0
sysbench(コンテナイメージ内部で使用) GNU General Public License v2.0
unixbench(コンテナイメージ内部で使用) GNU General Public License v2.0
iper3(コンテナイメージ内部で使用) BSD License
numpy BSD License(pip-licensesにて確認)
matplotlib BSD License(pip-licensesにて確認)
selenium Apache Software License(pip-licensesにて確認)
geckodriver Mozilla Public License

Author

名前(Name)

西村 惇(Nishimura Atsushi)

所属

名古屋大学大学院 情報学研究科 高田研究室 

E-mail

atsushi_n@ertl.jp

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published