FTL Simulator

Retired DISLab
Swpark (토론 | 기여) 사용자의 2013년 12월 17일 (화) 18:11 버전
(비교) ← 이전 판 | 현재 판 (비교) | 다음 판 → (비교)
이동: 둘러보기, 찾기

목차

sim

이 프로그램은 FAST, BAST, Mitsubishi, FMax의 경우 실제 동작하는 것을 모두 코딩한 것이 아니다. 단지 플래시 메모리의 Read, Write, Erase 횟수만 정확하게 측정할 수 있도록 하는 것을 목적으로 하기 때문에 알고리즘에 따라 연산 횟수를 측정하는데 불필요하다고 판단되는 지점의 코드는 단순히 I/O 횟수만 측정하였다. Superblock은 김진수 교수님의 도움으로 KAIST의 김영식 학생의 코드를 받았고 이를 추가하였다. Superblock은 C로 작성되어 있기 때문에 C++로 작성된 sim에 넣기 위하여 CSuperblock 클래스는 C 함수를 호출하는 것으로 구성되어 있다.

Options

sim -|(-file_name file_name)
	-no_flash_block integer_number
	[-cost_r (cost)] (read cost.  default:10)
	[-cost_w (cost)] (write cost. default:100)
	[-cost_e (cost)] (erase cost. default:1000)
	[-dirty] (all pages are dirty)
	[-flash_type (SMALL|LARGE)] (default:LARGE)
	[-algo (LOG|MITS|FMAX|FAST|SUPER)] (default:LOG)
	[-iter (1..n)] (default:1)
	   -- OPTIONS FOR LOG/FAST FTL --
	[-no_log_blocks (3..n)] (default:3)
	   -- OPTIONS FOR Superblock FTL --
	[-extra_block (0..n)] (default:0)
	[-align (2,4,8)] (default:2)
	   -- OPTIONS FOR AGING --
	[-aging (0..n)] (default:0 percent to get the no. of operations)
	[-aging_display (number)]
	[-aging_write_ratio (percent)] (default:100)
	[-aging_random_ratio (percent)] (default:100)
	[-no_row_datafile (number)] (default:1)
	   -- FOR STATISTICS --
        [-silent (OFF|ON|INTER)] (default:OFF display final results only/)
        [-no_disp_intermittent (1..n)] (default:1000 no. of operations)
	[-disp_stat_only] - display statistics only
        [-no_row_datafile (number)] - column for each row while displaying stat only mode

공통 옵션

  • -file_name : 로그 파일 (형식은 R 100 2 와 같이 I/O, 시작 섹터 번호, 섹터 길이로 구성)
  • -cost_r : Cr 플래시 메모리 한 페이지를 읽는데 드는 비용
  • -cost_w : Cw 플래시 메모리 한 페이지를 쓰는데 드는 비용
  • -cost_e : Ce 플래시 메모리 한 블록을 소거하는데 드는 비용
  • -no_flash_block : 물리적인 플래시 메모리의 블럭 개수
  • -dirty : 시작할때 모든 페이지들을 랜덤하게 기록하여 완전한 Aging을 한다.
  • -flash_type : 플래시 메모리 타입 (SMALL 혹은 LARGE)
  • -algo : 알고리즘 선택 (LOG|MITS|FMAX|FAST|SUPER 중 하나. 대소문자 구분 없음)
  • -iter : 로그 데이터를 반복 적용한다.

Log, FAST 옵션

  • -no_log_blocks : FAST나 LOG 기법에서 사용한다. Log block을 개수를 지정한다.

Superblock 옵션

  • -extra_block : Superblock 알고리즘에서 extra block의 개수를 지정한다.
  • -align : Superblock 알고리즘에서 align을 지정한다. 이것에 따라 성능이 달라진다고 한다.

Aging 관련 옵션

  • -aging : 숫자는 %를 적는다. 예를 들어 100이라고 적으면 총 페이지 개수만큼 랜덤한 위치에 Read/Write를 수행한다. 이것은 플래시 메모리를 aging 시키는 함수이다. 이렇게 aging을 한 다음 실험을 해야 정확한 값을 얻을 수 있다. 이 옵션은 -display_aging 옵션과 같이 사용하면 aging에 따른 alpha, beta 값의 변화를 확인할 수 있다.
  • -display_aging : 1000을 입력하면 aging을 할 때 1000번의 I/O 후 그때까지의 alpha, beta 값을 출력한다. 구간별 값이기 때문에 누적한 값을 계산하는 것은 아니다.
  • -aging_write_ratio (percent) : Aging 할 때 write 연산의 비율을 적는다. (default:50)
  • -aging_random_ratio (percent) : Aging 할 때 random write가 발생할 확률을 적는다. Random write일 경우는 읽어야 하는 연속된 섹터의 개수를 4개 이하로 하고, sequential write일 경우 10~50개 사이로 한다. (default:100)

실험결과 출력 관련 옵션

  • -silent (OFF|ON|INTER)
    • ON : 최종 결과를 출력할 경우
    • OFF : 모든 결과만 출력할 경우
    • INTER : 최종 결과만을 출력하지만, -iter 옵션을 이용하여 여러번 반복하여 실험을 할 경우, 각 반복때마다의 결과는 출력한다.
  • -no_disp_intermittent (1..n) : n 개의 I/O 연산을 수행한 다음, 중간 결과를 출력한다.
  • -disp_stat_only : 출력할 때 결과를 CSV 포맷으로 출력하여 Excel에서 계산하기 쉽도록 한다.
  • -no_row_datafile : CSV 파일로 출력할 때 한 줄에 표현할 데이터의 갯수

Results

  1,  4000,  1900, 16108,16108,444,  2100, 2100,     0,  0, 11.662526, 1.000000, 2.236880, 0.211000, 40.000000

noIter, io, dw, wr, ww, we, dr, rr, rw, re, GetAlpha(), GetBeta(), CalcExecTime(), diskFlashTime, diskTime

사용예

파일들에 대하여 각 FTL 알고리즘으로 통계를 내서 CSV 파일 생성

#!/bin/tcsh
set file = ( bnlj-DB70M-Page1K-Buf100K-R500K-S50K-RecSize100B-10%.log\
bnlj-DB70M-Page1K-Buf100K-R500K-S100K-RecSize100B-10%.log\
bnlj-DB70M-Page1K-Buf100K-R500K-S200K-RecSize100B-10%.log\
bnlj-DB70M-Page1K-Buf100K-R500K-S400K-RecSize100B-10%.log\
bnlj-DB70M-Page1K-Buf100K-R600K-S500K-RecSize100B-10%.log\
bnlj-DB70M-Page1K-Buf100K-R1000K-S500K-RecSize100B-10%.log\
bnlj-DB70M-Page1K-Buf100K-R5000K-S500K-RecSize100B-10%.log\
bnlj-DB70M-Page1K-Buf100K-R10000K-S500K-RecSize100B-10%.log\
bnlj-DB70M-Page1K-Buf100K-R20000K-S500K-RecSize100B-10%.log\
mj-DB70M-Page1K-Buf100K-R500K-S50K-RecSize100B-10%.log\
mj-DB70M-Page1K-Buf100K-R500K-S100K-RecSize100B-10%.log\
mj-DB70M-Page1K-Buf100K-R500K-S200K-RecSize100B-10%.log\
mj-DB70M-Page1K-Buf100K-R500K-S400K-RecSize100B-10%.log\
mj-DB70M-Page1K-Buf100K-R600K-S500K-RecSize100B-10%.log\
mj-DB70M-Page1K-Buf100K-R1000K-S500K-RecSize100B-10%.log\
mj-DB70M-Page1K-Buf100K-R5000K-S500K-RecSize100B-10%.log\
mj-DB70M-Page1K-Buf100K-R10000K-S500K-RecSize100B-10%.log\
mj-DB70M-Page1K-Buf100K-R20000K-S500K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R500K-S50K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R500K-S100K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R500K-S200K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R500K-S400K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R500K-S50K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R500K-S100K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R500K-S200K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R500K-S400K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R600K-S500K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R1000K-S500K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R5000K-S500K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R10000K-S500K-RecSize100B-10%.log\
hj-DB70M-Page1K-Buf100K-R20000K-S500K-RecSize100B-10%.log\
inlj-DB70M-Page1K-Buf100K-R500K-S50K-RecSize100B-10%.log\
inlj-DB70M-Page1K-Buf100K-R500K-S100K-RecSize100B-10%.log\
inlj-DB70M-Page1K-Buf100K-R500K-S200K-RecSize100B-10%.log\
inlj-DB70M-Page1K-Buf100K-R500K-S400K-RecSize100B-10%.log\
inlj-DB70M-Page1K-Buf100K-R600K-S500K-RecSize100B-10%.log\
inlj-DB70M-Page1K-Buf100K-R1000K-S500K-RecSize100B-10%.log\
inlj-DB70M-Page1K-Buf100K-R5000K-S500K-RecSize100B-10%.log\
inlj-DB70M-Page1K-Buf100K-R10000K-S500K-RecSize100B-10%.log\
inlj-DB70M-Page1K-Buf100K-R20000K-S500K-RecSize100B-10%.log)
 
foreach ftl (FMAX MITS SUPER FAST LOG)
echo
echo "********************************************"
sim -file_name $file -no_flash_block 1200 -cost_r 80 -cost_w 200 -cost_e 1500 -flash_type LARGE -algo $ftl -iter 5 -no_log_blocks 3 -extra_block 6 -align 2 -aging 500 -aging_write_ratio 20 -aging_random_ratio 20 -disp_stat_only -no_row_datafile 9
echo
end

QueryTrace

sim에서 사용할 trace file을 생성하는 Java 프로그램

Options

Usage: java QueryTracer alg comment_msg db_size db_page_size buf_size r_size s_size rec_size random_rate [iter] [-con]
  0. alg          : algorithm (bnlj, mj, hj, inlj, st, ct)
  1. comment_msg  : permit comment msg in log file (0, 1)
  2. db_size      : database size (MB)
  3. db_page_size : db page size (KB)
  4. buf_size     : buffer size (KB)
  5. r_size       : size of relation r (KB)
  6. s_size       : size of relation s (KB)
  7. rec_size     : the size(bytes) of a record
  8. random_rate  : the ratio (%) of unclustered ratio
     [iter]       : no. of iteration for ct (optional)
     [-con]       : output to console (optional)
 bnlj : Block Nested Loop Join
 mj   : Merge Join
 hj   : Hash Join
 inlj : Index Nested Loop Join
 st   : Sequential Multi Plans
 ct   : Concurrent Multi Plans

Sample Scripts

#!/bin/tcsh
#
# 0. alg          : algorithm (bnlj, mj, hj, inlj, st, ct)
# 1. comment_msg  : permit comment msg in log file (0, 1)
# 2. db_size      : database size (MB)
# 3. db_page_size : db page size (KB)
# 4. buf_size     : buffer size (KB)
# 5. r_size       : size of relation r (KB)
# 6. s_size       : size of relation s (KB)
# 7. rec_size     : the size(bytes) of a record
# 8. random_rate  : the ratio (%) of unclustered ratio
#
# table size
foreach f (bnlj mj hj inlj)
java QueryTracer $f 0 70 1 100 500 50 100 10
java QueryTracer $f 0 70 1 100 500 100 100 10
java QueryTracer $f 0 70 1 100 500 200 100 10
java QueryTracer $f 0 70 1 100 500 400 100 10
java QueryTracer $f 0 70 1 100 600 500 100 10
java QueryTracer $f 0 70 1 100 1000 500 100 10
java QueryTracer $f 0 70 1 100 5000 500 100 10
java QueryTracer $f 0 70 1 100 10000 500 100 10
java QueryTracer $f 0 70 1 100 20000 500 100 10
end
개인 도구
이름공간
변수
행위
둘러보기
구성원
연구
연구실
기타
도구모음
인쇄/내보내기