Skip to content

Latest commit

 

History

History
168 lines (116 loc) · 6.99 KB

README-KOR.md

File metadata and controls

168 lines (116 loc) · 6.99 KB

소개

Container Tracer는 컨테이너 별 I/O 성능을 측정하는 도구로 기존의 fio나 filebench의 부족한 cgroup 별 I/O 성능 측정 기능을 보완하는 프로그램입니다.

Container Tracer는 장치의 컨테이너 별 I/O 성능을 측정하기 위해서 trace-replay를 사용합니다.

Execution Sample

권장 시스템 조건

이 프로그램은 POSIX 표준을 따르는 시스템에서는 다 동작하게 개발되었습니다.

그러나 이 문서 및 테스트는 이하 표에서 제공하는 시스템에서 수행을 했습니다.

그러므로 반드시 빌드 또는 프로그램을 수행할 때에는 이 정보에 주의해야 합니다.

항목 내용
운영 체제 Ubuntu 18.04
커널 linux 4.19

프로젝트의 구성

프로젝트의 구성은 아래와 같습니다.

  • trace-replay: trace-replay의 코드로 기존의 비정형 데이터가 아닌 정형 데이터로 출력하게 변경되어 있습니다.
  • runner: container를 생성한 후에 정형 데이터를 출력하는 trace-replay를 각각의 container에 동작시키는 프로그램입니다.
  • web: 파이썬의 Flask로 개발되어 있으며, runner에서 받은 데이터를 웹으로 실시간 출력을 하는 역할을 합니다.
  • setting: Scons 빌드의 전역 환경 설정이 들어있는 폴더입니다.
  • include: C로 작성된 소스 코드의 헤더가 들어가는 위치입니다. 모든 헤더는 해당 위치에 있어야 합니다.

각 폴더의 하위 항목으로 있는 test에는 단위 테스트 파일이 들어가게 됩니다.

구현 내용

링크를 확인해주시길 바랍니다.

빌드 방법

공통적으로는 아래를 수행해주셔야 합니다.

sudo pip3 install black flake8
sudo apt install doxygen

web의 경우

Flask를 사용하기 때문에 반드시 아래를 수행해주셔야 합니다.

sudo pip3 install flask flask_restful flask_socketio pynput

그리고 프로젝트 루트 디렉터리에서 아래의 명령을 통해서 이 프로그램을 실행할 수 있습니다.

sudo python web/run.py

자세한 내용은 링크 를 확인해주시길 바랍니다.

trace-replay나 runner의 경우

소스 코드를 다운 받은 후에 빌드에 필요한 프로그램을 설치하도록 합니다.

Debian

sudo pip3 install scons scons-compiledb
sudo pip3 install clang-format
sudo apt install cppcheck libaio-dev libjson-c-dev libjemalloc-dev

Redhat

sudo yum install cppcheck libaio-devel json-c-devel jemalloc-devel

추가로 본 프로젝트는 clang을 기반으로 하기 때문에 clang도 설치해주셔야 합니다. 만약에 [1]을 수행한 후에 clang --version 했을 때, 문제가 발생하지 않으면 [2] 과정은 무시해도 됩니다.

Debian

sudo apt install llvm-6.0 clang-6.0 libclang-6.0-dev # [1]
sudo ln -s /usr/bin/clang-6.0 /usr/bin/clang # [2]

Redhat

sudo yum install llvm6.0 clang7.0-devel clang7.0-libs

그리고 아래의 명령을 통해서 빌드 및 테스트를 수행합니다. 결과물은 ./build/debug에 저장됩니다.

sudo scons -c
sudo scons test DEBUG=True TARGET_DEVICE=<당신의 장치>

배포판을 만드는 경우에는 아래와 같은 방법으로 진행해주시길 바랍니다. 결과물은 ./build/release에 저장됩니다.

sudo scons -c
scons

그리고 빌드된 내용을 설치하기 위해서 release 모드의 경우에는 아래와 같이 진행하면 설치를 할 수 있습니다. 만약에 디버깅 모드로 설치하고 싶으신 경우에는 sudo scons DEBUG=True install로 해주시면 됩니다.

sudo scons install
sudo ldconfig

레드헷 환경에서는 반드시 아래 2가지를 유념하셔야 합니다.

첫번째, /etc/ld.so.conf 파일에 /usr/local/lib 줄이 있는지 확인해야 합니다. 만약 해당 줄이 없는 경우에는 해당 라인을 추가해줘야 합니다.

두번째, 만약 jemalloc과 관계된 에러가 확인되면 jemalloc 라이브러리를 링크에 따라서 설치해야 합니다.

추가적으로 드라이버 제작 방법 관련해서는 링크를 확인해주시길 바랍니다.

참고 사항

  • DEBUG=True를 주게되면 모든 로그가 다 출력되어 좀 더 수월하게 디버깅이 가능해집니다.
  • sudo를 주는 이유는 trace-replay가 실행되기 위해서는 sudo 권한을 필요로 하기 때문입니다.
  • sudo scons test를 하면 compile_commands.json이 생성되지 않으므로 생성을 원하는 경우 scons를 수행해주시길 바랍니다.

유의 사항

  1. trace replay는 Direct-IO를 수행하므로 동작 과정에서 사용자 디스크의 파일 시스템을 붕괴 시킵니다. 따라서, 파일 시스템이 구축되지 않은 디스크 및 백업이 간편한 가상 환경에서 수행해주시길 바랍니다
  2. Runner의 init에 JSON을 보낼 때에는 반드시 {"driver": "<DRIVER-NAME>", "setting": {...}}과 같은 형식으로 보내야 합니다. "setting"에는 드라이버에 종속적인 내용이 들어갑니다.

사용 라이브러리

  1. pthread: trace-replay 동작용 POSIX 라이브러리
  2. AIO: asynchronous I/O 라이브러리
  3. rt: Real-Time 라이브러리
  4. json-c: C용 json 라이브러리
  5. unity: C용 unit test 라이브러리
  6. jemalloc: 효율적인 메모리 동적 할당을 해주는 라이브러리

코드 기여 규칙

기여 규칙은 관련 링크를 확인해주시길 바랍니다.