Red Hat Training

A Red Hat training course is available for RHEL 8

7.8. NVDIMM에 파일 시스템 DAX 네임스페이스 생성

직접 액세스 기능이 있는 파일 시스템을 지원하도록 시스템에 연결된 NVDIMM 장치를 파일 시스템 DAX 모드에서 구성합니다.

다음 옵션을 고려하십시오.

  • 파일 시스템 DAX 모드로 기존 네임스페이스를 재구성합니다.
  • 사용 가능한 공간이 있는 경우 새 파일 시스템 DAX 네임스페이스를 만듭니다.
중요

파일 시스템 DAX 기술은 기술 프리뷰로만 제공되며 Red Hat에서 지원되지 않습니다.

7.8.1. 파일 시스템 직접 액세스 모드의 NVDIMM

NVDIMM 장치가 파일 시스템 직접 액세스(파일 시스템 DAX, fsdax) 모드로 구성된 경우 파일 시스템을 그 위에 만들 수 있습니다. 이 파일 시스템의 파일에서 mmap() 작업을 수행하는 모든 애플리케이션은 스토리지에 직접 액세스할 수 있습니다. 이를 통해 NVDIMM에서 직접 액세스 프로그래밍 모델을 사용할 수 있습니다.

이제 다음과 같은 새로운 -o dax 옵션을 사용할 수 있으며 필요한 경우 file 속성을 통해 직접 액세스 동작을 제어할 수 있습니다.

-O dax=inode

이는 파일 시스템을 마운트하는 동안 dax 옵션을 지정하지 않는 경우 기본 옵션입니다. 이 옵션을 사용하면 dax 모드를 활성화할 수 있는지 제어하도록 파일에 속성 플래그를 설정할 수 있습니다. 필요한 경우 이 플래그를 개별 파일에 설정할 수 있습니다.

이 플래그를 디렉토리에 설정하고 해당 디렉터리의 모든 파일은 동일한 플래그를 사용하여 생성할 수도 있습니다. 이 속성 플래그는 xfs_io -c 'chattr +x' directory-name 명령을 사용하여 설정할 수 있습니다.

-o dax=never
이 옵션을 사용하면 dax 플래그가 inode 모드로 설정된 경우에도 dax 모드가 활성화되지 않습니다. 즉, per-inode dax 특성 플래그가 무시되고 이 플래그를 사용하여 설정된 파일은 직접 액세스할 수 없습니다.
-O dax=always

이 옵션은 이전 -o dax 동작과 동일합니다. 이 옵션을 사용하면 dax 특성 플래그와 관계없이 파일 시스템의 모든 파일에 대해 직접 액세스 모드를 활성화할 수 있습니다.

주의

추가 릴리스에서는 -o dax 가 지원되지 않을 수 있으며 필요한 경우 -o dax=always 를 대신 사용할 수 있습니다. 이 모드에서는 모든 파일이 직접 액세스 모드에 있을 수 있습니다.

페이지당 메타데이터 할당

이 모드에서는 시스템 DRAM 또는 NVDIMM 장치 자체에서 페이지별 메타데이터를 할당해야 합니다. 이 데이터 구조의 오버헤드는 각 4KiB 페이지당 64바이트입니다.

  • 작은 장치에서 오버헤드의 양은 문제 없이 DRAM에 적합할 수 있을 만큼 작습니다. 예를 들어 16GiB 네임스페이스에는 페이지 구조에 256MiB만 필요합니다. NVDIMM 장치는 일반적으로 작고 비용이 많이 들기 때문에ECDHE에 추적 데이터 구조를 저장하는 것이 좋습니다.
  • 테라바이트 이상의 NVDIMM 장치에서 페이지 추적 데이터 구조를 저장하는 데 필요한 메모리 양이 시스템의 DRAM 양을 초과할 수 있습니다. NVDIMM의 TiB 1개에는 페이지 구조에 16GiB가 필요합니다. 따라서 이러한 경우 NVDIMM 자체에 데이터 구조를 저장하는 것이 좋습니다.

    네임스페이스를 구성할 때 --map 옵션을 사용하여 per-page 메타데이터가 저장되는 위치를 구성할 수 있습니다.

  • 시스템 RAM에 할당하려면 --map=mem 을 사용합니다.
  • NVDIMM에 할당하려면 --map=dev 를 사용합니다.

7.8.2. 기존 NVDIMM 네임스페이스를 파일 시스템 DAX 모드로 재구성

기존 NVMe(Non-Volatile Dual In-line Memory Modules) 네임스페이스를 파일 시스템 DAX 모드로 재구성할 수 있습니다.

주의

네임스페이스를 다시 구성하면 네임스페이스에 이전에 저장된 데이터가 삭제됩니다.

사전 요구 사항

  • The ndctl 유틸리티가 설치되어 있습니다. 자세한 내용은 Installing ndctl 을 참조하십시오.

절차

  1. 시스템의 모든 네임스페이스를 나열합니다.

    # ndctl list --namespaces --idle
    [
      {
        "dev":"namespace1.0",
        "mode":"raw",
        "size":34359738368,
        "uuid":"ac951312-b312-4e76-9f15-6e00c8f2e6f4"
        "state":"disabled",
        "numa_node":1
      },
      {
        "dev":"namespace0.0",
        "mode":"raw",
        "size":38615912448,
        "uuid":"ff5a0a16-3495-4ce8-b86b-f0e3bd9d1817",
        "state":"disabled",
        "numa_node":0
      }
    ]
  2. 네임스페이스를 재구성합니다.

    # ndctl create-namespace --force --mode=fsdax --reconfig=namespace-ID

    예 7.5. 네임스페이스를 파일 시스템 DAX로 재구성

    DAX를 지원하는 파일 시스템에 namespace0.0 을 사용하려면 다음 명령을 사용합니다.

    # ndctl create-namespace --force --mode=fsdax --reconfig=namespace0.0
    {
      "dev":"namespace0.0",
      "mode":"fsdax",
      "map":"dev",
      "size":"11.81 GiB (12.68 GB)",
      "uuid":"f8153ee3-c52d-4c6e-bc1d-197f5be38483",
      "sector_size":512,
      "align":2097152,
      "blockdev":"pmem0"
    }

    이제 /dev/pmem0 경로에서 네임스페이스를 사용할 수 있습니다.

검증

  • 시스템의 기존 네임스페이스가 재구성되었는지 확인합니다.

    # ndctl list --namespace namespace0.0
    [
      {
        "dev":"namespace0.0",
        "mode":"fsdax",
        "map":"dev",
        "size":12681478144,
        "uuid":"f8153ee3-c52d-4c6e-bc1d-197f5be38483",
        "sector_size":512,
        "align":2097152,
        "blockdev":"pmem0"
      }
    ]

추가 리소스

  • the ndctl-create-namespace(1) 도움말 페이지

7.8.3. 파일 시스템 DAX 모드에서 새 NVDIMM 네임스페이스 생성

이 리전에 사용 가능한 공간이 있는 경우 NVMe(Non-Volatile Dual In-line Memory Modules) 장치에서 새 파일 시스템 DAX 네임스페이스를 만들 수 있습니다.

사전 요구 사항

  • The ndctl 유틸리티가 설치되어 있습니다. 자세한 내용은 Installing ndctl 을 참조하십시오.
  • NVDIMM 장치는 라벨을 지원하여 하나의 리전에 여러 네임스페이스를 생성합니다. 다음 명령을 사용하여 확인할 수 있습니다.

    # ndctl read-labels nmem0 >/dev/null
    read 1 nmem

    이는 하나의 NVDIMM 장치의 라벨을 읽을 수 있음을 나타냅니다. 값이 0 인 경우 장치에서 레이블을 지원하지 않음을 나타냅니다.

절차

  1. 사용 가능한 공간이 있는 시스템의 pmem 지역을 나열합니다. 다음 예제에서는 region1region0 리전에서 공간을 사용할 수 있습니다.

    # ndctl list --regions
    [
      {
        "dev":"region1",
        "size":2156073582592,
        "align":16777216,
        "available_size":2117418876928,
        "max_available_extent":2117418876928,
        "type":"pmem",
        "iset_id":-9102197055295954944,
        "badblock_count":1,
        "persistence_domain":"memory_controller"
      },
      {
        "dev":"region0",
        "size":2156073582592,
        "align":16777216,
        "available_size":2143188680704,
        "max_available_extent":2143188680704,
        "type":"pmem",
        "iset_id":736272362787276936,
        "badblock_count":3,
        "persistence_domain":"memory_controller"
      }
    ]
  2. 사용 가능한 리전 중 하나에 하나 이상의 네임스페이스를 할당합니다.

    # ndctl create-namespace --mode=fsdax --region=regionN --size=namespace-size

    예 7.6. 리전에서 네임스페이스 생성

    다음 명령은 region0 에서 36-GiB 파일 시스템 DAX 네임스페이스를 생성합니다.

    # ndctl create-namespace --mode=fsdax --region=region0 --size=36G
    {
      "dev":"namespace0.3",
      "mode":"fsdax",
      "map":"dev",
      "size":"35.44 GiB (38.05 GB)",
      "uuid":"99e77865-42eb-4b82-9db6-c6bc9b3959c2",
      "sector_size":512,
      "align":2097152,
      "blockdev":"pmem0.3"
    }

    이제 네임스페이스를 /dev/pmem0.3 으로 사용할 수 있습니다.

검증

  • 새 네임스페이스가 섹터 모드에서 생성되었는지 확인합니다.

    # ndctl list -RN -n namespace0.3
    {
      "regions":[
        {
          "dev":"region0",
          "size":2156073582592,
          "align":16777216,
          "available_size":2027224563712,
          "max_available_extent":2027224563712,
          "type":"pmem",
          "iset_id":736272362787276936,
          "badblock_count":3,
          "persistence_domain":"memory_controller",
          "namespaces":[
            {
              "dev":"namespace0.3",
              "mode":"fsdax",
              "map":"dev",
              "size":38048628736,
              "uuid":"99e77865-42eb-4b82-9db6-c6bc9b3959c2",
              "sector_size":512,
              "align":2097152,
              "blockdev":"pmem0.3"
            }
          ]
        }
      ]
    }

추가 리소스

  • the ndctl-create-namespace(1) 도움말 페이지

7.8.4. 파일 시스템 DAX 장치에 파일 시스템 만들기

파일 시스템 DAX 장치에서 파일 시스템을 만들고 파일 시스템을 마운트할 수 있습니다. 파일 시스템을 생성한 후 애플리케이션은 영구 메모리를 사용하고 마운트 지점 디렉터리에 파일을 생성하고, 파일을 열고 mmap 작업을 사용하여 직접 액세스할 수 있도록 파일을 매핑할 수 있습니다.

Red Hat Enterprise Linux 8에서는 NVDIMM에서 XFS 및 ext4 파일 시스템을 기술 프리뷰로 생성할 수 있습니다.

절차

  1. 선택 사항: 파일 시스템 DAX 장치에서 파티션을 만듭니다. 자세한 내용은 parted를 사용하여 파티션 생성 을 참조하십시오.

    참고

    fsdax 장치에 파티션을 만들 때 페이지 경계에 파티션을 정렬해야 합니다. Intel 64 및 AMD64 아키텍처에서는 파티션의 시작과 끝에 최소 4KiB 정렬이 필요합니다. 2MiB가 기본 정렬입니다.

    기본적으로 parted 도구는 1MiB 경계의 파티션을 정렬합니다. 첫 번째 파티션의 경우 파티션의 시작 부분으로 2MiB를 지정합니다. 파티션 크기가 2MiB의 배수인 경우 다른 모든 파티션도 정렬됩니다.

  2. 파티션 또는 NVDIMM 장치에 XFS 또는 ext4 파일 시스템을 생성합니다.

    # mkfs.xfs  -d su=2m,sw=1 fsdax-partition-or-device
    참고

    이제 dax 지원 및 리링크된 파일이 파일 시스템에 공존할 수 있습니다. 그러나 개별 파일의 경우 dax 및 reflink는 함께 사용할 수 없습니다.

    XFS의 경우 공유 COW(Copy-On-Write) 데이터 Extent가 dax 마운트 옵션과 호환되지 않으므로 비활성화합니다. 또한 대규모 페이지 매핑의 가능성을 높이기 위해 스트라이프 단위 및 스트라이프 너비를 설정합니다.

  3. 파일 시스템을 마운트합니다.

    # mount f_sdax-partition-or-device mount-point_

    직접 액세스 모드를 활성화하려면 dax 옵션으로 파일 시스템을 마운트할 필요가 없습니다. 마운트하는 동안 dax 옵션을 지정하지 않으면 파일 시스템이 dax=inode 모드에 있습니다. 직접 액세스 모드가 활성화되기 전에 파일에 dax 옵션을 설정합니다.

추가 리소스