nvme 네임스페이스란 무엇입니까? 어떻게 작동하나요?

nvme 네임스페이스란 무엇입니까? 어떻게 작동하나요?

최근 nvme SSD가 내장된 장치에서 Linux 설치를 지원하기 시작했습니다. 장치 파일에 드라이브 문자와 파티션 번호를 식별하는 숫자 외에 추가 숫자가 있는 것을 발견했습니다. IDE/SATA/SCSI 드라이브에는 일반적으로 드라이브 문자와 파티션 문자만 있습니다.

예: /dev/nvme0n1p2

n1 부분이 무엇인지 궁금했는데 검색을 좀 해보니 nvme "네임스페이스"를 식별하는 것처럼 보였습니다. 그 정의는 약간 모호합니다. "NVMe 네임스페이스는 논리 블록으로 포맷할 수 있는 비휘발성 메모리(NVM)의 양입니다."

그렇다면 이는 MBR이나 GPT 파티션 테이블이 아닌 하드웨어 컨트롤러 수준에서 정의된 파티션과 비슷합니까? 네임스페이스가 여러 물리적 NVME SSD에 걸쳐 있을 수 있나요? 예를 들어 RAID 0과 유사하게 여러 SSD의 스토리지를 논리적 네임스페이스로 집계하는 네임스페이스를 생성할 수 있습니까?

여러 볼륨(예: ZFS, Btrfs 등)을 관리할 수 있는 파티션 테이블이나 LVM 또는 파일 시스템을 사용하여 불가능한 NVME 네임스페이스로 무엇을 합니까?

또한 네임스페이스 번호가 0이 아닌 1에서 시작하는 것처럼 보이는 이유는 무엇입니까? 이는 NVME가 낮은 수준에서 네임스페이스 번호를 추적하는 방법과 관련이 있습니까(예: 파티션도 0이 아닌 1에서 시작합니다. 파티션 번호에 대한 표준이 설정되는 방식이므로 Linux 커널은 디스크에 저장된 모든 파티션 번호를 사용합니다) ) 네 - nvme도 같은 방식으로 작동하는 것 같은데요? )

답변1

NVM Express 및 관련 표준에서 컨트롤러는 하나 이상의 네임스페이스로 분할된 스토리지에 대한 액세스를 제공합니다. 네임스페이스를 생성하고 삭제할 수 있습니다.통과하다공간이 있고(또는 기본 스토리지가 씬 프로비저닝을 지원하는 경우) 여러 컨트롤러가 공유 네임스페이스에 대한 액세스를 제공할 수 있는 한 컨트롤러입니다. 내가 아는 한, 표준은 기본 저장소가 구성되는 방식을 지정하지 않습니다.

그러나 일반적인 NVMe SSD는 각각 PCI Express 포트에 연결된 자체 스토리지와 컨트롤러를 제공하고 액세스 포인트는 네임스페이스 위에 있는 컨트롤러이므로 그룹화할 수 없습니다. 따라서 네임스페이스는 여러 컨트롤러(여러 컨트롤러)를 그룹화할 수 없습니다.할 수 있는공유 네임스페이스에 대한 액세스를 제공합니다. 엔터프라이즈 스토리지(SAN 등)에 사용되는 SCSI LUN과 유사한 네임스페이스를 생각하는 것이 가장 좋습니다.

네임스페이스 번호 지정은 1부터 시작합니다. 왜냐하면 각 컨트롤러의 네임스페이스 식별자가 작동하는 방식이기 때문입니다. 네임스페이스에는 전역적으로 고유한 식별자가 더 길어집니다.

다음 명령을 사용하여 네임스페이스를 조작할 수 있습니다.nvme다음을 포함하여 낮은 수준의 NVMe 기능을 지원하는 명령입니다.

  • 낮은 수준의 포맷을 수행하고 다양한 기능(보안 삭제, LBA 포맷 선택...)을 사용할 수 있게 해주는 포맷
  • 연결 및 분리를 통해 컨트롤러가 네임스페이스에 연결하거나 네임스페이스에서 분리할 수 있습니다(지원하고 네임스페이스에서 허용하는 경우).

노트북 또는 데스크톱 NVMe 드라이브에서는 연결 및 분리가 발생하지 않습니다. 과거의 iSCSI SAN을 대체하는 Dell EMC에서 판매하는 것과 같은 NVMe 스토리지 베이와 함께 사용할 수 있습니다.

바라보다NVM 익스프레스 표준자세한 내용은 (상대적으로 읽기 쉽습니다)이 NVM Express 튜토리얼에서는좋은 소개입니다.

답변2

~에서말 입:

호스트 소프트웨어가 NVMe SSD를 네임스페이스로 분할하려는 이유에는 논리적 격리, 멀티 테넌시, 보안 격리(네임스페이스별 암호화), 복구 목적을 위한 쓰기 보호 네임스페이스, 쓰기 성능 향상을 위한 과잉 프로비저닝, 무엇보다도 내구성.

nvme예를 들어 다음을 통해 명령을 사용하여 네임스페이스가 지원하는 기능을 확인할 수 있습니다 .

# nvme id-ns -H /dev/nvme0n1  
NVME Identify Namespace 1
[..]
LBA Format  0 : Metadata Size: 0   bytes - Data Size: 512 bytes
                                         - Relative Performance: 0x2 Good (in use)
LBA Format  1 : Metadata Size: 0   bytes - Data Size: 4096 bytes
                                         - Relative Performance: 0x1 Better

다음과 같이 장치가 지원하는 네임스페이스 수를 확인할 수 있습니다.

# nvme id-ctrl -H /dev/nvme0 | grep nn 
nn        : 1

보고 있다NVMe 기본 사양 1.4b, 유효한 NSID를 0보다 크게 정의합니다.

유효한 NSID는 NVM 하위 시스템 내에 존재하는 네임스페이스를 참조하는 데 사용할 수 있는 가능한 NSID의 범위입니다. NSID가 0h이거나 식별 컨트롤러 데이터 구조에 보고된 네임스페이스 필드 수보다 크지 않은 한 모든 NSID는 유효합니다(그림 251 참조). NSID FFFFFFFFh는 모든 네임스페이스를 지정하는 브로드캐스트 값입니다. 잘못된 NSID는 유효한 NSID도 아니고 브로드캐스트 값도 아닌 모든 값입니다.

(섹션 6.1.2 유효 및 유효하지 않은 NSID)

0을 잘못된 값으로 사용하면 0을 사용하여 네임스페이스 ID 배열을 종료할 수 있다는 이점이 있습니다(섹션 4.10 네임스페이스 목록 참조).

관련 정보