영역 버킷의 gcloud CLI 성능 조정

Google Cloud CLIRapid Bucket의 영역 버킷에서 객체를 읽을 때 사용 가능한 시스템 리소스에 따라 기본 동시 실행 및 슬라이싱 구성이 자동으로 적용됩니다.

이 페이지에서는 이러한 기본 구성을 설명하고 gcloud CLI를 사용하여 동시 실행, 프로세스 확장, 선택 기능 (예: NIC 격리)을 추가로 조정하여 특정 워크로드의 성능을 개선하는 방법을 설명합니다. 영역 버킷을 파일 시스템으로 마운트할 때 성능을 조정하려면 Rapid Bucket의 Cloud Storage FUSE 성능을 참조하세요.

성능 설정을 구성하기 전에 영역 버킷을 만들어야 합니다. Hyperdisk 또는 로컬 SSD와 같은 연결된 스토리지 볼륨에 객체를 다운로드하려는 경우 환경에서 볼륨을 포맷하고 마운트해야 합니다. 일반적인 슬라이싱 개념은 슬라이스 객체 다운로드를 참조하세요.

기본 동시 실행 및 슬라이싱 구성

이 섹션의 기본 구성은 gcloud CLI 버전 583.0.0 이상을 사용하여 Rapid Bucket의 영역 버킷에서 객체를 읽을 때 특히 적용됩니다. 표준 Cloud Storage 버킷의 경우 gcloud CLI는 자체 기본 동시 실행 설정을 적용합니다.

영역 버킷의 경우 gcloud CLI는 사용 가능한 가상 CPU(vCPU) 코어 수와 단일 객체를 다운로드하는지 아니면 여러 객체를 다운로드하는지에 따라 기본 동시 실행 및 슬라이싱 매개변수를 자동으로 설정합니다. 다음 표는 이러한 속성의 기본값을 매핑합니다.

단일 객체 다운로드

단일 객체를 다운로드할 때 gcloud CLI는 다음 기본값을 적용합니다.

사용 가능한 vCPU 프로세스 수 스레드 수 슬라이싱 기준 최대 구성요소 구성요소 크기
≥ 8 8 2 50 MiB 16 5 MiB
< 8 4 2 50 MiB 8 5 MiB

다중 객체 다운로드

여러 객체를 동시에 다운로드할 때 gcloud CLI는 다음 기본값을 적용합니다.

사용 가능한 vCPU 프로세스 수 스레드 수 슬라이싱 기준 최대 구성요소 구성요소 크기
≥ 48 min(96, available_cores * 0.75) 1 10 MiB 5 5 MiB
4 to 47 16 4 10 MiB 10 5 MiB
< 4 2 10 50 MiB 10 5 MiB

동시 실행 및 슬라이싱 구성 조정

이 섹션에서는 gcloud CLI를 사용하여 동시 실행 및 슬라이싱 설정을 구성하는 방법을 설명하고 일반적인 하드웨어 환경에 권장되는 값을 제공합니다.

구성을 적용하는 방법

커스텀 조정 설정을 구성하고 적용하려면 다음 단계를 완료하세요.

  1. Google Cloud CLI를 버전 583.0.0 이상으로설치하거나 업데이트합니다.

  2. 개발 환경에서 gcloud config configurations create 명령어를 실행하여 구성 프로필을 만들고 활성화합니다.

    gcloud config configurations create CONFIGURATION_NAME

    CONFIGURATION_NAME을 구성 프로필의 이름(예: rapid-perf)으로 바꿉니다.

  3. gcloud config set 명령어를 실행하여 동시 실행 및 슬라이싱 속성을 구성합니다.

    gcloud config set storage/thread_count THREAD_COUNT
    gcloud config set storage/process_count PROCESS_COUNT
    gcloud config set storage/sliced_object_download_threshold THRESHOLD_SIZE
    gcloud config set storage/sliced_object_download_component_size COMPONENT_SIZE
    gcloud config set storage/sliced_object_download_max_components MAX_COMPONENTS

    자리표시자를 워크로드에 적합한 값으로 바꿉니다.

    • THREAD_COUNT: 작업자 프로세스당 스레드 수(예: 1)
    • PROCESS_COUNT: 작업자 프로세스 수(예: 64)
    • THRESHOLD_SIZE: 슬라이싱을 트리거하는 최소 객체 크기 기준 (예: 멀티 기가바이트 워크로드의 경우 128 MiB, 더 작은 객체의 경우 32 MiB)
    • COMPONENT_SIZE: 각 다운로드 슬라이스의 대상 크기 (예: 멀티 기가바이트 워크로드의 경우 128 MiB, 더 작은 객체의 경우 32 MiB) )
    • MAX_COMPONENTS: 객체당 최대 슬라이스 구성요소 수(예: 16)

    이러한 속성에 대한 자세한 내용은 조정 권장사항을 참조하세요.

  4. 객체를 로컬 스토리지 경로에 다운로드하려면 gcloud storage cp 명령어를 실행합니다.

    gcloud storage cp -r gs://BUCKET_NAME/SOURCE_PATH/ /DESTINATION_PATH/

    다음을 바꿉니다.

    • BUCKET_NAME: 영역 버킷의 이름
    • SOURCE_PATH: 버킷의 소스 디렉터리 또는 객체 경로
    • DESTINATION_PATH: 로컬 디렉터리 경로(예: ./data/) 또는 로컬 스토리지 볼륨의 마운트 지점(예: /mnt/hyperdisk/data/)

조정 권장사항

이전 단계의 자리표시자에 적절한 값을 선택하려면 다음 가이드라인을 검토하세요.

프로세스 수

사용 가능한 CPU 코어에 따라 병렬 작업자 프로세스를 확장하도록 storage/process_count 속성을 설정합니다. 프로세스 수를 사용 가능한 CPU 코어의 최대 80% 로 제한합니다.

storage/process_count = min(target_cores, 0.8 * available_cores)

각 항목의 의미는 다음과 같습니다.

  • target_cores: 전송에 할당할 CPU 코어 또는 작업자 프로세스 수 (예: 64)
  • available_cores: 머신에서 사용 가능한 총 가상 CPU (vCPU)(예: Linux에서 nproc 실행)

예를 들어 대상이 64개의 작업자 프로세스인 경우 vCPU가 80개 이상인 머신은 storage/process_count64로 설정할 수 있습니다. vCPU가 80개 미만인 머신의 경우 storage/process_count를 사용 가능한 코어의 80% 로 설정합니다 (예: 64-vCPU VM의 51).

스레드 수

storage/thread_count 속성을 설정하여 작업자 프로세스당 스레드 수를 제어합니다. vCPU가 48개 이상인 머신에서 storage/thread_count1로 설정합니다.

코어가 많은 머신에서 각 작업자 프로세스를 단일 스레드로 제한하면 Python GIL (Global Interpreter Lock) 및 gRPC 스레드 경합을 줄일 수 있습니다.

슬라이싱 기준

storage/sliced_object_download_threshold 속성을 설정하여 슬라이스 다운로드를 트리거하는 데 필요한 최소 객체 크기를 지정합니다.

storage/sliced_object_download_thresholdstorage/sliced_object_download_component_size보다 크거나 같은 값으로 설정하는 것이 좋습니다.

객체당 슬라이스

storage/sliced_object_download_component_sizestorage/sliced_object_download_max_components 속성을 설정하여 객체당 생성되는 병렬 슬라이스 수를 제어합니다. gcloud CLI는 다음 공식을 사용하여 객체당 슬라이스를 계산합니다.

Slices per object = min(object_size / component_size, max_components)

객체가 component_size 값으로 슬라이싱하면 max_components 값을 초과할 만큼 큰 경우 gcloud CLI는 component_size 값을 무시하고 객체를 max_components 슬라이스로 균등하게 나눕니다. 예를 들어 component_size=128 MiBmax_components=16으로 100GiB 객체를 다운로드하면 각각 6.25GiB의 슬라이스 16개가 생성됩니다.

각 슬라이스는 총 작업자 용량 (storage/process_count × storage/thread_count)에 따라 독립적으로 병렬로 다운로드됩니다.

작업자 포화

전송 전반에 걸쳐 높은 작업자 사용률을 유지하려면 일반적인 전송에서 총 작업자 용량과 같거나 초과하는 총 슬라이스가 생성되도록 프로세스 수, 스레드 수, 구성요소 크기, 최대 구성요소를 조정합니다.

Total slices across all objects >= storage/process_count * storage/thread_count

예를 들어 64개의 작업자 프로세스(process_count=64thread_count=1)를 사용하여 객체 4개를 다운로드한다고 가정해 보겠습니다.

  • 2GiB 객체 4개: component_size=128 MiB를 설정하면 객체당 16개의 슬라이스 (4 × 16 = 64개의 슬라이스)가 생성되어 64개의 작업자 프로세스를 모두 활용합니다.
  • 512MiB 객체 4개: component_size=32 MiB를 설정하면 객체당 16개의 슬라이스 (4 × 16 = 64개의 슬라이스)가 생성됩니다. 반대로 512MiB 객체에서 component_size=128 MiB를 사용하면 객체당 4개의 슬라이스 (총 16개의 슬라이스)만 생성되어 48개의 작업자 프로세스가 유휴 상태로 유지됩니다.

NIC 격리

CPU 코어가 16개 이상인 Linux 머신에서 네트워크 인터페이스 카드 (NIC) 격리를 storage/use_nic_isolation 속성True로 설정하여 사용 설정할 수 있습니다.

gcloud config set storage/use_nic_isolation True

이 속성을 사용 설정하면 gcloud CLI가 CPU 선호도(os.sched_setaffinity())를 설정합니다. 이 구성은 네트워크 하드웨어 인터럽트 요청 (IRQ)을 위해 CPU 코어의 10% 를 격리하고 나머지 코어를 데이터 처리를 위해 예약합니다.

다음 단계