Internship in OCZ Technology VLDB 연구실 오기환 wurikiji@gmail.com 5/30/2012 1
At San Jose, CA, USA SSD product OCZ Technology Worked at Indilinx firmware team 2012. 1. 3 ~ 2012. 2. 3 ( 약 32 일 ) 오전 9 시출근오후 6 시퇴근 실제컴파일이전에반드시코드리딩진행 5/30/2012 2
섹터 : 최소 I/O 단위 용어정리 페이지 : 섹터들의집합, SATA 호스트와펌웨어사이의기본통신단위 블록 : 플래시메모리에서데이터를지우는최소단위 5/30/2012 3
Why sector mapping? Indilinx 정현모이사님의 Idea 윈도우및리눅스의실제사용자환경에서의트레이스결과모든 I/O 가페이지크기에맞춰서요청이일어나는게아님 페이지크기보다작은사이즈의 I/O 요청이생각보다많이일어난다. 작은단위 (Sector 단위 ) 의 I/O 요청을최대한빨리처리할수있도록한다 5/30/2012 4
Sector mapping 개발이슈 매핑테이블의크기 64MB memory 제한 한섹터당 4Byte 매핑정보 4GB 만해도 32MB memory 필요 POR( 정상적파워오프 ) 의구현 GC의구현 섹터별 valid 여부의저장 5/30/2012 5
개발과정 2GB SSD 기준의기본 Sector mapping FTL 의구현 정상종료요청에대한 POR 구현 2GB -> 32GB SSD 대상으로의확장구현 Mapping table 관리기법의변화 DRAM memory 및 nand Flash 관리전략수립 성능테스트 GC 구현 5/30/2012 6
기본 Sector mapping FTL 5/30/2012 7
기본 Sector mapping FTL 2GB SSD 를기준으로시작 16MB 의 DRAM memory 공간필요 Sector 들의저장방식의지정 Memory 상의데이터관리 Nand 로 Flash 되지않고아직 memory 에존재하는데이터의 Read 요청처리 5/30/2012 8
기본 Sector mapping FTL Write 요청처리 5/30/2012 9
기본 Sector mapping FTL Read 요청처리 5/30/2012 10
확장 Sector mapping FTL 32GB, 64GB 대상으로의확장 메모리상에 mapping 정보를모두저장할수없음 Nand flash 의특정위치를 mapping 정보를읽고쓰는공간으로고정 Nand flash 에서 mapping 정보의저장위치를가리키는또다른 mapping 테이블필요 메모리내에서 mapping 테이블에대한교체정책구현 5/30/2012 11
확장 Sector mapping FTL 각뱅크별 mapping 테이블의위치는고정 ex) lsn 0~128 까지의테이블은 bank 0 의 3 번째블록에위치하도록고정 Mapping 테이블을저장할메모리공간이부족할경우에대비한교체정책 FIFO 방식으로교체 필요한 mapping 테이블은요청이들어올때마다 nand flash 에서읽어옴 5/30/2012 12
확장 Sector mapping FTL Nand flash 의사용구조 5/30/2012 13
확장 Sector mapping FTL #define SMT_ADDR (MERGE_BUFFER_ADDR + MERGE_BUFFER_BYTES) #define SMT_DRAM_BYTES (SECTORS_PER_BANK * sizeof(uint32)) #define SMT_BYTES (SECTORS_PER_BANK * sizeof(uint32)) #define SMT_PIECE_BYTES ((SMT_BYTES + NUM_BANKS_MAX -1 )/ NUM_BANKS_MAX) #define SMT_INC_SIZE ((SMT_PIECE_BYTES + BYTES_PER_PAGE -1 ) / BYTES_PER_PAGE) #define SMT_LIMIT (PAGES_PER_VBLK / SMT_INC_SIZE) 5/30/2012 14
Write Buffering Technique Write 요청처리시섹터단위로곧바로 nand flash 에 write 하지않고, buffer 를사용하여 page 크기만큼모은뒤에 write 를진행 크게 2 가지방법의 buffering 방식 제일첫 bank 의 buffer 부터차례대로꽉채워나가는방법 들어오는순서대로각 bank 의 buffer 로병렬분산시키는방법 5/30/2012 15
Write Buffering Technique 여러가지 write buffering 기법 5/30/2012 16
Write Buffering Technique #define MERGE_BUFFER_BYTES (((NUM_BANKS * BYTES_PER_PAGE + BYTES_PER_SECTOR - 1) / BYTES_PER_SECTOR )* BYTES_PER_SECTOR) 5/30/2012 17
POR Firmware 에서주기적으로호출되는 flush() 및정상적인종료요청에대비한 Meta data 의보관 메모리내에있는 mapping 테이블및아직 buffer 에남아있는모든 data 들을 nand flash 로내림 Buffer 에남아있는 data 를모두내리고 mapping table 업데이트 mapping 테이블을모두내림 기타 meta 데이터들을내림 Meta data 를위치시킬곳은배드블록이아니어야함 5/30/2012 18
구현이슈 CPU의 memory 직접접근 vs 메모리유틸리티사용 SATA 와 FTL간의요청큐 limit 조절 bm_read_limit, bm_write_limit 의직접조절 Buffer에서 nand flash로의 atomic write 보장 Memory 접근감소 vs 저장공간활용도증가 Mapping 테이블정보의 atomic read/write 보장 Mapping 테이블관리크기 5/30/2012 19
성능평가 측정도구 : IOmeter, ATTO 측정방법 IOmeter Single User Test Random Write transfer size : 512Bytes, 1KB, 2KB, 4KB Sequential Write/Read transfer size : 128KB ATTO testing environment Queue depth : 10 Transfer size : 512Bytes, 1KB, 2KB, 4KB, 8KB, 16KB, 32KB 5/30/2012 20
측정 FTL 성능평가 1-buffer Sector mapping Dynamic Sector mapping Static Sector mapping Multi copy Sector mapping Tutorial FTL Greedy FTL 5/30/2012 21
성능평가 2GB 대상 FTL 의 Random Write ( IOPS ) IOPS 1_buffer Dynamic Static Multi_copy Tutorial_1 Greedy 512B 26930 27213 27868 28370 1400 1300 1KB 22075 22773 17485 24573 1340 1280 2KB 14415 13250 8858 19845 1270 1250 4KB 7377 6885 4693 10470 1200 1120 기존 FTL 대비매우빠른 Random Write 처리 5/30/2012 22
성능평가 Sequential Read/Write 테스트 MB/S 1_buffer Dynamic Static Multi_copy Tutorial_1 Greedy WRITE 31.5 29 33 62 90 85 READ 1.8 6.88 6.87 1.8 77 77 Write buffering 기법별로서로다른결과 5/30/2012 23
성능평가 32GB 대상으로확장된 FTL 의성능평가 Mapping 정보의 nand read/write 가추가됨 IOPS 1_buffer Dynamic static Multi_copy Tutorial Greedy Single_512B 1293 1177 1261 540 1400 1300 매우저하된성능 Mapping 정보 load overhead 5/30/2012 24
결과 2GB 대상의 FTL 실험결과를보면 Mapping 테이블이모두 DRAM Memory 상에존재할수있는경우에는작은단위의 I/o 요청에서는기존의 FTL 보다성능이매우향상된것을알수있다 512bytes 기준약 100 배정도의차이 Sector mapping 사이에서도 write buffering 의방식에따라서성능차이를보이는것을알수있다. 5/30/2012 25
결과 Mapping 테이블이 DRAM 에모두존재하지않을경우매우큰성능하락이있음 Mapping 테이블을 NAND 에서 DRAM 으로, DRAM 에서 NAND 로옮기는 overhead Random write 테스트시 miss rate 가 90% 이상 5/30/2012 26
결론 Map 테이블이모두 DRAM 에상주할수있는경우는매우뛰어난 Random I/O 성능을볼수있으나, 현실적으로불가능 128GB 용량을위해 1GB 의메모리가필요 Mapping 테이블을좀더효과적으로관리할기법이필요 5/30/2012 27