- SSD는 HDD와 다르게 기계적인 움직임이 없으며(disk arm을 움직여 데이터를 읽는 등) 단순히 트랜지스터들로 이루어져 있다.
- random-access memory(DRAM)과는 다르게 SSD는 전원이 꺼져도 정보를 가지고 있는다.
- flash메모리( 특히 NAND-based flash)는 1980년대에 Fujio Masuoka에 의해 만들어졌다.
특징점
- To write to a given chunk of it(flash page), you first have to erase a bigger chunk(flash block).
- writing too often to a page will cause it to wear out
flash기반 SSD 생각해볼 점들
- erase의 비용을 싸제 하는 방법은 없을까?
- how can we build a device that lasts a long time, given that repeated overwrite will wear the device out?
- will the march of progress in technology ever cease?
- 플래시 칩들은 하나의 트랜지스터에 하나나 하나 이상의 비트들을 저장하도록 고안되었다.
- 트랜지스터 내에 트랩된 전하 레벨은 이진 값으로 매핑된다
- SLC(Single-Level Cell): 하나의 비트를 저장
- MLC(Multi-Level Cell): 두개의 비트가 저장 (00, 01, 10 11 -> low, somewhat low, somewhat high, high)
- TLC(Triple-Level Cell): 하나의 셀 당 세개의 비트 저장
SLC가 가장 높은 퍼포먼스를 보이며 비용이 가장 크다.
blocks ( = erase blocks)은 보통 128KB나 256KB다
pages는 보통 4KB
(‼️이는 우리가 디스크와 RAID에서 말하는 블럭과 다르며, virtual memory에서 말하는 page와도 다르다!!)
bank에 여러개의 블럭이 있고, 블럭 하나에는 여러개의 페이지가 있다.
plane은 아마 flash 칩 판 하나를 말하는듯
- read latencies are quite good
- program latency is higher,
- to get good write performance, you will have to make use of multiple flash chips in parallel
- erases are quite expensive
신뢰성
- mechanical disk의 경우 다양한 이유로 실패할 수 있다 (head crash가 난다던ㄷ지)
- 그에 비해 ssd는 반도체이기 때문에 그런 문제점은 발생하지 않는다(대신 wear out이라는 가장 중요한 문제점이 있다)
- 플래시 블록이 지워지고 다시 쓰여질 때, it slowly accrues a little bit of extra charge
- over time, extra charge builds up, it becomes increasingly difficult to differentiate between 0 and 1
- at the point where it becomes impossible, the block becomes unusable
- 블럭의 일반적인 lifetime은 잘 알려져 있지 않다
- 제조사에서는 MLC-based blocks는 10000 P/E(Program/Erase) 정도를 가진다고 한다.
- 그러나 최근 연구들에서는 예상보다 더 길다고 나온다
- disturbance
- 플래시 칩에서 특정 페이지를 접근할때, it is possible that some bits get flipped in neighboring pages
- such bit flips are known as read disturbs or program disturbs, depending on whether the page is being read or programmed, respectively.
- 하위호환성(backword-compatibility)는 계층 구조에서 항상 고려해야하는 사항이다.
- flash chips들의 모음이 어떻게 일반적인 저장장치로 보일 수 있는지 고려해야한다
- the standard storage interface is a simple block-based one, where blocks of size 512 bytes can be read or written, given a block address
- SSD는 여러개의 플래시 칩들로 구성되어있다 (for persistent memory)
- SSD는 SRAM같은 휘발성 메모리들도 가진다, 이는 데이터를 캐싱하고 buffering하고, mapping table로 사용하기 매우 유용하다
- Finally, an SSd contains control logic to orchestrate device operation
- FTL(Flash translation Layer)는 논리적 블럭을 읽고 쓰는 요청을 받고, 이를 low-level read, erase, program으로 바꾼다 (underlying physical blocks and physical pages that comprise the actual flash device)
더 좋은 성능을 위해서
- 플래시 칩들을 병렬적으로 사용하는 방법이 있다.
- write amplification()을 줄인다:
- high reliability will be achieved through the combination of a few different approaches.
direct mapping
- logincal page N is mapped directly to a read of physical page N
- 이는 성능 측면과 신뢰성 부분 모두 문제점이 있다
- 성능: the device has to read in the entire block, erase it, and then program it. => write amplification이 커진다 => 이게 심각해지면 HDD보다 성능이 안좋아진다
- 신뢰성: 파일시스템 메타데이터나 사용자 파일 데이터가 반복적으로 덮어써진다면, 같은 블록은 지워지고 program되고, 이는 wear out을 가속화시킴
- 따라서 direct mapping은 좋지 않은 방법이다
따라서 최근 FTL들은 log-structured다.
- upon a write to logical block N, the device appends the write to the next free spot in the currrently-being-written-to block(logging)
- to the client, the device looks like a typical disk(512 byte의 섹터 단위로 읽고 쓰는)
- 예를들어, 클라이언트가 4kb 사이즈의 청크를 읽고 쓰고, SSD는 16KB블럭(4개의 4KB page로 구성된)을 쓴다고 하자
1. Write(100) with contents a1
2. Write(101) with contents a2
3. Write(2000) with contents b1
4. Write(2001) with contents b2
- 이 논리적 블럭 주소는 SSD 클라이언트(ex)filt system)이 사용한다 to remember where information is located
- 내부적으로, 장치는 블럭들을 erase and program operations supported by the raw hw, and somehow record , for each logical block address, which physical page of the SSD stores its data
- 대부분 SSD들은 페이지를 순차적으로 쓴다/ program disturbance에 관련된 신뢰성 문제점들을 감소시키면서!
- read 할때 in-memory 맵핑 테이블에서 해당하는 physical block idx를 반환
만약 중간에 장치 전원이 꺼지면 in-memory mapping table은 사라지는가?
- 실질적으로 전부 다 사라지지는 않는다, SSD가 persistent storage device이기 때문에 mapping 정보를 복구할 방법이 필요하다
- 가장 간단한 방법은 mapping information을 기록하는 것으로 이를 OOB(out-of-band) are라고 부른다
- 장치 전원이 꺼지고 다시 재부팅될때, OOB area를 스캔하면서 맵핑 테이블을 재설정한다.
- scanning large SSD to find all necessary mapping information is slow.
- 따라서 some higher-end devices에서는 더 복잡한 로깅과 체크포인트 기법을 사용한다.
- first is that overwrites of logical blocks lead to something we call garbage.
-
참고문헌
https://pages.cs.wisc.edu/~remzi/OSTEP/file-ssd.pdf
'전공 이론 공부 > 기타' 카테고리의 다른 글
Basic Flash Operations (0) | 2022.01.17 |
---|
전공 공부 기록 📘
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!