영역 버킷의 gcloud CLI 성능 조정

Google Cloud CLI를 사용하여 Rapid Bucket의 영역 버킷에서 객체를 읽으면 CLI는 사용 가능한 시스템 리소스에 따라 기본 동시성 및 슬라이싱 구성을 자동으로 적용합니다.

이 문서에서는 이러한 기본 구성을 설명하고, 동시 실행, 프로세스 확장, NIC 격리와 같은 선택 기능 구성으로 특정 워크로드에 맞게 gcloud CLI 성능을 조정하는 방법을 설명합니다.

성능 설정을 조정하기 전에 영역 버킷을 만들어야 합니다. Hyperdisk 또는 로컬 SSD와 같은 연결된 스토리지 볼륨에 객체를 다운로드하는 경우 환경에서 볼륨을 포맷하고 마운트합니다. gcloud CLI를 사용하는 대신 영역 버킷을 파일 시스템으로 마운트하려면 Rapid Bucket의 Cloud Storage FUSE 성능을 참고하세요. 일반적인 슬라이싱 개념은 슬라이스된 객체 다운로드를 참고하세요.

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

이 섹션에 설명된 기본 구성은 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

동시 실행 및 슬라이싱 속성 구성

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

  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 LOCAL_DESTINATION_PATH

    다음을 바꿉니다.

    • BUCKET_NAME: 영역 버킷의 이름입니다.
    • SOURCE_PATH: 버킷의 소스 디렉터리 또는 객체 경로입니다.
    • LOCAL_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 실행)

예를 들어 vCPU가 80개 이상인 머신에서 타겟이 작업자 프로세스 64개인 경우 storage/process_count64로 설정합니다. vCPU가 80개 미만인 머신에서는 storage/process_count를 사용 가능한 vCPU의 80% 로 설정합니다 (예: 64vCPU VM의 경우 51).

스레드 수

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

각 작업자 프로세스를 vCPU가 48개 이상인 머신의 단일 스레드로 제한하면 Python 전역 인터프리터 잠금 (GIL) 및 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개가 생성됩니다.

gcloud CLI는 총 작업자 용량 (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 슬라이스) 작업자 프로세스 64개를 모두 완전히 활용합니다. 반면 512MiB 객체에서 component_size=128 MiB를 사용하면 객체당 슬라이스가 4개 (총 슬라이스 16개)만 생성되어 작업자 프로세스 48개가 유휴 상태로 남습니다.

NIC 격리

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

gcloud config set storage/use_nic_isolation True

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

다음 단계