DB System Concepts 7th

[DB] Chapter 12-4. Flash Memory

patrick-star 2023. 6. 14. 23:14
728x90

Flash 메모리는 두 가지 유형이 있다. NOR flashNAND flash.

NAND flash는 데이터 저장을 위해 주로 사용되는 variant(변형형)이다.
NAND flash에서 읽기 작업(reading)은 흔히 4096바이트로 구성된 전체 페이지 데이터를 NAND flash로부터 메인메모리로 가져와야 한다.
즉, NAND 플래시에서 읽은 전체 페이지 데이터를 메인 메모리로 옮겨야 한다는 뜻이다.

그래서, NAND flash에 있는 페이지는 자기 디스크의 sector와 비슷하다.

SSDNAND 플래시를 사용해서 만들어졌고 디스크 저장장치와 같이 똑같은 블록 기반의 인터페이스를 제공한다.
SSD의 데이터 전송 속도자기식 디스크의 전송 속도보다 빠르고 보통은 연결 기술에 의해 속도가 제한된다.
(SATA 인터페이스를 사용하면 500 MB / 초의 속도 // NVMe PCIe 인터페이스를 사용하면 최대 3GB / 초의 속도
자기 디스크는 최대 200 MB / 초의 속도를 갖는다) SSD의 전력 소모량 역시 자기 디스크보다 현저히 낮다.

플래시 메모리에 쓰기 작업은 좀 더 복잡하다. 플래시 메모리의 페이지에 쓰는 건 보통은 100 마이크로 초만큼 소요된다.
하지만, 일단 작성되면, 직접적으로 덮어쓸수는 없다. 대신에 지웠다가 다시 쓸 수는 있다.

지우기 작업은 페이지의 그룹에서 실행되기 때문에 erase block이라고도 불리고 블록에 있는 모든 페이지를 지운다.
이는 2 ~ 5 밀리초 만큼 소요된다. erase block(또는 block)은 대부분 256KB ~ 1MB의 크기를 갖고 있고 128 ~ 256개의 페이지를 갖고 있다. 그리고 플래시 페이지를 지울 수 있는 횟수 제한으로 10만 ~ 100만번을 둔다. 제한선에 도달하면 에러가 발생한다.

플래시 메모리 시스템은 논리적인 페이지 넘버와 물리적인 페이지 넘버를 매핑함으로써
느린 소멸 속도업데이트의 제한의 영향을 제한한다.

논리 페이지가 업데이트되면 기존에 지워진 물리적 페이지다시 매핑될 수 있다. 그러면 논리 페이지가 이전에 저장했던 물리 페이지의 위치를 나중에 지울 수 있다. 각각의 물리 페이지는 논리적 주소를 저장할 수 있는 메모리를 작게 갖고 있다.

만약에 논리 주소다른 물리 페이지에 재매핑된다면, 기존의 물리 페이지는 삭제된 것으로 표시된다.
그러므로, 물리 페이지를 스캔함으로써 각 논리 페이지가 어디에 있는지 찾을 수 있다.
이러한 논리적-물리적 페이지 매핑은 빠른 접근을 위해 in-memory의 translation table에서도 반복된다.

여러 개의 삭제된 페이지를 갖고 있는 블록은 주기적으로 삭제된다. 이때 해당 블록의 삭제되지 않은 페이지들을 먼저 다른 블록으로 복사합니다 (번역 테이블은 이러한 삭제되지 않은 페이지들을 위해 업데이트된다).
각각의 물리적 페이지가 일정 횟수만큼 업데이트 될 수 있기 때문에

  • 여러 번 삭제되었던 물리적 페이지는 cold data라고 부르는 드물게 업데이트되는 데이터를 저장하는데 사용됨
  • 많이 업데이트 될 수 있는 물리적 페이지는 hot data라고 부르는 빈번하게 업데이트 되는 데이터를 저장하는데 사용됨

물리 블록에 대햇 공평하게 소멸 작업을 분산하는 원칙 웨어 레벨링(wear leveling) 이라고 불리며, 일반적으로 플래시 메모리 컨트롤러에 의해 투명하게 수행된다. 만약에 물리적 페이지가 너무 많은 업데이트로 인해 손상을 받았다면 해당 페이지는 전체 플래시 메모리에 영향을 미치지 않으면서 사용에서 제외될 수 있다.

위에서 얘기한 동작들은 flash translation layer라고 불리는 SW의 계층에서 수행된다.
플래시 저장장치는 속도가 빠른 걸 제외하면 자기식 디스크와 방식이 똑같다.
(둘 다 페이지/섹터 기반의 인터페이스를 제공하는 측면에서)

그래서, 파일 시스템데이터베이스 저장 구조는 저장 장치가 플래시이든 자기식 저장장치이든 상관없이 하부 저장 구조동일한 논리적인 시점을 볼 수 있다.

SSD의 성능은 3가지 관점에서 표현된다.

  1. 4KB가 표준인 경우 1초당 무작위 블록 읽기 작업 횟수.

2018년에는 1초당 약 1만번의 읽기 작업 횟수를 기록했다.

SSD는 32개의 벙렬 요청을 일반적으로 지원함으로써 여러 번의 무작위 요청병렬적으로 처리할 수 있다.

  • SATA 인터페이스를 갖는 플래시 디스크 : 4KB 블록에서 병렬적으로 전송된 32개의 요청에 대해 1초당 10만번의 읽기 작업을 처리한다.
  • NVMe PCIe를 사용하는 SSD: 4KB 블록에서 1초당 35만번의 무작위 요청을 처리한다.

이 숫자들은 QD-1(병렬 처리 없음) ~ QD-n(n개의 병렬 처리)으로 나뉘어져 있다. 보통은 QD-32를 많이 쓴다.

  1. 연속적인 읽기와 연속적인 쓰기에 대한 데이터 전송 속도
  • SATA 3 인터페이스의 SSD : 일반적으로 연속적인 읽기와 연속적인 쓰기의 속도는 1초당 400 ~ 500 MB
  • NVMe PCIe 3.0x4 인터페이스의 SSD : 2~3 GB / 초
  1. 4KB가 표준인 경우 1초당 무작위 블록 쓰기 작업 횟수

2018년에는 QD-1 환경과 4KB 크기에서 4만번의 무작위 쓰기 작업 횟수를 기록했다. QD-32환경에서는 10만번의 무작위 쓰기 작업 횟수를 기록했다.