인스턴스 성능 최적화 및 테스트

이 페이지에서는 예상 평균 성능과 Filestore에 권장되는 성능 설정을 설명합니다. 또한 Filestore 인스턴스의 성능을 테스트하는 방법도 보여줍니다.

예상 성능

각 Filestore 서비스 등급은 성능 수준에 차이가 있습니다. 인스턴스의 성능은 캐싱 사용, 클라이언트 VM의 수, 클라이언트 VM의 머신 유형 및 테스트 중인 워크로드와 같은 다양한 요인으로 인해 내보낸 수치와 다를 수 있습니다.

다음 표에서는 서비스 등급 및 구성된 용량에 따른 Filestore 인스턴스의 예상 성능을 보여줍니다.

성능 용량(TiB) 읽기/쓰기 IOPS 읽기/쓰기 처리량(MiB/초)
BASIC_HDD 1–10 600/1,000 100/100
BASIC_HDD 10–63.9 1,000/5,000 180/120
BASIC_SSD 2.5–63.9 60,000/25,000 1,200/350
ZONAL(영역, 저용량 대역) 1 9,200/2,600 260/88
ZONAL(영역, 저용량 대역) 9.75 89,700/25,350 2,535/858
HIGH_SCALE_SSD(현재 영역, 고용량 대역) 10 92,000/26,000 2,600/880
HIGH_SCALE_SSD(현재 영역, 고용량 대역) 100 920,000/260,000 26,000/8,800
ENTERPRISE 1 12,000/4,000 120/100
ENTERPRISE 10 120,000/40,000 1,200/1,000

위 표에서는 고용량 대역 영역 등급(이전의 대규모 SSD) 및 엔터프라이즈 등급의 최대 및 최소 용량에서 예상되는 성능을 보여줍니다. 이러한 한도 내에서 성능은 용량 증감에 따라 선형적으로 확대/축소됩니다. 예를 들어 엔터프라이즈 인스턴스 용량을 1TiB에서 2TiB로 두 배로 늘릴 경우 인스턴스의 예상되는 성능은 12,000/4,000 읽기/쓰기 IOPS에서 24,000/8,000 읽기/쓰기 IOPS로 두 배로 늘어납니다.

단일 및 소수의 클라이언트 시나리오에서는 최대 NFS 성능을 달성하기 위해 nconnect 마운트 옵션을 사용하여 TCP 연결 수를 늘려야 합니다. 영역 서비스 등급의 경우 연결을 최대 7개까지, 엔터프라이즈 등급의 경우 연결을 최대 2개까지 지정하는 것이 좋습니다. 일반적으로 파일 공유 용량이 크고 연결하는 클라이언트 VM의 수가 적을수록 nconnect와의 추가 연결을 지정하여 더 많은 성능을 얻을 수 있습니다.

권장 클라이언트 머신 유형

16Gbps 이그레스 대역폭을 제공하는 n2-standard-8과 같은 Compute Engine 머신 유형을 사용하는 것이 좋습니다. 이 이그레스 대역폭을 사용하면 클라이언트는 캐시에 적합한 워크로드에서 약 16Gbps의 읽기 대역폭을 달성할 수 있습니다. 추가 컨텍스트는 네트워크 대역폭을 참조하세요.

Linux 클라이언트 마운트 옵션

Linux 클라이언트 VM 인스턴스에서 최상의 성능을 얻으려면 다음 NFS 마운트 옵션, 특히 hard 마운트, async, rsizewsize 옵션을 사용하는 것이 좋습니다. NFS 마운트 옵션에 대한 자세한 내용은 nfs를 참조하세요.

기본 옵션 설명
hard NFS 클라이언트는 NFS 요청을 무제한으로 시도합니다.
timeo=600 NFS 클라이언트는 600데시초(60초) 간격으로 NFS 요청을 다시 시도합니다.
retrans=3 NFS 클라이언트는 NFS 요청을 3회 시도한 후 추가 복구 작업을 수행합니다.
rsize=262144 NFS 클라이언트는 NFS 서버로부터 READ 요청당 최대 262,144바이트를 수신할 수 있습니다.
참고: 기본 등급 인스턴스의 경우 rsize 값을 1048576으로 설정합니다.
wsize=1048576 NFS 클라이언트는 WRITE 요청당 NFS 서버에 최대 1,048,576바이트(1MiB)를 보낼 수 있습니다.
resvport NFS 클라이언트는 이 마운트 지점에 대해 NFS 서버와 통신할 때 권한이 있는 소스 포트를 사용합니다.
async NFS 클라이언트는 특정 조건이 충족될 때까지 NFS 서버에 대한 애플리케이션 쓰기 전송을 지연합니다.
주의: sync 옵션을 사용하면 성능이 크게 저하됩니다.

단일 및 다중 클라이언트 VM 성능

Filestore의 확장 가능한 서비스 등급은 단일 클라이언트 VM이 아닌 여러 클라이언트 VM에 맞춰 성능이 최적화되어 있습니다.

엔터프라이즈영역 등급 인스턴스의 경우 전체 성능을 활용하려면 최소 4개의 클라이언트 VM이 필요합니다. 그래야 기본 Filestore 클러스터의 모든 VM이 완전히 활용됩니다.

추가 컨텍스트를 제공하자면 확장 가능한 가장 작은 Filestore 클러스터에는 4개의 VM이 있습니다. 각 클라이언트 VM은 nconnect 마운트 옵션을 사용하여 지정된 클라이언트당 NFS 연결 수에 관계없이 하나의 Filestore 클러스터 VM과만 통신합니다. 단일 클라이언트 VM을 사용하는 경우, 읽기 및 쓰기 작업은 단일 Filestore 클러스터 VM에서만 수행됩니다.

Google Cloud 리소스 간 성능 개선

gsutil을 사용하여 Cloud Storage에서 Filestore 인스턴스로 데이터를 복사하는 등 여러 Google Cloud 리소스의 작업은 느려질 수 있습니다. 성능 문제를 완화하려면 다음을 시도해 보세요.

  • Cloud Storage 버킷, 클라이언트 VM, Filestore 인스턴스가 모두 동일한 리전에 있는지 확인합니다.

    이중 리전은 Cloud Storage에 저장된 데이터에 대해 성능이 가장 우수한 옵션을 제공합니다. 이 옵션을 사용하는 경우 다른 리소스가 이중 리전을 구성하는 단일 리전 중 하나에 있어야 합니다. 예를 들어 Cloud Storage 데이터가 us-central1,us-west1에 있는 경우 클라이언트 VM과 Filestore 인스턴스가 us-central1에 있는지 확인합니다.

  • 참고용으로 PD 연결 VM의 성능을 확인하고 Filestore 인스턴스의 성능과 비교합니다.

    • Filestore 인스턴스와 비교할 때 PD 연결 VM의 성능이 비슷하거나 느리면 Filestore와 관련 없는 성능 병목 현상이 나타날 수 있습니다. Filestore가 아닌 리소스의 기준 성능을 개선하려면 다음을 시도해 보세요.

      • gsutil -m 옵션을 적용합니다. 이 옵션을 사용하면 cp, mv, rsync를 비롯해 지원되는 작업을 동시에 실행할 수 있습니다.

      • 다음 gsutil 구성을 적용합니다. 각각은 boto 구성 파일에 설정된 변경 가능한 boto 구성 값입니다. 사용자는 파일을 직접 수정(권장)하거나 -o 옵션을 사용하여 수정할 수 있습니다.

    • Filestore 인스턴스의 성능이 PD 연결 VM보다 상당히 느리면 작업을 여러 VM에 분산해 보세요.

      • 이는 Cloud Storage에서 읽기 작업의 성능을 향상시키는 데 도움이 됩니다.

      • 엔터프라이즈영역 등급 인스턴스의 경우 전체 성능을 활용하려면 최소 4개의 클라이언트 VM이 필요합니다. 그래야 기본 Filestore 클러스터의 모든 VM이 완전히 활용됩니다. 자세한 내용은 단일 및 다중 클라이언트 VM 성능을 참조하세요.

성능 테스트

Linux를 사용하는 경우 fio 도구를 사용하여 기본 등급 인스턴스의 읽기 및 쓰기 처리량과 IOPS를 벤치마킹할 수 있습니다. 엔터프라이즈 및 영역 등급 인스턴스에는 이 성능 벤치마킹 방법을 사용하지 않는 것이 좋습니다.

이 섹션의 예시는 일반적으로 실행되는 벤치마크를 보여줍니다. 성능을 극대화하려면 여러 클라이언트 VM 인스턴스에서 fio를 실행해야 할 수 있습니다.

다음 예는 최대 쓰기 처리량을 벤치마킹합니다.

fio --ioengine=libaio --filesize=32G --ramp_time=2s \
--runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
--group_reporting --directory=/mnt/nfs  \
--name=write --blocksize=1m --iodepth=64 --readwrite=write

다음 예는 최대 쓰기 IOPS를 벤치마킹합니다.

fio --ioengine=libaio --filesize=32G --ramp_time=2s \
--runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
--group_reporting --directory=/mnt/nfs  \
--name=randwrite --blocksize=4k --iodepth=256 --readwrite=randwrite

다음 예는 최대 읽기 처리량을 벤치마킹합니다.

fio --ioengine=libaio --filesize=32G --ramp_time=2s \
--runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
--group_reporting --directory=/mnt/nfs  \
--name=read --blocksize=1m --iodepth=64 --readwrite=read

다음 예는 최대 읽기 IOPS를 벤치마킹합니다.

fio --ioengine=libaio --filesize=32G --ramp_time=2s \
--runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
--group_reporting --directory=/mnt/nfs  \
--name=randread --blocksize=4k --iodepth=256 --readwrite=randread

다음 단계