Cloud Storage FUSE의 캐싱 개요

Cloud Storage FUSE는 데이터 검색 성능을 높이는 데 도움이 되는 세 가지 유형의 선택적 캐싱을 제공합니다.

파일 캐싱 개요

Cloud Storage FUSE 파일 캐시는 개발자가 선택한 더 빠른 캐시 스토리지에서 파일 반복 읽기를 제공할 수 있게 해주는 클라이언트 기반 읽기 캐시입니다. 파일 캐시는 기본적으로 사용 중지되어 있습니다.

파일 캐싱의 이점

  • 성능 향상: 파일 캐싱은 캐시 미디어에서 직접 읽기를 제공하여 지연 시간과 처리량을 개선합니다. 캐시에서 제공하면 소규모 및 임의 I/O 작업이 훨씬 더 빠를 수 있습니다.

  • 기존 용량 사용: 파일 캐싱은 추가 스토리지에 대한 비용 없이 캐시 디렉터리에 대해 기존 프로비저닝된 머신 용량을 사용할 수 있습니다. 여기에는 a2-ultragpua3-highgpu 같은 Cloud GPU 머신 유형과 함께 번들로 제공되는 로컬 SSD, 각 VM에서 사용되는 부팅 디스크인 Persistent Disk, 또는 인메모리 /tmpfs가 포함됩니다.

  • 요금 절감: 캐시 적중은 로컬로 제공되며 Cloud Storage 작업 또는 네트워크 요금이 발생하지 않습니다.

  • AI 및 ML 학습의 총소유비용 개선: 파일 캐싱은 데이터를 더 빠르게 로드하여 Cloud GPU 및 Cloud TPU 사용률을 높이고 학습 시간을 단축하며 AI 및 ML 학습 워크로드의 가성비를 높입니다.

파일 캐시 사용 설정 및 구성

파일 캐싱 기능을 사용 설정할 때는 Cloud Storage FUSE 구성 파일에서 필드를 설정합니다. 다음 목록에서는 파일 캐싱을 제어하는 데 사용할 수 있는 필드를 설명합니다.

  • max-size-mb를 설정하여 캐시된 데이터가 사용할 수 있는 지정된 캐시 디렉터리의 최대 용량을 제어할 수 있습니다.

    기본적으로 max-size-mb 필드는 -1 값으로 설정되어 캐시된 데이터가 cache-dir에 값으로 지정한 디렉터리의 사용 가능한 용량을 모두 차지할 때까지 커질 수 있습니다.

  • cache-dir 필드를 사용하여 파일 캐시 데이터를 저장할 디렉터리를 지정할 수 있습니다. 파일 캐시를 사용 설정하려면 캐시 디렉터리를 지정해야 합니다.

  • ttl-secs 필드를 사용하여 캐시된 데이터가 무효화되는 시간을 제어할 수 있습니다. 기본적으로 ttl-secs 필드는 60초를 지정하는 60으로 설정됩니다. 값을 늘리는 것이 좋습니다.

    캐시된 데이터의 무효화를 제어하는 방법에 대한 자세한 내용은 캐시 데이터 무효화 구성을 참조하세요. 캐시된 데이터 제거에 대한 자세한 내용은 제거를 참조하세요.

임의 및 부분 읽기

첫 번째 파일 읽기 작업이 파일 시작 부분에서 시작하거나 오프셋 0으로 시작하면 Cloud Storage FUSE 파일 캐시는 좁은 범위의 하위 집합에서만 읽기를 수행 중인 경우에도 전체 파일을 수집하여 캐시에 로드합니다. 이렇게 하면 동일한 객체의 후속 임의 읽기 또는 부분 읽기를 캐시에서 직접 제공할 수 있습니다.

파일의 첫 번째 읽기 작업이 오프셋 0이 아닌 다른 곳에서 시작되는 경우 Cloud Storage FUSE는 기본적으로 비동기 전체 파일 가져오기를 트리거하지 않습니다. Cloud Storage FUSE가 초기 무작위 읽기 시 파일을 캐시로 수집하도록 이 동작을 변경하려면 cache-file-for-range-read 플래그를 true로 설정하세요. 동일한 객체에서 여러 임의 또는 부분 읽기 작업이 수행되는 경우 cache-file-for-range-read 플래그를 사용 설정하는 것이 좋습니다.

제거

캐시된 메타데이터 및 데이터의 제거는 max-size-mb 한도당 구성된 공간 기준점에 도달하면 시작되는 가장 최근 사용(LRU) 알고리즘을 기반으로 합니다. 항목이 TTL을 기준으로 만료되면 먼저 Cloud Storage로 메타데이터 가져오기 호출이 수행되고 네트워크 지연 시간이 발생합니다. 데이터와 메타데이터는 별도로 관리되므로 한 항목이 제거되거나 무효화될 수 있으며 다른 항목은 제거되지 않을 수 있습니다.

성능

Cloud Storage FUSE 캐싱은 로컬 SSD, Persistent Disk, 인메모리 tmpfs, Filestore 등 사용자가 선택한 스토리지에서 지원하는 모든 사용자 지정 디렉터리에서 작동합니다. Cloud Storage FUSE 캐시 성능은 최소한의 오버헤드로 캐시에서 사용하는 기본 스토리지와 일치합니다. 캐싱 성능에 대한 자세한 내용은 Cloud Storage FUSE 캐싱 성능 및 권장사항을 참조하세요.

지속성

Cloud Storage FUSE 캐시는 마운트 해제 시 유지되지 않으며 모든 메타데이터 항목이 제거되면 다시 시작됩니다. 하지만 파일 캐시의 데이터는 제거되지 않으므로 사용자가 삭제해야 하거나 메타데이터가 다시 채워지면 후속 마운트 작업에서 재사용될 수 있습니다.

보안

캐싱을 사용 설정하면 Cloud Storage FUSE는 캐시의 기본 디렉터리로 설정한 cache-dir를 사용하여 Cloud Storage 버킷의 파일을 암호화되지 않은 형식으로 유지합니다. 이 캐시 디렉터리에 액세스할 수 있는 모든 사용자 또는 프로세스는 이러한 파일에 액세스할 수 있습니다. 이 디렉터리에 대한 액세스를 제한하는 것이 좋습니다.

파일 캐시에 대한 직접 또는 다중 액세스

Cloud Storage FUSE 이외의 프로세스를 사용하여 캐시 디렉터리의 파일에 액세스하거나 파일을 수정하면 데이터가 손상될 수 있습니다. Cloud Storage FUSE 캐시는 동일하거나 다른 머신에서 실행되는 다양한 Cloud Storage FUSE 프로세스를 인식하지 못한 채 각 Cloud Storage FUSE 실행 프로세스에만 적용됩니다. 따라서 동일한 캐시 디렉터리를 다른 Cloud Storage FUSE 프로세스에서 사용하면 안 됩니다.

여러 Cloud Storage FUSE 프로세스를 동일한 머신에서 실행해야 하는 경우 각 Cloud Storage FUSE 프로세스가 고유한 특정 캐시 디렉터리를 가져오거나 다음 방법 중 하나를 사용하여 데이터가 손상되지 않도록 해야 합니다.

  • 공유 캐시로 모든 버킷 마운트: 동적 마운트를 사용하여 공유 캐시에서 단일 프로세스로 액세스할 수 있는 모든 버킷을 마운트합니다. 자세한 내용은 Cloud Storage FUSE 동적 마운트를 참조하세요.

  • 특정 버킷에 캐싱 사용 설정: 정적 마운트를 사용하여 지정된 버킷에만 캐싱을 사용 설정할 수 있습니다. 자세한 내용은 Cloud Storage FUSE 정적 마운트를 참조하세요.

  • 특정 폴더 또는 디렉터리만 캐시: 전체 버킷을 마운트하는 대신 –only-dir 옵션을 사용하여 특정 버킷 수준 폴더만 마운트하고 캐시할 수 있습니다. 자세한 내용은 버킷 내에 디렉터리 마운트를 참조하세요.

통계 캐싱 개요

Cloud Storage FUSE 통계 캐시는 크기, 수정 시간 또는 권한과 같은 파일 속성 관련 작업에 대한 성능을 향상시켜 주는 객체 메타데이터용 캐시입니다. 통계 캐시를 사용하면 Cloud Storage에 통계 객체 요청을 전송하는 대신 캐시된 데이터를 사용하여 작업을 수행함으로써 지연 시간을 단축시킬 수 있습니다. 기본적으로 통계 캐시는 stat-cache-max-size-mb 값이 32MB로, ttl-secs 값이 60초로 설정됩니다. 두 값을 모두 늘리는 것이 좋습니다. 통계 캐싱에 대한 자세한 내용은 GitHub의 시맨틱 문서를 참조하세요.

유형 캐싱 개요

Cloud Storage FUSE 유형 캐시는 파일 또는 디렉터리 존재와 관련된 메타데이터 작업의 성능을 가속화하는 메타데이터 캐시입니다. 유형 캐시를 사용하면 이 정보를 로컬에 저장하여 파일이나 디렉터리가 존재하는지 확인하기 위해 Cloud Storage에 요청하는 횟수가 줄어들어 지연 시간이 개선됩니다. 기본적으로 유형 캐시는 type-cache-max-size-mb 값이 4MB로, ttl-secs 값이 60초로 설정됩니다. 두 값을 모두 늘리는 것이 좋습니다. 유형 캐싱에 대한 자세한 내용은 GitHub의 시맨틱 문서를 참조하세요.

캐시 무효화 구성

ttl-secs 필드는 파일 캐시에서 메타데이터가 유효한 상태로 유지되는 기간을 지정합니다. 이 필드는 캐시된 데이터의 TTL(수명)을 나타내며, TTL이 만료되면 캐시된 데이터가 무효화됩니다. 메타데이터 항목이 무효화되면 Cloud Storage에서 후속 읽기가 쿼리됩니다.

Cloud Storage FUSE 구성 파일에서 ttl-secs을 구성할 수 있습니다.

ttl-secs 값을 0보다 큰 값으로 지정하면 파일 캐시에 대한 메타데이터는 지정한 기간 동안만 유효합니다. 기본값 60이 모든 캐시 유형에 설정됩니다. 파일 캐싱의 경우 일관성 요구의 균형을 유지하면서 반복 읽기 간의 예상 시간을 기준으로 ttl-secs 값을 늘리는 것이 좋습니다. 데이터 변경의 중요도와 빈도에 따라 워크로드에서 허용하는 만큼 ttl-secs 값을 높게 설정하는 것이 좋습니다.

초 수를 나타내는 값을 지정하는 것 외에도 ttl-secs 플래그는 0-1 값도 지원합니다.

  • ttl-secs0: 0 값을 입력하면 ttl-secs 플래그는 캐시의 일관성을 유지하기 위해 파일이 제공되는 클라우드 스토리지에 Get 메타데이터 호출을 실행하여 가장 최신의 파일을 읽게 합니다. 캐시의 파일이 최신 버전이면 캐시에서 직접 제공됩니다. 메타데이터를 먼저 확인하려면 항상 Cloud Storage를 호출해야 하므로 0 이외의 ttl-secs 값을 지정할 때보다 성능이 저하될 수 있습니다. 파일이 캐시에 있고 변경되지 않은 경우 메타데이터 가져오기 호출 후 일관성 있게 파일이 캐시에서 제공됩니다.

  • ttl-secs-1: -1 값을 입력할 경우 사용 가능한 경우 일관성을 확인하지 않고 항상 캐시에서 파일을 읽습니다. 일관성을 확인하지 않고 파일을 제공하면 일관되지 않은 데이터를 제공할 수 있으며, 변경되지 않는 데이터가 있는 작업에서 실행되는 워크로드에만 일시적으로 사용해야 합니다. 예를 들어 -1 값을 사용하면 변경하지 않고 동일한 데이터를 여러 세대에 걸쳐 읽는 머신러닝 학습에 유용합니다.

캐시된 데이터의 읽기 경로

Cloud Storage FUSE 캐시는 캐시에 수집된 후 반복 읽기를 가속화합니다. 처음 읽기와 캐시 부적중은 모두 Cloud Storage로 직접 이동하며, 일반적인 Cloud Storage 네트워크 지연 시간이 적용됩니다.

고려사항

  • 파일 캐싱, 통계 캐싱 또는 유형 캐싱이 사용 설정된 Cloud Storage FUSE를 사용하면 성능이 향상되지만 일관성은 저하될 수 있습니다. 자세한 내용은 GitHub의 시맨틱 문서를 참조하세요.

  • 파일 캐시 항목이 아직 TTL을 기준으로 만료되지 않았고 파일이 캐시에 있으면 Cloud Storage에 대해 어떠한 요청 없이 로컬 클라이언트 캐시에서 전체 작업이 제공됩니다.

  • 파일 캐시 항목이 TTL을 기준으로 만료된 경우 먼저 Cloud Storage로 메타데이터 가져오기 호출이 실행되고, 파일이 캐시에 없으면 Cloud Storage에서 파일이 검색됩니다. 두 작업 모두 네트워크 지연 시간이 발생합니다. 메타데이터 항목이 무효화되었지만 파일이 캐시에 있고 객체 생성이 변경되지 않은 경우, 데이터가 유효한지 여부를 확인하기 위해 Get 메타데이터 호출을 수행한 후에만 캐시에서 파일이 제공됩니다.

  • Cloud Storage FUSE 클라이언트가 캐시된 파일 또는 해당 메타데이터를 수정하는 경우 파일은 즉시 무효화되고 동일한 클라이언트의 다음 읽기에서 일관성이 보장됩니다. 하지만 여러 클라이언트가 동일한 파일이나 메타데이터에 액세스하고 해당 항목이 캐시되는 경우, 파일 또는 메타데이터의 캐시된 버전을 읽지만, 해당 클라이언트의 TTL 설정에 의해 파일이 무효화될 때까지는 업데이트된 버전을 읽지 않습니다.

다음 단계