VRAM을 Swap으로 전환하기: 메모리 제약이 있는 Linux 노트북을 위한 창의적인 솔루션

현대적인 노트북 사용자들에게 "매립형 메모리(soldered memory)"는 흔한 불만 사항입니다. 물리적 RAM의 한계에 도달하여 시스템이 SSD로 스와핑을 시작하면 성능이 눈에 띄게 저하됩니다. zram이 훌륭한 압축 버퍼를 제공하지만, CPU 바로 옆에는 종종 활용되지 않은 엄청난 잠재력이 자리 잡고 있습니다. 바로 NVIDIA GPU의 비디오 램(VRAM)입니다.

nbd-vram은 유휴 VRAM을 Linux의 스와프 장치로 노출시켜 이를 활용하도록 설계된 영리한 유틸리티입니다. 이는 업그레이드가 불가능한 기기에서 특히 가치가 있으며, 물리적 RAM과 디스크 기반 스와프 사이에 VRAM을 계층화함으로써 사용자가 주소 지정 가능한 메모리를 실질적으로 세 배까지 늘릴 수 있게 해줍니다.

작동 원리: NBD 브리지

VRAM을 스와프로 구현하는 것은 놀라울 정도로 어렵습니다. NVIDIA가 소비자용 GeForce 카드에서 CPU의 VRAM 직접 접근을 제한하기 때문입니다. BAR1에 페이지를 고정하기 위해 NVIDIA P2P API를 사용하는 "당연한" 경로는 소비자용 하드웨어에서는 일반적으로 EINVAL을 반환합니다. 이 기능은 Quadro 및 데이터센터용 SKU에 제한되어 있기 때문입니다.

이러한 하드웨어 및 드라이버 제한을 우회하기 위해 nbd-vramNetwork Block Device (NBD) 프로토콜을 사용합니다. 커널이 VRAM을 네이티브 메모리로 인식하도록 강제하는 대신, 이 도구는 다음과 같은 작업을 수행하는 작은 데몬을 사용합니다:

  1. CUDA 드라이버 API를 통해 VRAM을 할당합니다.
  2. Unix 소켓을 통한 NBD를 사용하여 해당 할당량을 블록 장치로 제공합니다.
  3. 커널의 내장 nbd 드라이버를 해당 소켓에 연결하여 /dev/nbdX에서 장치를 노출합니다.

이것은 다음과 같은 데이터 경로를 생성합니다: Kernel Swap Subsystem $\rightarrow$ /dev/nbdX $\rightarrow$ NBD Kernel Driver $\rightarrow$ Unix Socket $\rightarrow$ nbd-vram Daemon $\rightarrow$ cuMemcpyHtoD/DtoH $\rightarrow$ GPU VRAM.

표준 CUDA 메모리 복사 및 NBD 프로토콜에 의 Rely on 하기 때문에, 커스텀 커널 모듈이 필요하지 않으며 커널이나 드라이버 업데이트 시에도 재빌드 없이 생존합니다.

성능 및 메모리 계층 구조

일반적인 설정(RTX 3070 Laptop에서 테스트됨)에서 저자는 약 1.3 GB/s의 순차적 처리량을 보고합니다. 이는 PCIe 버스의 이론적 최대치보다 느리지만, 메모리 계층 구조에서 전략적인 계층으로 자리 잡습니다.

효율성을 극대화하기 위해 저자는 다음과 같은 특정 오버플로 순서를 제안합니다:

  1. Physical RAM: 가장 빠른 계층.
  2. VRAM Swap: 초기 유출을 흡수합니다 (빠른 PCIe 액세스).
  3. zram: CPU를 사용하여 남은 데이터를 압축합니다.
  4. SSD Swap: 모든 다른 옵션이 고갈되었을 때의 마지막 수단.

VRAM 스와프의 우선순위를 SSD보다 높게 설정함으로써, 시스템은 디스크에 접근하기 전에 GPU의 메모리를 활용합니다.

기술적 트레이드오프 및 커뮤니티 관점

이 프로젝트는 실용성에 관해 Linux 및 하드웨어 커뮤니티 사이에서 활발한 토론을 불러일으켰습니다.

지연 시간 vs 처리량 논쟁

일부 사용자들은 1.3 GB/s가 PCIe 4.0 x16 또는 NVMe 드라이브의 원시 가공 능력과 비교했을 때 상대적으로 낮다고 지정했습니다. 한 댓글 작성자는 다음과 같이 언급했습니다:

"This RTX 3070 chip is on PCIe 4.0 x16 which should give 64GB/s... Swapping to an NVMe drive would be twice as fast, but with higher latency."

하지만 여기서의 주요 이점은 반드시 원시 순차적 처리량이 아니라, 전통적인 디스크 I/O와 비교했을 때의 지연 시간을 줄이고, 그렇지 않으면 유휴 상태로 남을 메모리를 활용한다는 점입니다.

안정성 및 리소스 경합쟁

또 다른 중요한 고려 사항은 "백프레셔(backpressure)"입니다. VRAM은 디스플레이 컴포지터와 GPU 가속 애플리케이션과 공유되므로, 스와프를 위해 큰 덩어리를 할당하는 것은 렌더링에 필요한 GPU 메모리를 고갈시킬 수 있습니다. 이는 X11보다 할당이 더 동적인 Wayland 사용자들에게 특히 관련이 있으며, VRAM이 너무 낮아지면 데스크톱 환경이 충돌할 수 있습니다 있습니다.

대안 및 관련 프로젝트

커뮤니티는 다음과 같은 유사한 목표를 달성하기 위한 다른 시도들을 강조했습니다:

  • nbdkit-vram-plugin: OpenCL API를 사용하여 AMD GPU를 지원하는 유사한 방식.
  • vramfs: OpenCL 기반의 FUSE 파일 시스템 구현.
  • GpuRamDrive: Windows 기반의 VRAM으로부터 가상 드라이브를를 만드는 Proof of Concept.

결론

nbd-vram은 특정 문제인 "매립형 RAM 트랩"을 해결하기 위한 틈새 시장이지만 독창적인 솔루션루션입니다. 전용 RAM 업그레이드가 이를 대체할 수 없을지라도, 이는 비싼 유휴 리소스를 시스템 메모리의 기능적 확장으로 변환합니다. 고-VRAM GPU를 보유하고 시스템 RAM이 제한된 개발자나 파워 유저들에게, 이는 하드웨어웨어의 마지막 한 바이트까지 유틸리티를 쥐어짜낼 수 있는 창의적인 방법입니다.

Sources