안녕하세요
지금 LMCache를 하고있지만, 하고있는 연구가 스토리지도 같이 봐야하는 연구라서 한번 정리해보려고 합니다.
RAM

RAM은 빠르게 접근 가능하지만, 비용이 비싸다.
휘발성이라 컴퓨터를 끄면 날아간다는 특징을 가지고 있다.
DRAM
SRAM과 DRAM의 차이를 알아보겠다.
DRAM은 1 트랜지스터와 1 커페시터로 구성되어있다.
트랜지스터는 커패시터에 접근을 제어하는 스위치 역할을 하고, 커페시터는 전하를 저장하는 저장소 역할을 한다.
DRAM은 단위 셀의 구조가 단순하고 집적도가 높아 고용량이 가능하지만, 전원 공급시에도 데이터가 손실되는 휘발성의 특징을 가진다.
SRAM보다는 느리지만 충분히 빠르다고 볼 수 있다.
HBM
HBM은 GPU에 붙어있는 DRAM으로 고대역폭 초고속 메모리다. 따라서 다량의 데이터 처리와 고속 데이터 전송이 가능하다.
HBM은 여래개의 실리콘 메모리 칩을 수직으로 적층시켜 메모리 용량을 크게 늘리고, 정보 전달 거리를 줄여 데이터 전송 속도를 대폭 향상시킨다.
DDR DRAM
DDR DRAM은 주로 cpu가 사용하는 DRAM이다.
우리가 흔히 말하는 16GB, 32GB..이 대부분 DDR 메모리이다.
Double Data Rate의 약자로 한 클럭에서 두번 데이터를 전송하는 메모리이다.
SRAM
SRAM은 6개의 트랜지스터를 사용해서 속도가 매우 빠르고, 안정적이다.
하지만 비싸고, 용량이 작다.
SRAM은 전원공급이 중단되지 않는 한, 데이터가 유지된다.
따라서 보통 캐시에는 SRAM을 사용하고, 주기억장치로는 DRAM을 사용한다.
SSD
다음은 SSD 관련 구성요소를 살펴보려고 한다.

기본적으로 ssd는 이렇게 생겼다.
이전에는 SSD는 NAND만 가지고 있는 줄 알았는데 생각보다 뭐가 많다.
일단 호스트에서 SSD에 접근하는 과정부터 보겠다.
DMA

원래는 입출력장치(ssd, 프린터 등등)과 메모리 사이에서 데이터를 주고 받으려면 cpu가 이를 제어해야 했다. 이렇게 하다보니 CPU 부담이 커졌다.
따라서 CPU를 거치지 않고, 데이터를 주고받을 수 있도록 하는 방식이 나왔는데 이게 DMA 방식이다.
DMA 방식을 쓰기 위해서는 DMA 컨트롤러라는 하드웨어가 필요하다.
RDMA
현재 논문에서 RDMA가 많이 언급되어서 알아봤다.
RDMA는 DMA 개념을 네트워크로 확장한 기술이다.
RDMA NIC를 사용해서 서로 다른 서버의 메모리에 직접 접근이 가능하다.
따라서 서버 A가 서버 B의 메모리에 직접 read/write 할 수 있다.
예를들어, LLM이 prefill 서버와 decode 서버를 분리한 구조로 돌아간다고 했을 때,
prefill gpu -> RDMA -> decode gpu
과정으로 데이터 이동이 가능하다.
위에서 DMA 방식을 사용한다는 것은 cpu dram이랑 데이터를 주고받을 때 사용되는 것이 아닌가 라는 생각을 했는데, RDMA에서 gpu-> gpu로 통신을 하는 것을 보고 알아보니,
NVIDIA에서 GPU Direct라는 기술을 만들어서 RAM을 거치지 않고 HBM끼리 데이터를 주고받을 수 있는 RDMA 기술을 만들었다고 합니다.
PCIe

위 과정에서 시스템 버스를 쓴다면, DMA 컨트롤러의 사용빈도가 늘어나서 그만큼 CPU가 시스템 버스를 사용하지 못한다.
PCIe는 DMA 컨트롤러와 장치 컨트롤러가 시스템 버스를 사용하지 않고, 데이터를 주고받을 수 있도록 만들어진 버스이다.
NVMe
고도로 병렬화된 데이터 전송을 위한 프로토콜로, 입출력 작업당 시스템 오버헤드를 줄였으며, 플래시 스토리지 시스템과 SSD에서 사용된다.
SSD를 탑재한 서버, PC의 성능 향상과 설계 유연성을 높일 수 있도록 만든 PCIe 인터페이스 기반 프로토콜이다.(PCIe를 통해서 연결됨)
NVMe는 수많은 병렬 명령 대기열을 처리할 수 있다.
NVMe SSD
NVMe SSD는 NVME를 사용하는 초고속 저장 장치이다.
Controller
실제 데이터를 읽고 쓰는 부분이다.
만약 NVMe SSD라면 SSD controller가 NVMe 프로토콜을 정리한다.
아래서 나올 NAND 플래시에 데이터를 읽고 쓰는 것을 controller가 해준다고 보면 된다.
DRAM
ssd에도 DRAM이 존재한다.
보통 드라이브에 데이터를 쓸 때 캐시로, SSD의 NAND 플래시 메모리 셀 전체에서 데이터가 저장되는 위치를 나타내는 디지털 맵으로, SSD와 장치 프로세서 간의 통신 프로토콜을 처리하는 중재자 역할을 한다.
DRAM이 없는 SSD도 있다. 가격이 저렴하지만, 속도는 훨씬 느리다.
NAND
예전에는 원평 판 모양의 HDD(하드디스크)를 많이 사용했지만 최근에는 플래시 메모리를 사용한다.
플래시 메모리는 전기적으로 데이터를 읽고 쓸 수 있는 반도체 기반 저장장치이다.
NAND는 RAM과 다르게 비휘발성 저장장치이다.
먼저 NAND에서 가장 작은 단위는 셀이다.
크게 SLC, MLC, TLC가 있는데, 각각은 하나의 셀에 1,2,3 개의 비트를 저장할 수 있음을 의미한다.
많은 비트를 저장할 수 있을수록 수명과 속도가 떨어지지만 저렴하다.

더 큰 단위를 알아보겠다.
위에서 말한 셀이 모이면 페이지가 되고, 페이지가 모이면 블럭이 된다.
읽기와 쓰기는 페이지 단위로, 삭제는 블록단위로 이루어진다.

NAND는 데이터 덮어쓰기가 불가능하다. 그래서 만약 A를 삭제하려면 기존 A 페이지를 Invalid 처리한 후, 새 값은 새로 써야한다.
그런데 Invalid 페이지가 많아지면 불필요한 공간 낭비가 생긴다. 이를 위해서 가비지컬렉션을 해야하는데, 이 때 다음과 같이Invalid 페이지를 제외한 블럭 전체를 복사한 후 기존 블럭을 삭제한다.
FTL
FTL은 논리주소를 물리주소로 바꿔주는 역할을 한다.

SSD의 컨트롤러 내에서 동작하며 가상의 논리적 섹터를 생성해서 섹터 기반의 프로그램들이 실제 SSD의 물리적 페이지에 데이터를 기록하도록 도와준다.
애플리케이션에서 사용하는 논리블록 주소는 FTL의 매핑 테이블을 통해 물리주소를 찾아 SSD의 어느 페이지를 참조한다.
저기에서 파일시스템은 애플리케이션과 저장장치 사이에서 파일을 관리하는 소프트웨어 계층이다.
따라서 사용자가 파일 이름으로 특정 데이터에 접근하고자 할 때 파일 이름과 실제 저장 위치(블록)을 연결해준다.

이렇게 만약 프로그램이 3번 페이지를 찾는다고 했을 때, mapping table을 통해서 알맞은 페이지에 접근하도록 돕는다.
CXL이란
다양한 컴퓨팅 자원 간에 저지연, 고대역폭, 캐시 일관성이 보장되는 연결을 제공하기 위한 오픈 인터커넥스 기술이다.
CXL은 하나의 물리적 링크에서 3가지 프로토콜이 동시에 동작하는 멀티프로토콜 아키텍쳐이다.
CXL은 메모리 풀링(pooling)을 지원하는데, 이는 여러 호스트가 동일한 물리적 메모리 풀을 공유할 수 있도록 지원한다.

이게 CXL이 나오지 않았을 때의 기본 구조이다.
각 CPU마다 가까운 메모리를 설치하는데 이 구조를 NUMA라고한다. 이 때 CPU1이 필요한 데이터를 CPU2의 메모리가 가지고 있다면, 오른쪽과 같이 RDMA로 데이터를 전송하는 과정을 거친다.
하지만 이 과정에서는 데이터 복사가 많이 발생하고, CPU 메모리는 load/store 프로토콜을 사용하는 반면, RDMA는 network protocol을 사용해서 프로토콜 변환 오버헤드가 발생한다.

또한 AI 작업이 고도화되면서 개별 서버들이 필요 이상의 컴퓨팅 자원을 장착하는 Over-provisioning 문제와 전력 낭비 문제도 심화되었다.
따라서 다음과 같이 여러 cpu가 하나의 메모리를 공유하는 메모리 중심 구조가 필요해졌다. 이를 위해 CPU와 장치가 메모리를 직접 공유할 수 있도록 하는 인터커넥트 기술인 CXL(Compute Express Link)이 등장하였다.
CXL.io : 초기 장치 설정, 관리, I/O(PCIe와 동일한 기능 수행)
CXL.cache : 캐시 데이터 일관성을 제공한다
-> 여기서 캐시 일관성이란 여러 프로세서나 장치가 같은 데이터를 캐시에 가지고 있을 때, 그 값이 서로 항상 동일하게 유지되도록 보장하는 것이다.
CXL.mem : CPU 장치 메모리를 직접 load/store (메모리 확장, 공유)
CXD
CXL Device란 CXL 인터페이스를 통해 CPU와 연결되는 장치이다.
CPU - CXL link - CXL Device 이렇게 연결된다.
CXL.mem은 load/store 프로토콜을 사용하기 때문에 SSD와 같은 장치를 DRAM처럼 사용하도록 할 수 있다.
https://m.imfnsec.com:442/upload/R_E09/2024/03/[28194458]_240638.pdf=
CXL(Compute Express Link): 차세대 메모리 인터커넥트의 핵심 기술
CXL(Compute Express Link)은 PCIe 기반의 차세대 인터커넥트 기술로, CPU와 가속기 간 메모리 공유 및 캐시 일관성을 지원하여 고성능 컴퓨팅과 데이터 센터 인프라를 혁신합니다.CXL 1.0~3.0을 거치며 메모
courage1.tistory.com
https://blog.naver.com/dkssud0117/222246772410
[반린이의] DRAM, SRAM, Flash meory 비교
독학으로 공부하는 반도체+어린이 언젠가 생길 면접 준비 대비 틀린 것이 있다면 아낌없이 댓글 남겨주세요...
blog.naver.com
https://m.blog.naver.com/techref/223144932845
HBM 이란?:: 고대역폭 초고속 메모리의 구조와 동작 원리
HBM은 고대역폭 초고속 메모리 (High-Bandwidth Memory)의 약어로, 3D 스택형 메모리 기술을 기반으...
blog.naver.com
https://www.ibm.com/kr-ko/think/topics/nvme
NVMe란 무엇인가요? | IBM
비휘발성 메모리 익스프레스(NVMe)는 고도로 병렬화된 데이터 전송을 위한 프로토콜로, 플래시 스토리지 시스템과 솔리드 스테이트 드라이브(SSD)에 사용되는 입/출력 (I/O)당 시스템 오버헤드를
www.ibm.com