Cloud Storage FUSE 성능 및 권장사항

이 페이지에서는 지연 시간, 대역폭, 재시도 측면에서 Cloud Storage FUSE의 성능과 Cloud Storage FUSE를 사용할 때의 권장사항에 대해 설명합니다.

읽기 및 쓰기

Cloud Storage FUSE는 임의의 읽기 및 쓰기 작업 부하에 비해 순차적 읽기 및 쓰기 작업 부하에서 더 나은 성능을 제공합니다. Cloud Storage FUSE는 휴리스틱을 사용해서 파일의 순차적 읽기를 감지해서 Cloud Storage FUSE가 동일한 TCP 연결을 사용해서 Cloud Storage에 대해 더 적은 수의 더 큰 읽기 요청을 발행할 수 있게 합니다.

순차 읽기 성능을 최적화하려면 크기가 5MB~200MB인 파일을 업로드하고 읽는 것이 좋습니다. 무작위 읽기 성능을 최적화하려면 2MB 정도 크기로 파일을 업로드하고 읽는 것이 좋습니다.

캐싱

파일, 통계, 유형, 또는 모든 세 가지 캐시 유형과 함께 Cloud Storage FUSE를 사용하면 성능을 높이고 비용을 줄일 수 있지만 일관성이 저하될 수도 있습니다.

통계 및 유형 캐시

통계 및 유형 캐시는 동일한 파일에 대한 반복 읽기 시 Cloud Storage에 대한 직렬 호출 수를 줄여 성능을 향상합니다. 반복 읽기가 있고 캐싱의 이점을 누릴 수 있는 파일 수에 따라 통계 및 유형 캐시를 설정합니다. 파일 수를 사용하여 캐시의 대략적인 크기를 나타낼 수 있습니다. 각 캐시 유형에 대해 다음과 같은 한도가 권장됩니다.

  • stat-cache-max-size-mb: 워크로드가 최대 20,000개 파일을 포함하는 경우 기본값 32를 사용하세요. 워크로드가 파일 20,000개를 초과하면 파일 6,000개가 추가될 때마다 stat-cache-max-size-mb 값을 10씩 늘립니다(파일당 약 1,500바이트).

    stat-cache-max-size-mb는 마운트 수준 한도이며 실제 메모리 사용량은 지정한 값보다 낮을 수 있습니다. 또는 stat-cache-max-size-mb-1로 설정하여 통계 캐시가 필요한 만큼 메모리를 사용하도록 할 수 있습니다.

  • type-cache-max-size-mb: 마운트하는 버킷의 단일 디렉터리 내에 있는 최대 파일 수에 파일이 20,000개 이하로 포함된 경우 기본값 4를 사용합니다. 마운트하는 단일 디렉터리 내의 최대 파일 수에 파일이 20,000개를 초과하면 파일 5,000개마다 type-cache-max-size-mb 값을 1만큼 늘립니다(약 200바이트).

    type-cache-max-size-mb는 마운트 수준 한도이며 실제 메모리 사용량은 지정된 값보다 낮을 수 있습니다. 또는 유형 캐시가 필요한 만큼 메모리를 사용하도록 type-cache-max-size-mb 값을 -1로 설정할 수 있습니다.

더 빠른 일괄 처리 메서드로 유형 캐시를 미리 채워 최초 실행 시 성능을 개선하려면 마운트된 버킷에서 ls -R를 전달하여 전체 목록을 실행하는 것이 좋습니다.

파일 캐싱 권장사항

전체 데이터 세트를 캐시 용량에 적절히 맞춰 최상의 성능을 제공하고 캐시 스래싱을 방지합니다. 또한 캐시 미디어가 제공할 수 있는 최대 용량과 성능을 고려하세요. 프로비저닝된 캐시의 최대 성능, 용량 한도 또는 둘 다에 도달한 경우 Cloud Storage FUSE보다 한도가 훨씬 높은 Cloud Storage에서 직접 읽는 것이 좋습니다.

IOPS(초당 쿼리 수)

Filestore는 Cloud Storage에서 '초당 쿼리 수'라고도 하는 높은 초당 입출력 작업 수(IOPS)가 필요한 워크로드에 Cloud Storage FUSE보다 더 나은 옵션입니다. Filestore는 단일 파일 시스템 및 낮은 지연 시간에서 매우 높은 IOPS를 얻을 수 있는 더 효과적인 옵션입니다.

또는 높은 IOPS와 짧은 지연 시간을 제공하는 경우 Cloud Storage FUSE 파일 캐시 기능을 사용하여 기본 캐시 미디어의 성능 특성을 빌드할 수도 있습니다.

지연 시간 및 처리량

Cloud Storage FUSE는 로컬 파일 시스템보다 지연 시간이 높습니다. 한 번에 하나씩 작은 파일을 읽거나 쓰면 처리량이 감소되어 개별 API 호출이 여러 번 수행됩니다. 여러 큰 파일을 한 번에 읽거나 쓰면 처리량이 늘어날 수 있습니다. Cloud Storage FUSE 파일 캐시 기능을 사용하여 소규모 및 임의 I/O의 성능을 개선합니다.

Cloud Storage FUSE의 파일 시스템 지연 시간은 한 번에 파일을 하나만 읽고 쓰는 rsync에 영향을 줍니다. 여러 파일을 버킷으로 또는 버킷에서 병렬로 전송하려면 gcloud storage rsync를 실행하여 Google Cloud CLI를 사용합니다. 자세한 내용은 rsync 문서를 참조하세요.

최대 처리량 달성

최대 처리량을 달성하려면 처리량을 구동하고 네트워크 인터페이스 카드(NIC)를 포화시킬 수 있는 충분한 CPU 리소스가 있는 머신을 사용하세요. CPU 리소스가 부족하면 Cloud Storage FUSE가 제한될 수 있습니다.

Google Kubernetes Engine을 사용하는 경우 워크로드에 더 높은 처리량이 필요한 경우 Cloud Storage FUSE 사이드카 컨테이너에 대한 CPU 할당을 늘립니다. 사이드카 컨테이너에서 사용하는 리소스를 늘리거나 리소스를 무제한으로 할당할 수 있습니다.

사용 가능한 CPU 코어 수에 따라 스레드 수를 설정합니다. 코어 또는 스레드 수가 100보다 크면 –max-conns-per-host를 같은 값으로 변경합니다. ML 프레임워크는 일반적으로 num_workers를 사용하여 스레드 수를 정의합니다.

비율 제한

Cloud Storage FUSE가 Cloud Storage에 전송하는 트래픽 비율을 제한하려면 gcsfuse 명령어의 일부로 다음 옵션을 사용하면 됩니다.

  • --limit-ops-per-sec 옵션은 Cloud Storage FUSE가 Cloud Storage에 요청을 전송하는 비율을 제어합니다.

  • --limit-bytes-per-sec 옵션은 Cloud Storage FUSE가 Cloud Storage에서 데이터를 다운로드하는 대역폭을 제어합니다.

이러한 옵션에 대한 자세한 내용은 gcsfuse 명령줄 문서를 참조하세요.

모든 비율 제한은 대략적인 값이며 8시간 동안 수행됩니다. 기본적으로 비율 제한은 적용되지 않습니다.

업로드 절차 제어

기본적으로 Cloud Storage FUSE에서 Cloud Storage로의 실패한 요청은 기본적으로 값이 30s(30초)인 지정된 최대 백오프 기간까지 지수 백오프로 재시도됩니다. 백오프 기간이 지정된 최대 기간을 초과하면 지정된 최대 기간 동안 재시도가 계속됩니다. --max-retry-sleep 옵션을 gcsfuse 호출의 일부로 사용해서 백오프 기간을 지정할 수 있습니다.

--max-retry-sleep 옵션에 대한 자세한 내용은 gcsfuse 명령줄 문서를 참조하세요.

디렉터리 시맨틱스

Cloud Storage는 플랫 네임스페이스로 작동합니다. 즉, 디렉터리가 Cloud Storage 내에 실제로 존재하지 않습니다. 디렉터리는 슬래시(/)로 끝나는 객체 이름으로 대신 표현됩니다. 예를 들어 객체 이름 my-bucket/directory/file.txt에서 my-bucket/directory/는 디렉터리를 나타냅니다. 객체 이름에 포함되어 존재하지만 실제 객체로는 존재하지 않는 디렉터리를 암시적으로 정의된 디렉터리라고 합니다.

기본적으로는 암시적으로 정의된 디렉터리로 버킷을 마운트하면 Cloud Storage FUSE가 해당 디렉터리를 추론하거나 액세스할 수 없습니다. Cloud Storage FUSE는 명시적으로 정의된 디렉터리, 즉 Cloud Storage 버킷 내에 실제 객체로 존재하는 디렉터리만 추론할 수 있습니다.

예를 들어 my-bucket/directory/file1.txt 객체가 포함된 my-bucket이라는 버킷을 마운트한다고 가정해 보겠습니다. 버킷 마운트 지점에서 ls를 실행하면 directory가 Cloud Storage의 객체로 존재하지 않으므로 Cloud Storage FUSE가 my-bucket/directory/ 디렉터리나 그 안에 있는 file1.txt 객체에 액세스할 수 없습니다. Cloud Storage FUSE가 디렉터리와 그 안에 있는 객체를 추론할 수 있게 하려면 mkdir 명령어를 사용하여 로컬 파일 시스템에 디렉터리를 만들거나 gcsfuse 명령어에 --implicit-dirs 옵션을 포함하여 디렉터리를 명시적으로 정의하면 됩니다.

기존 프리픽스와 함께 버킷을 마운트하는 방법을 포함해서 디렉터리 시맨틱스에 대한 자세한 내용은 GitHub 문서의 파일 및 디렉터리를 참조하세요. --implicit-dirs 옵션에 대한 자세한 내용은 Cloud Storage FUSE 명령줄 문서를 참조하세요.

객체 나열 시 고려사항

마운트된 버킷의 모든 객체를 나열하면(예: ls 실행) Cloud Storage FUSE가 Cloud Storage에서 객체: 나열 API를 호출합니다. 이 API는 결과를 페이지로 나눠서 표시합니다. 즉, 버킷의 객체 수에 따라 Cloud Storage FUSE가 호출을 여러 번 실행해야 할 수 있습니다. 그 결과 나열 작업 비용이 증가하고 속도가 느려질 수 있습니다.

벤치마크

Cloud Storage FUSE에서 부하 테스트를 수행하는 방법은 GitHub에서 성능 벤치마크 문서를 참조하세요.

로깅

로그 로테이션을 포함하여 Cloud Storage FUSE 활동에 대한 로깅을 구성하려면 Cloud Storage FUSE 구성 파일logging 키 아래에 필드를 지정합니다. 기본적으로 로그 파일은 순환되고 약 1GiB의 공간을 사용합니다.