대용량 저장장치의 구조에 대해서 알아보자.
주로 하드디스크(HDD)와 비휘발성 메모리(NVM)에 대한 이야기.
하드디스크
다음과 같이 생겼다.
- CD처럼 생긴 부분은 플래터라고 한다.
- 플래터는 자기 물질로 덮여있다.
- 정보를 플래터에 자기적으로 기록하여 저장하고, 패턴을 감지해 정보를 읽는다.
- CD를 긁을 것 같은 바늘을 암(arm)이라고 한다.
- 검은색 부분을 읽기-쓰기 헤드라고 한다.
- 암(arm)들이 걸려있는 부분을 암 어셈블리라고 한다.
- CD를 고정하는 부분을 스핀들이라고 한다.
플래터의 구조를 자세히 파보자.
- 플래터를 껍질처럼 나눠놓은 것을 트랙이라고 한다.
- 트랙을 쪼개 놓은 것을 섹터라고 한다.
- 하나의 트랙은 수백 개의 섹터를 포함할 수 있다.
- 1섹터의 크기: 과거 512byte, 이후 4kb.
- 동일한 암(arm)위치에 있는 같은 반지름의 트랙들을 실린더라고 한다.
- 하나의 디스크 드라이브에는 수천 개의 동심원 실린더가 존재할 수 있다.
작동방식 & 성능측정
작동방식 : 디스크 드라이브 모터를 고정으로 회전해서 데이터를 읽음.
- 대부분의 드라이브 : 분당 회전수(RPM)으로 표현
- 초당 60~250회 회전. RPM 5400, 7200, 10000, 15000
- 이러한 회전 속도는 전송 속도와 관련이 있음.
일부 드라이브는 사용하지 않을 때 전원이 꺼지고, I/O 요청을 받으면 회전.
성능을 측정하는 단위
- 전송 속도 : 드라이브와 컴퓨터 간 데이터 흐름의 속도
- 위치 지정 시간 (=임의 액세스 시간)
- 탐색 시간 : 디스크 암을 원하는 실린더로 이동하는데 필요한 시간
- 회전 지연 시간 : 원하는 섹터가 디스크 헤드 위치까지 회전하는 데 걸리는 시간
일반적인 디스크는…
- 초당 수백 메가바이트의 데이터를 전송
- 수 밀리초 정도의 탐색 시간 & 회전 지연 시간을 가짐.
성능을 향상시키기 위해 DRAM 버퍼를 사용.
이외 특징
- 읽기-쓰기 헤드가 디스크(플래터) 표면에 직접 닿지는 않음.
- 이 사이에 공기나 헬륨과 같은 가스가 미세하게 얇은 층을 이루고 있음.
- 만약 닿을 경우 디스크 표면에 손상이 일어나며 이를 헤드 충돌이라고 함.
- 헤드 충돌 발생시에는 전체 디스크를 교체해야 함.
- 디스크의 데이터는 RAID나 타 저장장치로 보호하지 않는 이상 무조건 손상됨.
- 하드디스크 자체는 밀봉되어 있음.
- 일부 섀시(뼈대)는 시스템 또는 저장장치 섀시를 종료하지 않고도 제거 가능
디스크 전송률
디스크에 써 있는 성능 수치 ≠ 실제 성능 수치 ex. 명시된 전송률 > 실질 전송률
전송률 = 읽기-쓰기 헤드가 플래터에서 비트를 읽는 비율 그치만 실제 전송률은 운영체제에 블록이 전달되는 비율도 포함. 따라서 두 값이 달라질 수 밖에 없음.
비휘발성 메모리
non-volatile memory(nvm)
모양, 구조, 예시
이렇게 생겼다.
NVM의 구조
- 하드디스크의 섹터 = 페이지.
- 페이지를 모은 것 = 블록.
NVM의 사용예시
- 하드디스크를 대체할 용도로 쓰이면 = SSD
- 들고 다닐 수 있게 만들면 = USB 드라이브 또는 DRAM 스틱
- 스마트폰의 저장장치 = 마더보드에 표면 부착
여러가지 특징
- 전기식이다
- 컨트롤러 + 저장용 플래시 낸드(NAND) 반도체 칩
- 움직이는 부품이 없다 = 안정성이 높다
- 전력 소모량도 적다.
- 속도가 빠르다.
- 움직이는 부품이 없기 때문.
- 탐색 시간이나 회전 지연시간이 없다.
- 좀 가격이 비쌌다.
- 초기 가격은 상당히 높았음.
- 지금은 대중화 된 편.
- 시스템 버스에 직접 연결한다.
- 하드디스크보다 더 빠르므로, 표준 버스 인터페이스가 오히려 속도를 제한할 수 있다.
- 따라서 시스템 버스(ex. PCIe)에 직접 연결하도록 설계
- 자체적인 저장 및 신뢰성 문제를 가짐.
- 읽고 쓰기는 되도 덮어쓰기가 안된다.
- 덮어쓰기 : NAND 셀을 먼저 지워야 함.
- 삭제가 읽고 쓰기보다 시간이 더 걸린다.
- 연산이 병렬로 이뤄지는 점을 이용해 보통 이 시간을 줄인다.
- NVM 플래시 장치가 각 다이에 대한 여러 경로로 이뤄진 여러 개의 다이로 이뤄져 있기 때문.
- 삭제를 할 때마다 힘이 약해진다.
- 특정 횟수 이상으로 삭제를 하면 데이터가 날라간다.
- 이러한 제한을 막을 개선 알고리즘이 고안됨. 단, 운영체제 단에서는 신경 쓸 필요 없음.
- 읽고 쓰기는 되도 덮어쓰기가 안된다.
- 수명 측정 단위 = DWPD
- Drive Writes Per Day의 약자
- 하루에 몇 번이나 드라이브 용량에 해당하는 데이터를 쓸 수 있는지
- ex. 5 DWPD 등급의 1TB NAND 데이터 = 보증 기간 내 장애 없이 5TB 쓰기 가능.
컨트롤러 알고리즘
NVM 저장장치는 NAND 반도체로 만들어진 경우가 많다.
앞서 보았듯, NAND 반도체는 읽고 쓰기는 되도 덮어쓰기가 안된다.
그럼, 어떻게 삭제하고 어떻게 유효한 데이터를 찾는가?
- 어떻게 삭제하는가?
- 1번째 페이지 = 유효하지 않은 데이터
- 2번째 페이지 = 유효한 데이터
- 이 경우 유효한 데이터를 포함하는 논리 블록을 추적하기 위해 컨트롤러가 플래시 변환 계층을 유지.
- 이 테이블은 현재 유효한 논리 블록을 포함하는 물리 페이지를 매핑
- 또한 물리 블록 상태(= 유효하지 않은 페이지)만 포함하고 있음.
- 이를 통해 삭제할 수 있는 블록을 추정
- NVM이 가득 찬 경우
- 가비지 수집을 한다.
- 유효한 데이터 ⇒ 삭제 후 특정한 저장 공간에 보냄.
- 무효한 데이터 ⇒ 그냥 삭제
- 이러한 특정한 저장공간을 과잉 공급 공간이라고 한다.
- 언제나 쓸 수 있도록 마련해 놓는 공간.
- 전체 용량의 약 20% 정도 된다.
- 가비지 수집을 한다.
과잉 공급 공간은 마모 평준화에도 도움이 된다.
- 위에서 언급되었듯, 모든 NVM = 삭제 횟수에 제한이 있음.
- 따라서 일부 블록만 계속 지워진다면 해당 블록이 마모됨(=수명이 단축됨).
- 삭제 횟수가 적은 블록에 데이터를 배치 → 삭제
- 블록들의 마모 횟수를 어느 정도 평준화 시켜줌.
데이터 보호의 측면에서 NVM은 오류 수정 코드 제공.
- 기록될 때 계산되어 데이터와 함께 저장됨.
- 읽을 때 데이터와 함께 읽어 오류를 감지 & 가능한 경우 오류 수정
- 오류가 자주 발생하면 해당 페이지는 불량으로 표기
일반적으로 NVM 1개를 사용할 경우 데이터가 오염되는 등 치명적인 오류 발생 가능
이때, RAID 보호가 사용되어 데이터 복구 가능.
휘발성 메모리
RAM 드라이브는 보조저장장치처럼 작동.
그렇지만 시스템 DRAM의 한 영역을 할당해 저장장치인 것처럼 나머지 시스템에 제공하는 장치 드라이버에 의해 생성됨.
이러한 “드라이브”는 일반적으로 표준 파일 연산을 위한 파일 시스템이 생성됨.
왜 DRAM을 임시 데이터 저장장치로 사용하는가?
- RAM 드라이브를 사용하면 사용자와 프로그래머가 표준 파일 연산을 사용해 데이터를 메모리에 임시로 보관할 수 있음.
- 고속 임시 저장 공간으로 유용함.
- 부팅 시 리눅스 : 저장장치를 이해하는 운영체제 부분이 적재되기 전 시스템의 타 부분이 루트 파일 시스템 및 해당 내용에 액세스 할 수 있도록 하는 임시 루트 파일 시스템(initrd)를 생성.
- RAM 드라이브 기능은 많은 운영체제에서 사용됨.
- 리눅스의
/dev/ram - macOS의
diskutil
- 리눅스의
저장장치 연결법
저장장치는 시스템 버스나 I/O 버스를 이용해 컴퓨터와 연결한다.
- ex. ATA, SATA, eSATA, SAS, USB, FC 등등
- 가장 흔한 것은 SATA
NVM 장치는 NVMe라는 전용 인터페이스가 존재.
- 시스템 PCI 버스에 직접 연결하는 것보다 처리량이 더 높고, 빠르다.
버스에서의 데이터 전송은 컨트롤러로 수행.
- 컨트롤러 (=호스트 버스 어댑터) : 특수한 전자 프로세서라고 보면 된다.
- 호스트 컨트롤러 : 버스의 컴퓨터 쪽에 있는 컨트롤러
- 장치 컨트롤러 : 장치 속에 있는 컨트롤러
대용량 저장장치에서 I/O는 다음과 같이 수행된다.
- 컴퓨터는 매모리에 매핑된 I/O 포트를 통해 명령을 호스트 컨트롤러에 둠
- 호스트 컨트롤러는 메세지를 통해 명령을 장치 컨트롤러에 전송
- 장치 컨트롤러가 하드웨어를 작동, 명령 수행
- 장치 컨트롤러 안에는 일반적으로 내장 캐시가 존재.
- 저장 매체에서 캐시로 데이터 전송.
- 캐시에서 호스트 DRAM으로 다시 데이터를 전송.
주소 매핑
저장장치에서도 논리 주소, 물리 주소가 있으며 이를 매핑하는 방법 또한 존재한다.
- 가장 작은 전송 단위를 논리 블록이라고 한다.
- HDD : 각 논리 블록이 물리 섹터(또는 반도체 페이지)으로 매핑된다.
- 매핑은 트랙 1개를 다 채우는 순서로 진행.
- 1번 트랙 채우고 → 2번 트랙 채우고 → 3번 트랙 …
- NVM : 각 논리 블록이 칩, 블록 및 페이지(유한순서 리스트)으로 매핑됨.
관련 알고리즘은 물리적인 주소보다는 논리적인 주소를 사용하는 것이 더 쉽다.
이러한 논리적인 주소를 LBA, 논리 블록 주소라고 한다.
매핑의 한계
이러한 매핑은 하드디스크에서 한계를 보인다.
-
대부분의 드라이브에는 결함이 있는 섹터가 있지만, 해당 부분을 예비 섹터로 대체한다.
- 논리 블록 주소는 순차적으로 유지. 물리적 섹터 위치는 변경
-
트랙 당 섹터 수는 일정하지 않다.
- 기본적으로는 고정 선형 속도를 사용하므로, 1개의 트랙이 가지는 비트는 일정하다.
- 그런데 플래터는 원형이므로 바깥쪽으로 갈수록 더 많은 섹터를 가지게 된다.
- 이러한 점을 극복하기 위해 크게 두 가지 대안이 있다.
- 안쪽에서 바깥쪽으로 갈 수록 속도를 늘린다.
- 안쪽에서 바깥쪽으로 갈 수록 밀도를 줄인다. ⇒ HDD는 이 방법을 사용. 이를 고정각 속도라고 한다.
-
디스크 제조 업체는 논리 블록 주소와 물리 주소 간 매핑을 자체적으로 관리.
따라서 현재 드라이브에서는 논리 블록 주소와 물리적 섹터 간의 관계가 거의 없음.
물론, 이러한 차이에도 불구하고 HDD 처리 알고리즘은 논리적 주소가 물리적 주소와 관련이 있다고 가정하고 만들어진다.