“요즘 어떤 저장 장치를 사용하고 계시나요?” 이에 대한 답으로 “SSD(Solid State Drive)만”, 혹은 “두 개 다!”라고 하시는 분들이 매우 많을 것이라는 생각이 드네요. 예전과 달리 높은 용량 대비 저렴한 가격이라는 HDD(Hard Disk Drive)의 강점이 SSD와 거의 차이가 없게 되면서 나타나는 현상인 것 같습니다. 심지어 SSD는 HDD 보다 약 5~10배가량 빠르다는 장점까지 있죠! 그렇다면 이 SSD는 왜 빠른 걸까요? 그래서 오늘은 SSD를 구성하고 있는 플래시 메모리와 SSD만을 위한 프로토콜인 NVMe에 대해 알아보도록 하겠습니다.  

플래시 메모리

Alt text

< SD 카드 >

 

SSD를 설명하기 전에 먼저 SSD를 구성하고 있는 플래시 메모리에 대해 설명을 드려야 할 것 같습니다. 플래시 메모리는 전원이 공급되지 않아도 지워지지 않는 비휘발성 반도체 저장 장치입니다. 컴퓨터에 부착된 DRAM(Dynamic Random Access Memory)은 전원이 꺼지면 저장되어있던 내용이 전부 사라지지만 플래시 메모리는 꺼져도 데이터가 남아있다는 것이죠. 둘 다 전기로 저장을 하는데 뭐가 다르길래 하나는 다 날아가 버리고 하나는 저장이 되는 걸까요?

구조

Alt text

< 플래시 메모리 구조 >

[출처]

 

위 그림은 플래시 메모리의 구조입니다. 플로팅 게이트(Floating Gate)에 전자가 있으면 0, 없으면 1로 데이터를 저장합니다. p-substrate와 플로팅 게이트의 사이에 산화물(Oxide)라는 층이 있는데 이것이 산화막입니다. 원래 전자가 통과하지 못하는 산화막을 상판 게이트(Control Gate)에 고전압(+극)을 걸고 전자(-극)를 억지로 플로팅 게이트로 잡아당겨 데이터를 저장하는 구조라고 보시면 될 것 같습니다. 원래는 통과하지 못하는 산화막을 전자가 통과했으니 전원공급이 사라져도 플로팅 게이트에 전자가 남아있는 것입니다.

종류

플래시 메모리는 셀(Cell)이라는 곳에 데이터를 저장합니다. 위의 구조에서 보셨던 그림이 사실 셀의 구조였습니다. 위의 구조에서는 0과 1의 두 가지밖에 상태를 저장할 수 없습니다. 그렇다면 더 많은 양의 데이터를 저장하기 위해서는 셀을 더 두는 방법밖에 없는 걸까요?

SLC

SLC는 Single Level Cell의 약자입니다. 말 그대로 하나의 셀만 사용하여 데이터를 저장하는 것입니다. 셀에 전자의 유무만 판별하면 되므로 일반적으로 다른 방식들보다 속도가 가장 빠릅니다. 이런 간단한 방식이기 때문에 셀의 수명도 다른 방식에 비해 길어 내구성도 뛰어납니다. 다만 용량을 늘리려면 셀을 더 두는 방법밖에 없기에 가격이 매우 비싸다는 단점이 있습니다.

MLC

MLC는 Multi Level Cell의 약자로 2가지 뜻이 있습니다. 첫 번째는 셀 하나에 여러 비트를 저장한 플래시 메모리라는 뜻이 있고 두 번째로는 한 셀에 2비트를 저장한 플래시 메모리 구조를 뜻하는 말도 있습니다. 그럼 이제 어떤 방식으로 한 셀에 여러 비트를 저장하는지 알아보도록 하겠습니다.

Alt text

< MLC, TLC >

[출처]

 

위의 그림은 저장 방식 별로 어떻게 데이터를 저장하는지를 나타낸 것입니다. 셀에 들어 있는 전자의 양에 따라 데이터를 판별합니다. 바로 이 구조 때문에 셀의 수명이 달라지 것인데, 셀에 전자를 계속 집어넣다 보면 산화막이 점점 손상되어 원하는 데이터와는 다르게 저장이 됩니다. 따라서 한 셀에 데이터를 많이 저장하면 할수록 셀의 수명이 짧아지게 되는 것입니다. 또 읽거나 쓸 때도 전자의 양을 세밀하게 조절해야 하므로 속도도 느려지게 되는 것이지요. 속도와 수명을 희생해서 용량을 얻었다고 보면 되겠습니다. 이렇게 수명이 줄었다고는 해도 일반 사용자가 셀의 수명을 다 쓸 일은 거의 없다고 합니다. 그래서 현재 TLC(Triple Level Cell)조차 넘어 QLC(Quad Level Cell), PLC(Penta Level Cell), 테스트단계이긴 하지만 OLC(Octa Level Cell)까지 생산되고 있습니다.

 

SSD

Alt text

< SSD >

 

SSD는 Solid State Drive의 약자로 비휘발성 플래시 메모리를 사용한 저장 장치입니다. SSD는 보조 기억 장치라는 점에서는 HDD와 같지만 실제로 물리적인 플래터를 돌려서 데이터를 쓰거나 읽어 들이는 HDD와는 다르게 전기 신호를 사용하여 데이터를 읽고 쓰기를 수행합니다. 바로 이 점이 HDD와 SSD의 속도 차이가 큰 이유입니다. 직접 플래터를 돌려서 데이터가 있는 위치를 찾고 헤드를 갖다 대어 읽어 들이는 과정이 없이 한 번에 데이터를 찾을 수 있기 때문입니다.
그뿐만 아니라 SSD는 HDD처럼 기계적으로 작동하는 방식이 아니기 때문에 물리적인 충격에도 꽤 잘 버티며 자기를 통한 기록이 아닌 전자로 데이터를 기록하므로 자기장에도 잘 버틸 수 있습니다. HDD보다 빠르고 튼튼한 SSD 역시 장점만 있는 것은 아닙니다. 플래시 메모리의 한계로 데이터를 저장할 수 있는 셀에 수명이 정해져 있다는 단점과 전기적/논리적인 오류가 발생하여 데이터 손실 시 복구가 거의 불가능하다는 점이 있습니다.

 

SATA

Alt text

< SATA 포트 >

 

이것은 SATA(Serial ATA)입니다. SATA는 현재 버전 3까지 존재하고 6.0Gb/s의 대역폭을 가지며 HDD는 물론 SSD도 장착이 가능합니다. 다만 HDD나 ODD(Optical Disk Drive)에서의 데이터 전송을 목적으로 만들어져 HDD 속도의 몇 배를 내는 SSD는 최대의 성능을 이끌어 낼 수 없었습니다.

물론 SATA에서도 SSD는 꽤 괜찮은 성능을 낼 수 있습니다. 하지만 몇몇 사람들은 인터페이스 때문에 속도에 제한이 걸린다는 점이 마음에 들지 않았나 봅니다. 그래서 SSD처럼 비휘발성 플래시 메모리를 사용하는 저장 장치를 위한 새로운 인터페이스를 만들기로 했는데 이것이 바로 NVMe(Non-Volatile Memory express)입니다.

 

PCIe

NVMe는 PCIe(Peripheral Component Interconnect express)를 기반으로 하므로 NVMe를 설명해 드리기에 앞서 PCIe를 먼저 설명해 드리겠습니다.

PCI

Alt text

< PCI >

 

PCI(Peripheral Component Interconnect)는 ISA(Industry-Standard Architecture)라는 확장 슬롯을 대체하기 위해 만들어진 고속 확장 카드 인터페이스입니다. PCI는 그래픽 카드나 네트워크 카드 같은 확장 슬롯들을 자동으로 구성해주는 플러그 앤 플레이 기술이 적용되어있어 손쉽게 설치가 가능합니다. 또한 32bit와 64bit 통신을 지원해 최대 533MB/s의 높은 대역폭을 가져 거의 모든 메인보드에 장착되며 업계 표준이 되었습니다.

PCIe

PCIe는 컴퓨터 속도의 증가에 따라 기존의 PCI의 속도를 2배가량 향상한 PCI의 후속 인터페이스로 몇 가지 특징이 있습니다.

Alt text

< 레인 >

 

  • 레인(lane)
    레인이라는 단위를 사용해 인터페이스를 확장합니다. 2의 배수로 단위가 존재하며 PCIe 1.0 x16과 같은 형식으로 표기합니다. 한 레인당 250MB/s의 대역폭을 가져 PCIe x16이라면 250MB/s * 16의 값인 4,000MB/s 즉 4GB/s의 대역폭을 가지게 됩니다. 위의 사진은 위에서부터 4, 16, 1, 16레인이고 마지막 하나는 PCI 슬롯입니다.

  • 호환성
    PCIe는 상호호환이 가능합니다. 이것은 PCI와의 호환을 이야기하는 것이 아닙니다. 예를 들면 PCIe 3.0 x16의 슬롯에 PCIe 2.0 x16의 확장 카드를 장착한다면 PCIe 2.0 x16의 성능으로 사용 할 수 있습니다. 최대 성능을 낼 수 없을 뿐 사용은 가능합니다. 반대로 PCIe 3.0 x16 슬롯에 PCIe 2.0 x16의 확장 카드를 장착한다면 아무런 문제없이 사용 가능합니다. PCIe는 버전 뿐만 아니라 배속에 대한 하위 호환도 지원합니다. x16 슬롯에 x8, x1 등의 더 짧은 배속을 가진 카드를 장착할 수 있습니다. 다만 x8 슬롯에 x16 슬롯 카드를 장착하는 것은 길이가 맞지 않아 불가능하겠네요.

높은 대역폭과 상호호환성 덕분에 현재 거의 모든 데스크톱 컴퓨터에서 찾을 수 있는 업계 표준이 되었습니다.

 

NVMe

NVMe는 위에서 잠깐 설명해 드렸듯이 고성능 플래시 메모리를 위한 매우 빠른 속도의 인터페이스입니다. PCIe를 사용하여 만들어졌기 때문에 6Gb/s 이상의 높은 대역폭도 구현이 쉽게 가능합니다. 또한 SATA는 1개의 명령어 큐를 가지고 32개의 명령어만 저장할 수 있지만 NVMe는 64,000개의 명령어 큐를 가지고 각 큐당 64,000개의 명령어를 가질 수 있습니다. 즉 한꺼번에 1개의 명령어만 처리하던 것을 한번에 최대 64,000개의 명령어를 처리할 수 있게 하여 속도가 빨라지게 되는 것입니다. 현재 NVMe는 1.4b 버전까지 나와 있으며 NVMe, NVMe-oF, NVMe-MI 이 3가지 사양으로 나누어져 있습니다.

  • NVMe Base
    NVMe로 연결된 저장 장치의 명령어 큐를 생성시키고 이 큐로 들어가는 명령어들을 최적화된 경로로 보내줄 수 있는 경로를 제공하는 인터페이스로 데이터 보호, 오류 보고, 가상화 등을 지원합니다.

  • NVMe-oF
    NVMe over Fabric의 약자로 파이버 채널이나 이더넷 프로토콜을 사용하여 사용자 컴퓨터 내부가 아닌 외부의 NVMe 저장 장치를 접근 할 수 있도록 하는 인터페이스입니다.

  • NVMe-MI
    NVMe Management Interface의 약자로 NVMe에 연결된 저장 장치의 모니터링, 업데이트, 펌웨어 검색 등 드라이브 관리를 위한 인터페이스입니다.

이 중 NVMe-oF는 외부에 있는 저장장소에 접근한다는 방식으로 인해 주목을 받는 기술 중 하나입니다. 다만 일반 PC에서는 많이 볼 일이 없으니 생소하실 수도 있을 것 같네요.

기능

NVMe에는 여러 가지 기능들이 존재합니다. 그중 NVMe에서 많이 보이는 기능 몇 가지를 소개해드리도록 하겠습니다.

  • Namespace
    NVMe 사양 정의서를 보면 “호스트 소프트웨어로 접근 가능한 LBA(Logical Block Addresses)의 모음”이라고 적혀있습니다. 뭔가 어려운 것 같지만 파티션 나누듯 SSD 내의 저장 공간을 논리적으로 분할하여 서로 다른 별도의 저장 장치로 보이게 하는 것입니다. 다만 파티션과 조금 다른 점이라면 Namespace로 나눈 곳은 아까 말씀드렸듯 하나의 또 다른 SSD로 인식되어 다시 파티션으로 나눌 수 있다는 점입니다. 이 Namespace는 보통 보안, 복구, 쓰기 성능, 내구성 향상을 위한 프로비저닝 등에 사용하고 있다고 합니다.

  • NVM Sets
    하나 이상의 Namespace와 Namespace로 할당되지 않은 공간을 하나로 묶은 것을 NVM Set이라고 합니다. 이때 한 Namespace가 2개 이상의 NVM Set에 소속될 수 없습니다. 여러 NVM Set들을 하나로 묶은 것을 NVM Sets 라고 합니다.

  • Endurance Group
    Endurance Group은 성능과 수명의 증가를 위해 NVM Sets를 하나로 묶은 것입니다. 먼저 성능의 향상에 대해 설명을 하겠습니다. 예를 들어 TLC로 이루어진 Endurance Group과 SLC로 이루어진 Endurance Group이 있다고 가정합니다. 이때 성능이 필요한 서비스들은 SLC로 이루어진 Endurance Group으로 서비스를 하고 성능보다는 용량이 더 필요한 서비스라면 TLC로 이루어진 Endurance Group으로 서비스 하는것이 훨씬 효율이 높겠네요. 수명 증가에는 웨어 레벨링이라는 기술을 사용하는데 이것은 셀의 수명을 균등하게 하도록 쓰기 횟수가 낮은 셀에 먼저 쓰기를 수행하는 것입니다. 각 Endurance Group은 이 웨어 레벨링을 각 Endurance Group 별로 수행하므로 더욱 효율적인 웨어 레벨링이 가능하다는 이점이 있습니다.

이 외에도 NVMe에는 수많은 기능들이 존재합니다. 버전이 올라갈 때마다 추가되기도 하고 사양마다 또 다른 기능들을 제공하기도 합니다. 제가 NVMe에 대해 찾아보고 공부하면서 가장 많이 보였던 기능들을 조금 적어봤는데 도움이 되셨으면 좋겠습니다. 다음 포스팅에서는 2020년 9월 Storage Developer Conference에서 소개된 NVMe 2.0에 대해 써볼까 합니다. 그럼 다음 포스팅에서 만나요~

 

[출처]
플래시 메모리 구조 : https://mikrokontroler.pl/2018/01/26/zrozumiec-pamiec-flash/
SLC, MLC : http://cappleblog.co.kr/