리눅스 OS로 제품을 만들어 봤거나 지금 만들고 계신 분들은 어떻게 안정성을 테스트하고 객관적으로 입증할 수 있을까라는 고민을 해봤을 것 같습니다. 특히 서버와 같이 안정성이 중요한 제품이라면 더욱 그러한 테스트 방법이 필요할 것 같은데 이러한 테스트 툴을 제공하기 위해 오래전부터 오픈소스로 개발되어온 프로젝트가 있습니다. 바로 리눅스 테스트 프로젝트 LTP(Linux Test Project)입니다.


https://github.com/linux-test-project/ltp


예전에는 source forge에서 제공하던것을 요즘 트렌드에 맞게 github로 옮겼습니다. 
오늘은 이러한 LTP를 컴파일하고 테스트를 수행하는 방법을 소개합니다.

1. 먼저 빌드에 필요한 툴을 설치합니다. apt-get으로 한번에 설치합니다. 이미 설치하신 분은 패스하셔도 됩니다.
 $ apt-get install autotools-dev automake unzip autoconf

2. 그리고 소스코드를 다운로드 받고 압축을 해제합니다.
$ wget https://github.com/linux-test-project/ltp/archive/master.zip
$ unzup master.zip

3. 압축해제한 디렉토리로 이동해서 빌드를 위한 configure 툴을 수행합니다. 
$ cd ltp-master

$ make autotools
아래 명령어를 실행할 수 있습니다.
$ ./configure
그리고 빌드를 합니다.
$ make

4. 빌드가 끝나면 설치를 합니다.
$ make install

5. 설치 후 설치된 디렉토리로 이동합니다.  
$ cd /opt/ltp
정상적으로 실행되는지 runltp를 실행해 봅니다.
$ ./runltp

이렇게 하면 LTP 설치는 모두 끝났습니다. 지금 부터는 이것을 가지고 어떻게 안정성을 테스트하는지 알아봅니다.
기본적으로 LTP는 아래와 같은 카테고리로 테스트를 순차적으로 진행합니다. 한 사이클 돌면 약 1500개 정도의 테스트가 진행됩니다.

   ㉮ filesystem stress tests (파일시스템 스트레스 테스트)
   ㉯ disk I/O tests (디스크 I/O 테스트)
   ㉰ memory management stress tests (메모리 관리 스트레스 테스트)
   ㉱ ipc stress (IPC 스트레스 테스트)
   ㉲ scheduler tests (스케줄러 테스트)
   ㉳ commands functional varification tests (명령어 함수 확인 테스트)
   ㉴ system call functional varification tests (시스템 호출 함수 확인 테스트)

LTP 테스트는 보통 runltp를 가지고 테스트합니다. 그리고 아래처럼  몇가지 파라미터를 줄 수 있습니다.
-t : 시간을 지정합니다. -t 100h는 100시간을 의미 합니다. -t 3d처럼 일수를 넣을 수 있습니다.
-l : 결과 로그를 저장합니다. 이 결과로그는 테스트 결과를 분석하기 위해 중요한 파일입니다.
-o : 테스트 수행시 출력되는 모든 로그가 저장되는 파일을 지정합니다.
-C : 실패한 테스트 케이스가 출력되는 파일을 지정합니다.
-p : 사람이 보기 좋게 로그를 출력합니다.

./runltp -p -t 100h -l result.log -C result.fail -o result.output
위의 명령어는 100시간 동안 LTP를 수행하고 각각의 로그 파일이름으로 로그를 저장합니다.

테스트가 끝나면 -l옵션으로 지정한 파일의 끝에 최종 테스트 결과가 출력됩니다. 아래처럼..
-----------------------------------------------
Total Tests: 1502
Total Skipped Tests: 184
Total Failures: 71
Kernel Version: 3.12.0+
Machine Architecture: armv7l
Hostname: doc1

그러면 총 1502개의 테스트 중에 71개가 실패했다는 결과를 말해줍니다. 
이런 방식으로 테스트 시간을 늘려서 LTP를 해보면 안정성을 어느정도 객관적으로 측정가능할 것 같습니다.