NETWORK STORAGE · 2026-11-01

NVMe/TCP 연결과 큐

대상을 발견한 것, Admin 큐를 연결한 것, 데이터 I/O를 보낼 수 있는 것은 각각 다른 단계입니다.

Discovery 성공은 데이터 경로 준비 완료가 아닙니다

nvme-cli의 discover 문서에서 Discovery Controller는 접속할 대상의 주소와 subsystem NQN 등을 Discovery Log Page로 알려줍니다. 호스트는 그 정보로 데이터용 I/O Controller에 연결할 수 있습니다. Discovery Controller의 Admin 연결과 I/O Controller의 Admin 연결을 같은 것으로 세지 않습니다.

일반적인 발견 후 연결 흐름 · 자체 도식
Discovery Admin 연결
  → 주소·subsystem NQN 확인
  → I/O Controller Admin 연결
  → 필요한 I/O 큐 연결
  → 해당 큐에서 Read/Write

NVMe over TCP Transport 1.3 §3.1의 일반적인 non-kickstart 연결은 TCP 연결, 구성에 따른 TLS 핸드셰이크, ICReq·ICResp, NVMe-oF Connect 요청·응답을 구분합니다. TLS는 모든 구성에서 필수인 단계가 아닙니다. Kickstart Discovery는 별도 절차이며 이 도식으로 모든 인증·재연결·Discovery 변형이나 세부 Admin 명령 순서를 설명하지 않습니다.

한 연결은 SQ/CQ 한 쌍에 대응합니다

같은 규격 §3.2에서 NVMe/TCP 연결 하나는 Admin 또는 I/O Submission Queue와 Completion Queue 한 쌍에 연관됩니다. 여러 큐 쌍을 연결 하나에 다중화하거나 한 큐 쌍을 여러 연결에 걸쳐 나누는 구조가 아닙니다. TCP 패킷 하나가 큐 하나라는 뜻도 아닙니다.

예를 들어 한 I/O Controller의 Admin 큐와 I/O 큐 네 쌍이 연결되어 있다면 이들의 연결은 다섯 개입니다. Discovery 연결을 계속 유지하는지, 다른 컨트롤러·경로가 있는지는 별도로 봐야 합니다. “Discovery가 있었으니 항상 여섯 연결이 동시에 존재한다”는 계산은 성립하지 않습니다.

요청한 큐 수와 실제 연결된 큐 수는 다를 수 있습니다

Linux v6.18 fabrics.c는 기본 nr_io_queues를 온라인 CPU 수로 정하고 사용자가 지정한 수도 온라인 CPU 수로 제한합니다. Discovery Controller에는 이 I/O 큐 수 옵션을 적용하지 않습니다. 이것은 Linux 해당 버전의 구현이지 모든 운영체제의 규격 기본값이 아닙니다.

v6.18의 nvme_set_queue_count()는 Number of Queues 기능의 응답을 받아 요청 수와 컨트롤러 할당 수 중 작은 수를 사용합니다. 이후 실제 연결 성공 여부까지 확인해야 합니다. --nr-io-queues와 --queue-size도 각각 큐 수와 큐 깊이로, 같은 값이 아닙니다.

원자료의 “64k”라는 상한 표현과 그림의 “64”라는 예시는 특정 서버의 관측값으로 사용하지 않습니다. 이 글은 현행 Base 규격의 최대 큐 수를 새로 주장하지 않습니다.

어느 연결의 어느 단계에서 멈췄는지 확인합니다

  1. Discovery 결과의 주소·NQN과 다음 접속 대상을 대조합니다.
  2. 대상별 TCP, 선택한 TLS, IC 교환, Connect 응답을 분리합니다.
  3. I/O Controller의 Admin 연결 뒤 요청·할당 큐 수와 각 I/O 큐 연결 상태를 확인합니다.
  4. 큐가 연결된 다음의 경로 선택은 multipath 정책과 구분해 조사합니다.

PCI endpoint NVMe target의 BAR·DMA 설정은 TCP 연결 절차가 아닙니다. 공통 Admin·I/O 용어가 있다고 서로 다른 transport의 초기화를 섞지 않습니다.

출발점은 Kamal Bakshi의 세션 흐름 게시물과 보존 원고 #418입니다. 이 글은 규격과 소스의 해당 구간을 읽은 설명이며 실제 NVMe 연결·벤치마크를 수행하지 않았습니다. 별도 치트시트 이미지의 작은 표나 업체 성능 주장은 반영하지 않았습니다.

English summary. Discovery, the I/O controller's Admin connection and its I/O queue connections are different stages. Requested queues, granted queues, connected queues and queue depth must not be conflated.