Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

28장. 영구 메모리: NVDIMMs

스토리지 클래스 메모리라고도 하는 영구 메모리(pmem)는 메모리와 스토리지의 조합입니다. PMEM은 스토리지 내구성과 낮은 액세스 대기 시간 및 높은 대역폭의 DRAM(Dynamic RAM)을 결합합니다.
  • 영구 메모리는 바이트 주소 지정 가능이므로 CPU 로드 및 저장 지침을 사용하여 액세스할 수 있습니다. 기존 블록 기반 스토리지에 액세스하는 데 필요한 read() 또는 write() 시스템 호출 외에도 pmem 에서는 직접 로드 및 저장 프로그래밍 모델도 지원합니다.
  • 영구 메모리의 성능 특성은 일반적으로 10과 수백의 나노초에서 매우 낮은 액세스 대기 시간이 있는 III와 유사합니다.
  • 영구 메모리의 콘텐츠는 전원이 꺼져 있을 때 스토리지처럼 보존됩니다.

영구 메모리 사용은 다음과 같은 사용 사례에 유용합니다.

신속한 시작: 데이터 세트가 이미 메모리에 있습니다.
빠른 시작은 웜 캐시 효과라고도 합니다. 시작 후 파일 서버에 메모리의 파일 콘텐츠가 없습니다. 클라이언트가 데이터를 연결하고 읽을 때 해당 데이터는 페이지 캐시에 캐시됩니다. 결국 캐시에는 주로 핫 데이터가 포함됩니다. 재부팅 후 시스템이 프로세스를 다시 시작해야합니다.
영구 메모리를 사용하면 애플리케이션이 제대로 설계된 경우 재부팅 후에도 애플리케이션이 웜 캐시를 유지할 수 있습니다. 이 경우 페이지 캐시가 연결되지 않습니다. 애플리케이션은 영구 메모리에서 직접 데이터를 캐시합니다.
빠른 쓰기 캐시
파일 서버는 데이터가 내구성 있는 미디어에 있을 때까지 클라이언트의 쓰기 요청을 확인하지 않는 경우가 많습니다. 영구 메모리를 빠른 쓰기 캐시로 사용하면 파일 서버에서 pmem 의 짧은 대기 시간으로 인해 쓰기 요청을 신속하게 승인할 수 있습니다.

NVDIMMs Interleaving

비 Volatile Dual In-line Memory Module (NVDIMMs)은 일반 DASD와 동일한 방식으로 인터리브 세트로 그룹화할 수 있습니다. 인터리브 세트는 여러 DIMM에 RAID 0(stripe)과 같습니다.
다음은 NVDIMMS 상호 작용의 이점입니다.
  • NVDIMM과 마찬가지로 NVDIMM은 interleave 집합으로 구성될 때 성능을 향상시킬 수 있습니다.
  • 여러 개의 작은 NVDIMM을 하나의 더 큰 논리 장치로 결합하는 데 사용할 수 있습니다.
시스템 BIOS 또는 UEFI 펌웨어를 사용하여 상호 집합을 구성합니다.
Linux에서는 interleave 세트별로 하나의 지역 장치가 생성됩니다.
다음은 리전 장치와 레이블 간의 관계입니다.
  • ECDHENVDIMMs에서 라벨을 지원하는 경우 지역 장치를 네임스페이스로 더 세분화할 수 있습니다.
  • NVDIMMs에서 라벨을 지원하지 않는 경우 리전 장치에는 단일 네임스페이스만 포함할 수 있습니다. 이 경우 커널은 전체 리전을 다루는 기본 네임스페이스를 생성합니다.

영구 메모리 액세스 모드

섹터,fsdax,devdax (device direct access) 또는 raw 모드에서 영구 메모리 장치를 사용할 수 있습니다.
섹터 모드
스토리지를 빠른 블록 장치로 제공합니다. 섹터 모드를 사용하면 영구 메모리를 사용하도록 수정되지 않은 레거시 애플리케이션 또는 장치 매퍼를 포함하여 전체 I/O 스택을 사용하는 애플리케이션에 유용합니다.
fsdax 모드
이를 통해 영구 메모리 장치는 SNIA(Storage Networking Industry Association) NVMe( Non-Volatile Memory) 프로그래밍 모델 사양에 설명된 대로 직접 액세스 프로그래밍을 지원할 수 있습니다. 이 모드에서는 I/O가 커널의 스토리지 스택을 무시하고 많은 장치 매퍼 드라이버를 사용할 수 없습니다.
devdax 모드
devdax (device DAX) 모드는 DAX 문자 장치 노드를 사용하여 영구 메모리에 대한 원시 액세스를 제공합니다. devdax 장치의 데이터는 CPU 캐시 플러시 및 펜싱 명령을 사용하여 내구성을 유지할 수 있습니다. 특정 데이터베이스 및 가상 머신 하이퍼바이저는 devdax 모드의 이점을 누릴 수 있습니다. 장치 devdax 인스턴스에서 파일 시스템을 만들 수 없습니다.
원시 모드
원시 모드 네임스페이스에는 몇 가지 제한 사항이 있으며 사용해서는 안 됩니다.

28.1. ndctl을 사용하여 영구 메모리 구성

ndctl 유틸리티를 사용하여 영구 메모리 장치를 구성합니다. ndctl 유틸리티를 설치하려면 다음 명령을 사용합니다.
# yum install ndctl

절차 28.1. 라벨을 지원하지 않는 장치에 대한 영구 메모리 구성

  1. 시스템에서 사용 가능한 pmem 리전을 나열합니다. 다음 예에서 명령은 레이블을 지원하지 않는 NVDIMM-N 장치를 나열합니다.
    # ndctl list --regions
    [
      {
        "dev":"region1",
        "size":34359738368,
        "available_size":0,
        "type":"pmem"
      },
      {
        "dev":"region0",
        "size":34359738368,
        "available_size":0,
        "type":"pmem"
      }
    ]
    
    Red Hat Enterprise Linux는 NVDIMM-N 장치가 레이블을 지원하지 않기 때문에 각 지역에 대해 기본 네임스페이스를 생성합니다. 따라서 사용 가능한 크기는 0바이트입니다.
  2. 시스템의 모든 비활성 네임스페이스를 나열합니다.
    # ndctl list --namespaces --idle
    [
      {
        "dev":"namespace1.0",
        "mode":"raw",
        "size":34359738368,
        "state":"disabled",
        "numa_node":1
      },
      {
        "dev":"namespace0.0",
        "mode":"raw",
        "size":34359738368,
        "state":"disabled",
        "numa_node":0
      }
    ]
    
  3. 이 공간을 사용하도록 비활성 네임스페이스를 재구성합니다. 예를 들어 DAX를 지원하는 파일 시스템에 namespace0.0 을 사용하려면 다음 명령을 사용합니다.
    # ndctl create-namespace --force --reconfig=namespace0.0 --mode=fsdax --map=mem 
    {
      "dev":"namespace0.0",
      "mode":"fsdax",
      "size":"32.00 GiB (34.36 GB)",
      "uuid":"ab91cc8f-4c3e-482e-a86f-78d177ac655d",
      "blockdev":"pmem0",
      "numa_node":0
    }
    

절차 28.2. 레이블을 지원하는 장치에 대한 영구 메모리 구성

  1. 시스템에서 사용 가능한 pmem 리전을 나열합니다. 다음 예에서 명령은 레이블을 지원하는 NVDIMM-N 장치를 나열합니다.
    # ndctl list --regions
    [
      {
        "dev":"region5",
        "size":270582939648,
        "available_size":270582939648,
        "type":"pmem",
        "iset_id":-7337419320239190016
      },
      {
        "dev":"region4",
        "size":270582939648,
        "available_size":270582939648,
        "type":"pmem",
        "iset_id":-137289417188962304
      }
    ]
    
  2. NVDIMM 장치가 라벨을 지원하는 경우 기본 네임스페이스는 생성되지 않으며 --force 또는 --reconfigure 플래그를 사용하지 않고 리전에서 하나 이상의 네임스페이스를 할당할 수 있습니다.
    # ndctl create-namespace --region=region4 --mode=fsdax --map=dev --size=36G
    {
      "dev":"namespace4.0",
      "mode":"fsdax",
      "size":"35.44 GiB (38.05 GB)",
      "uuid":"9c5330b5-dc90-4f7a-bccd-5b558fa881fe",
      "blockdev":"pmem4",
      "numa_node":0
    }
    
    이제 동일한 리전에서 다른 네임스페이스를 생성할 수 있습니다.
    # ndctl create-namespace --region=region4 --mode=fsdax --map=dev --size=36G
    {
      "dev":"namespace4.1",
      "mode":"fsdax",
      "size":"35.44 GiB (38.05 GB)",
      "uuid":"91868e21-830c-4b8f-a472-353bf482a26d",
      "blockdev":"pmem4.1",
      "numa_node":0
    }
    
    다음 명령을 사용하여 동일한 리전에서 다른 유형의 네임스페이스를 생성할 수도 있습니다.
    # ndctl create-namespace --region=region4 --mode=devdax --align=2M --size=36G
    {
      "dev":"namespace4.2",
      "mode":"devdax",
      "size":"35.44 GiB (38.05 GB)",
      "uuid":"a188c847-4153-4477-81bb-7143e32ffc5c",
      "daxregion":
      {
        "id":4,
        "size":"35.44 GiB (38.05 GB)",
        "align":2097152,
        "devices":[
          {
            "chardev":"dax4.2",
            "size":"35.44 GiB (38.05 GB)"
          }]
      },
        "numa_node":0
    }
    
ndctl 유틸리티에 대한 자세한 내용은 man ndctl 을 참조하십시오.