가상화·컨테이너 호스팅에서 “스토리지 분리”가 표준이 된 지 오래입니다. 전통적으로 iSCSI나 NFS를 썼지만, 둘 다 현대 NVMe SSD의 잠재력을 충분히 끌어내지 못합니다. 그 자리를 NVMe over Fabrics (NVMe-oF), 특히 NVMe over TCP가 채우고 있습니다.


NVMe-oF란

NVMe(원래 PCIe 로컬 프로토콜)를 네트워크로 확장한 표준입니다. 전송 계층(transport)에 따라 세 가지가 있습니다.

Transport 특징 필요 하드웨어
NVMe/RDMA (RoCE·iWARP) 최저 지연 (수μs) RDMA NIC, 무손실 네트워크
NVMe/FC 데이터센터 스토리지 표준 광채널 인프라
NVMe/TCP 일반 이더넷 동작 일반 NIC + 일반 스위치

NVMe/TCP는 일반 이더넷에서 동작해 도입 장벽이 가장 낮습니다. 지연은 NVMe/RDMA보다 약간 높지만(수십 μs 수준), 일반 SAN(iSCSI)보다는 훨씬 낮습니다.


iSCSI와 NVMe/TCP 비교

같은 네트워크 위에서 동작하는데 왜 NVMe/TCP가 더 빠른가?

항목 iSCSI NVMe/TCP
명령 큐 SCSI 단일 큐 NVMe 멀티큐 (코어당)
명령 셋 SCSI 변환 오버헤드 네이티브 NVMe
인터럽트 전통적 인터럽트 polling/MSI-X
지연 ~수백 μs ~수십 μs
처리량 (10GbE) 800k IOPS 수준 1M+ IOPS
CPU 사용량 높음 상대적으로 낮음

핵심은 명령 큐 구조입니다. SCSI는 단일 큐 모델이지만 NVMe는 처음부터 멀티큐로 설계되어 멀티코어에서 진가를 발휘합니다.


동작 원리

[클라이언트 VM/서버]
   nvme-tcp 커널 드라이버
   ↓
   /dev/nvme0n1 (로컬 디스크처럼 보임)
   ↓
   TCP/IP 위로 NVMe 명령 전송 (포트 4420)
   ↓
[스토리지 서버]
   nvmet-tcp 타겟
   ↓
   실제 NVMe SSD 풀

VM/컨테이너 입장에서는 로컬 NVMe와 구분이 안 됩니다. 파일시스템(ext4·xfs·ZFS)·LVM·DB 모두 그대로 동작합니다.


실전 — Linux에서 NVMe/TCP 구성

1) 타겟(스토리지 서버) 측

커널 5.0+ 필요. 보통 6.x 권장.

modprobe nvmet
modprobe nvmet-tcp

# 서브시스템 생성
mkdir /sys/kernel/config/nvmet/subsystems/nvme-subsys1
cd /sys/kernel/config/nvmet/subsystems/nvme-subsys1
echo 1 > attr_allow_any_host

# 네임스페이스 (실제 디스크 노출)
mkdir namespaces/1
cd namespaces/1
echo -n /dev/nvme0n1 > device_path
echo 1 > enable

# TCP 포트 생성
mkdir /sys/kernel/config/nvmet/ports/1
cd /sys/kernel/config/nvmet/ports/1
echo 192.0.2.10 > addr_traddr
echo tcp > addr_trtype
echo 4420 > addr_trsvcid
echo ipv4 > addr_adrfam

# 서브시스템을 포트에 연결
ln -s /sys/kernel/config/nvmet/subsystems/nvme-subsys1 subsystems/

2) 이니시에이터(클라이언트) 측

modprobe nvme-tcp

# 디바이스 검색
nvme discover -t tcp -a 192.0.2.10 -s 4420

# 연결
nvme connect -t tcp -a 192.0.2.10 -s 4420 -n nvme-subsys1

# 확인
nvme list
lsblk
# → /dev/nvme1n1 (또는 비슷한 이름)

이제 /dev/nvme1n1을 로컬 디스크처럼 사용하면 됩니다.


호스팅 환경에서의 활용

1) Hyperconverged → Disaggregated 전환

여러 가상화 노드가 로컬 디스크를 각자 갖는 대신, 스토리지 풀을 분리해 NVMe/TCP로 제공. 디스크와 컴퓨트를 독립적으로 확장 가능.

2) VM 라이브 마이그레이션 속도 향상

VM 디스크가 공유 스토리지에 있으면 라이브 마이그레이션이 빠릅니다. 메모리만 전송하면 됨.

3) Kubernetes CSI 통합

# Storage Class 예시 (Lightbits 같은 NVMe-oF CSI)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nvme-tcp
provisioner: csi.lightbitslabs.com
parameters:
  replicaCount: "2"

4) DB 워크로드 가속

PostgreSQL·MySQL·Cassandra가 분리 스토리지를 거의 로컬과 비슷한 성능으로 사용.


성능 측정

# fio로 NVMe/TCP 디스크 측정
fio --name=randread --filename=/dev/nvme1n1 --rw=randread \
  --bs=4k --iodepth=64 --numjobs=8 --runtime=60 \
  --time_based --group_reporting --direct=1

기대 수치 (10GbE 회선, 1대 타겟):

  • 4K 랜덤 읽기: 200k~1M IOPS
  • 4K 랜덤 쓰기: 100k~400k IOPS
  • 처리량: ~1.1 GB/s (10G 회선 한계)

회선이 25/40/100GbE면 그에 비례해 처리량이 증가합니다.


네트워크 요구사항

NVMe/TCP는 일반 이더넷에서 동작하지만, 최상의 성능을 위해서는:

  • 10GbE 이상 (DB·VM 워크로드)
  • Jumbo Frame (MTU 9000) — 처리량 향상
  • 무손실에 가까운 네트워크 — 패킷 손실에 민감
  • 별도 스토리지 VLAN — 데이터 트래픽과 격리
  • 이중화 (LACP·MLAG) — 다운타임 방지
# MTU 9000 설정
ip link set dev eth1 mtu 9000

# 확인
ping -M do -s 8972 192.0.2.10  # 단편화 없이 통과해야 함

운영 함정

1) 네트워크 장애가 곧 스토리지 장애

로컬 디스크와 달리, 네트워크 끊김은 곧바로 I/O 정지. 이중 경로(multipath) 필수.

nvme connect -t tcp -a 192.0.2.10 -s 4420 -n nvme-subsys1
nvme connect -t tcp -a 192.0.2.11 -s 4420 -n nvme-subsys1  # 다른 경로

2) 타임아웃 설정

기본 타임아웃이 짧으면 일시적 네트워크 지연에 디스크가 오프라인.

echo 60 > /sys/block/nvme1n1/queue/io_timeout

3) NUMA 핀

멀티 CPU 서버에서 NIC·CPU·메모리 NUMA 정렬이 안 맞으면 성능 손실. 자세한 건 NUMA·CPU pinning 글 참고.

4) 인증/보안 부족

기본 설정은 인증 없음 — 동일 네트워크 내 누구나 접근 가능. In-band 인증 + 전용 VLAN 필수.

5) 펌웨어/커널 버그

NVMe/TCP는 비교적 새로운 기술이라 일부 NIC·커널 조합에서 패닉·데드락 사례 보고됨. 운영 전 충분한 부하 테스트.


RDMA vs TCP — 어느 쪽?

상황 권장
기존 이더넷 인프라, 적당히 빠른 분리 스토리지 NVMe/TCP
최고 성능 (수 μs 지연), 자금/기술 충분 NVMe/RDMA
데이터센터 표준 인프라 (FC 보유) NVMe/FC

대부분의 일반 호스팅 워크로드에는 NVMe/TCP가 가성비 최강입니다. 거래소·HFT 같은 마이크로초가 돈인 시장에는 RDMA.


NVMe/TCP를 지원하는 솔루션

  • Lightbits Labs — 상용 NVMe/TCP 스토리지 + Kubernetes CSI
  • Pavilion HyperParallel Flash Array — 고성능
  • PURE Storage FlashArray — NVMe/TCP 옵션
  • NetApp — 기존 SAN에 NVMe/TCP 추가
  • 자체 구축 — Linux nvmet-tcp + ZFS 백엔드

오픈소스만으로도 충분히 운영 가능하지만, 멀티 노드 복제·HA·관리 UI까지 직접 구축하려면 노력이 큽니다.


마무리

NVMe/TCP는 “RDMA를 못 하면 iSCSI”라는 옛 공식을 깬 신선한 옵션입니다. 기존 이더넷 + 약간의 커널 설정만으로 로컬에 가까운 분리 스토리지를 구축할 수 있습니다.

호스팅 사업자나 자체 인프라를 운영하는 분이라면 다음 인프라 업그레이드 시 NVMe/TCP를 진지하게 검토할 가치가 있습니다. TCP-80.NET의 전용서버 High-End 플랜은 NVMe + 10GbE 환경을 기본 제공해, NVMe/TCP 실험·운영에 적합합니다.