클라우드 서비스의 성능을 측정하기 위한 벤치마크 툴입니다. 여러개의 대안이 있을 때 어떤 것이 우리쪽에 더 적합한가 측정하기에 아주 훌륭한 도구 입니다.

  YCSB 메인 페이지


설치 방법

   
    $ wget https://github.com/downloads/brianfrankcooper/YCSB/ycsb-0.1.4.tar.gz
    $ tar xfvz ycsb-0.1.4.tar.gz
    $ cd ycsb-0.1.4


컴파일 된 바이너리를 다운 받는 방법 (자바로 추정)

    $ git clone git://github.com/brianfrankcooper/YCSB.git
    $ cd YCSB
    $ mvn clean package


실제로 다운 받아서 컴파일 하는 방법. 그러나 컴파일이 안됩니다. asm 3.1.jar 의 압축이 풀리지 않는다는 이유로 에러가 발생합니다. (여기서 중단.. 안되는 일을 되게 할려는 노력도 중요하지만 굳이 쉽게 되는 일이 있는데 할 필요는 없는 듯..)

설치가 됐으면 실제로 테스트 해보는 시간입니다. 자세한 설명은

 https://github.com/brianfrankcooper/YCSB/wiki/Running-a-Workload

위 주소에서 잘 나와 있습니다. 그러니 생략하고 제가 좋아하는 실전형 따라하기 모드로 가겠습니다. MongoDB 에서 테스트를 한다고 가정합니다.

    - MongoDB 는 Local 에 설치되어 있다고 가정합니다. Port 는 40001 에 띄워져 있습니다.
   

YCSB 는 2가지 형태의 모드가 있습니다. (정확히는 3가지지만 shell 은 당장 안 쓸거라서 설명에서는 제외하겠습니다) 즉 load 와 run 입니다.


    load

데이터를 벤치마크 대상 데이터 저장소에 삽입하는 일입니다.


    run

이미 들어간 데이터를 가지고 벤치마크 테스트를 행하는 일입니다.


그러나 load 는 간단한 건에 대해서는 잘 동작하지만 건수가 억단위로 가면 시간이 기하급수적으로 늘어납니다. 그래서 데이터를 입력하는 것은 수동으로 1-100000000 의 숫자 아이디를 가진 'x' * 1000 바이트 짜리 데이터를 입력하는 모듈을 짜서 데이터를 입력해 두었습니다. (load 가지고 테스트를 하고 싶으면 대략 10만에서 100만 정도 까지 데이터를 입력하는 형태로 운영하시면 좋습니다)

ycsb-0.1.4 디렉토리에 있다고 가정하면 결론부터 이야기 하기로 하겠습니다.

 
   $ ./bin/ycsb run mongodb -P workloads/workloada -P mongo.ini -s > result.log


지금은 이대로 따라서 하면 에러가 발생할 것입니다. (그러나 어떤 원리인지 모르지만 파라미터가 틀려도 기본적으로 동작합니다.)


ycsb 는 실행 명령입니다.

run 은 transaction mode 로 실행하라는 소리입니다.

mongodb 는 내가 테스트 하고 싶은 DB Layer 가 MongoDB 라는 소리입니다.

-P workloads/workloada 는 Property 로 workloads 디렉토리 밑에 있는 workloada 를 선택해 주라는 이야깁니다. Property 는 지정 파일을 열어보시면 ycsb 를 실행할때 필요한 설정들이 들어 있는 것을 확인하실 수 있습니다. -P 는 파일을 지정할 수 있고, -p 는 개별 설정들을 지정할 수 있습니다.

-P mongo.ini 는 내가 지정해 줄 수 있는 설정들을 포함하고 있습니다. -P 인것을 보니 파일을 지정하는 것이겠지요? workloada 와 mongo.ini 에 같은 항목에 대한 언급이 있다면 마지막에 명시된 설정값을 따릅니다. 즉 위 예제에 따르면 mongo.ini 에 있는 것을 따르게 되어 있습니다.

-s 는 10초마다 진행사항을 보여주라는 의미입니다.


그리고 mongo.ini 의 내용입니다.


    mongodb.url=mongodb://localhost:40001
    mongodb.database=mydb
    mongodb.writeConcern=normal
    table=robots
    operationcount=10000


내용중에 관심 있게 볼 것은
   

url 은 mongodb 가 떠 있는 주소와 포트입니다.
database 는 테스트할 대상이 있는 db 의 이름입니다.
table 은 테스트할 대상이 있는 collection 의 이름입니다.
operationcount 는 내가 run 을 실행할때 몇번의 수행작업을 할 것인지 정해주는  것입니다. (load 시에는 recordcount 입니다)

어려운듯 보입니다만 (실은 어려웠습니다.. ) 막상 실행을 해보니 어렵지는 않더군요.

+ Recent posts