코어당 스레드 수를 설정합니다.


Intel 프로세서에서 하이퍼 스레딩 기술(HTT)이라고 부르는 동시 멀티스레딩(SMT)을 통해 CPU 코어가 2개의 하드웨어 멀티스레드로 실행됩니다. Compute Engine에서 각 가상 CPU(vCPU)는 단일 하드웨어 멀티스레드로 구현되며 두 vCPU는 기본적으로 각각의 물리적 CPU 코어를 공유합니다.

Compute Engine을 사용하면 코어당 스레드 수 값을 수동으로 설정할 수 있습니다. 예를 들어 다음과 같은 우려 사항이 있는 워크로드의 경우 코어당 스레드 수를 1로 설정하면 SMT 사용 중지에 도움이 될 수 있습니다.

  • 성능: 각 물리적 CPU 코어에서 실행되는 스레드 수를 줄이면 병렬이거나 부동 소수점 계산을 수행하는 워크로드의 성능이 향상될 수 있습니다.

  • 보안: VM이 신뢰할 수 없는 코드를 실행하는 경우 코어당 스레드 수를 줄이면 마이크로아키텍처 데이터 샘플링과 같은 CPU 취약점이 완화될 수 있습니다.

  • 라인선스: 일부 라이선스 계약에는 vCPU 소비 수와 관련된 요구사항이 포함됩니다. 코어당 스레드 수를 2에서 1로 줄이면 라이선스 비용이 줄어들 수 있습니다. 자세한 내용은 라이선스 계약을 참조하세요.

여러 일반적인 컴퓨팅 작업이나 많은 I/O가 필요한 작업의 경우 SMT에서 애플리케이션 처리량을 크게 늘릴 수 있습니다. 두 가상 코어가 모두 컴퓨팅 바운드인 계산 바운드 작업의 경우, SMT를 사용하면 전체 애플리케이션 성능이 저하되고 작업에 예기치 않은 분산이 추가될 수 있습니다. 이 경우 SMT를 사용 중지하면 예측 가능한 성능이 향상되고 작업 시간이 줄어들 수 있습니다.

제한사항

  • 다음 머신 유형의 VM에서는 코어당 스레드 수를 설정할 수 없습니다.

  • C3 및 X4 베어메탈 인스턴스의 경우 액세스할 수 있는 하이퍼스레드 수는 머신의 하이퍼스레드 수와 같습니다.

  • Google Cloud 콘솔에서 코어당 스레드 수가 1로 설정되면 CPU 사용률 측정항목은 최대 50%까지 확장될 수 있습니다. 코어당 스레드 수를 2로 설정하면 CPU 사용률 측정항목을 최대 100%까지 확장할 수 있습니다.

가격 책정

각 코어에서 실행되는 스레드 수가 아닌 VM의 머신 유형에 따라 정의된 vCPU 수에 대한 요금이 청구됩니다. 예를 들어 n2-standard-8 머신 유형은 물리적 CPU 코어 4개당 vCPU 2개로 최대 8개의 vCPU를 실행할 수 있습니다. n2-standard-8 머신 유형을 사용하는 경우 코어당 1개의 스레드(사실상 vCPU 4개)만 실행하기로 결정해도 vCPU 8개에 대한 요금이 계속 청구됩니다. VM 요금 청구 방법에 대한 자세한 내용은 VM 인스턴스 가격 책정을 참조하세요.

VM을 만드는 동안 코어당 스레드 수 변경

VM 생성 중에 코어당 스레드 수를 변경하려면 Google Cloud 콘솔, gcloud CLI 또는 Compute Engine API를 사용합니다.

이 태스크에 필요한 권한

이 태스크를 수행하려면 다음과 같은 권한이 있어야 합니다.

콘솔

VM 생성 중에 코어당 스레드 수를 변경하려면 다음 Google Cloud 콘솔 절차를 사용합니다.

  1. Google Cloud 콘솔에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기로 이동

  2. 이름 필드에 VM의 이름을 입력합니다.

  3. VM의 리전영역을 선택합니다.

  4. 머신 계열 및 지원되는 머신 유형을 선택합니다.

  5. 고급 구성을 클릭하여 섹션을 펼칩니다.

  6. vCPU 대 코어 비율에서 코어당 스레드 수를 선택합니다.

  7. VM에 대한 다른 설정 구성을 완료하고 만들기를 클릭합니다.

gcloud

VM을 만드는 동안 코어당 스레드 수를 변경하려면 gcloud compute instances create 명령어를 사용합니다.

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • VM_NAME: 새 VM의 이름입니다.
  • ZONE: 새 VM의 영역입니다.
  • MACHINE_TYPE: 새 VM의 머신 유형입니다. vCPU가 2개 이상인 머신 유형이어야 합니다.
  • THREADS_PER_CORE: 물리적 코어당 스레드 수입니다. 2 또는 1로 설정합니다.

다음 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud compute instances create VM_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --threads-per-core=THREADS_PER_CORE

Windows(PowerShell)

gcloud compute instances create VM_NAME `
    --zone=ZONE `
    --machine-type=MACHINE_TYPE `
    --threads-per-core=THREADS_PER_CORE

Windows(cmd.exe)

gcloud compute instances create VM_NAME ^
    --zone=ZONE ^
    --machine-type=MACHINE_TYPE ^
    --threads-per-core=THREADS_PER_CORE

다음과 비슷한 응답이 표시됩니다.

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME].
NAME: VM_NAME
ZONE: ZONE
MACHINE_TYPE: MACHINE_TYPE
PREEMPTIBLE:
INTERNAL_IP: EXTERNAL_IP
EXTERNAL_IP: INTERNAL_IP
STATUS: RUNNING

REST

VM 생성 중에 코어당 스레드 수를 변경하려면 instances.insert 메서드threadsPerCore 필드와 함께 사용합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • ZONE: 새 VM의 영역입니다.
  • MACHINE_TYPE: 새 VM의 머신 유형입니다. vCPU가 2개 이상인 머신 유형이어야 합니다.
  • VM_NAME: 새 VM의 이름입니다.
  • THREADS_PER_CORE: 물리적 코어당 스레드 수입니다. 2 또는 1로 설정합니다.

HTTP 메서드 및 URL:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

JSON 요청 본문:

{
  "machineType": "projects/PROJECT_ID/zones/ZONE/machineTypes/MACHINE_TYPE",
  "name": "VM_NAME",
  "advancedMachineFeatures": {
    "threadsPerCore": THREADS_PER_CORE
  },
  "disks": [
    {
      "type": "PERSISTENT",
      "boot": true,
      "initializeParams": {
        "sourceImage": "projects/debian-cloud/global/images/family/debian-11"
      }
    }
  ],
  "networkInterfaces": [
    {
      "network": "global/networks/default"
    }
  ]
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "kind": "compute#operation",
  "id": "7334609091572405391",
  "name": "operation-1663806045894-5e939085735d8-7499db32-c12fcc03",
  "zone": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE",
  "operationType": "insert",
  "targetLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME",
  "targetId": "1226375378512516273",
  "status": "RUNNING",
  "user": "EMAIL_ADDRESS",
  "progress": 0,
  "insertTime": "2022-09-21T17:20:48.751-07:00",
  "startTime": "2022-09-21T17:20:48.751-07:00",
  "selfLink": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/operations/operation-1663806045894-5e939085735d8-7499db32-c12fcc03"
}

VM에서 코어당 스레드 수 변경

VM의 코어당 스레드 수를 변경하려면 Google Cloud 콘솔, gcloud CLI 또는 Compute Engine API를 사용합니다.

이 태스크에 필요한 권한

이 태스크를 수행하려면 다음과 같은 권한이 있어야 합니다.

  • 프로젝트에 대한 compute.instances.get
  • 프로젝트에 대한 compute.instances.update 권한

콘솔

기존 VM의 코어당 스레드 수를 변경하려면 다음 Google Cloud 콘솔 절차를 사용합니다.

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. VM의 이름을 클릭합니다.

  3. VM 상태실행 중이면 중지를 클릭합니다.

  4. 수정을 클릭합니다.

  5. 고급 구성을 클릭하여 섹션을 펼칩니다.

  6. vCPU 대 코어 비율 드롭다운 목록에서 코어당 스레드 수를 선택합니다.

  7. 저장을 클릭합니다.

gcloud

기존 VM에서 코어당 스레드 수를 변경하려면 다음을 수행합니다.

  1. 다음 gcloud compute instances export 명령어를 사용하여 VM 속성을 내보냅니다.

    gcloud compute instances export VM_NAME \
        --destination=YAML_FILE_PATH \
        --zone=ZONE
    

    다음을 바꿉니다.

    • VM_NAME: 속성을 내보낼 VM의 이름입니다.

    • YAML_FILE_PATH: 내보낸 구성 데이터를 저장할 .yaml 파일의 경로와 파일 이름입니다.

    • ZONE: VM이 포함된 영역입니다.

  2. FILE_PATH에 저장된 VM 구성 파일에서 threadsPerCore 값을 업데이트합니다. 값이 파일에 없으면 다음을 추가합니다.

    advancedMachineFeatures:
      threadsPerCore: THREADS_PER_CORE
    
  3. 다음 gcloud compute instances update-from-file 명령어를 사용하여 코어당 새 스레드 수로 VM을 업데이트합니다.

    gcloud compute instances update-from-file VM_NAME \
        --source=FILE_PATH \
        --most-disruptive-allowed-action=RESTART \
        --zone=ZONE
    

    다음을 바꿉니다.

    • VM_NAME: 업데이트할 VM의 이름입니다.

    • FILE_PATH: 업데이트된 VM 구성 파일의 경로입니다.

    • ZONE: 업데이트할 VM이 포함된 영역입니다.

REST

기존 VM에서 코어당 스레드 수를 변경하려면 다음 instances.update 메서드를 사용합니다.

PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME?most_disruptive_allowed_action=RESTART

{
  ...
  "advanced_machine_features": {
    ...
    "threadsPerCore": "THREADS_PER_CORE"
  },
  ...
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID

  • ZONE: VM이 포함된 영역입니다.

  • VM_NAME: 속성을 내보낼 VM의 이름입니다.

  • THREADS_PER_CORE: 코어당 스레드 수입니다.

코어당 스레드 수 보기

코어당 스레드 수를 보려면 VM에서 실행 중인 OS에 해당하는 절차를 따릅니다.

Linux

Linux 기반 VM에서 코어당 스레드 수를 보려면 다음 절차를 사용합니다.

  1. Linux VM에 연결합니다.

  2. lscpu 명령어를 실행합니다.

    lscpu
    
  3. 코어당 스레드 수를 보려면 출력을 검토합니다.

    n2-standard-16 머신의 다음 샘플 출력에서 코어당 스레드 수 값은 Thread(s) per core 줄에 표시된 1입니다.

    ...
    CPU(s):                          8
    On-line CPU(s) list:             0-7
    Thread(s) per core:              1
    Core(s) per socket:              8
    Socket(s):                       1
    NUMA node(s):                    1
    Vendor ID:                       GenuineIntel
    CPU family:                      6
    Model:                           85
    Model name:                      Intel(R) Xeon(R) CPU @ 2.80GHz
    ...
    

Windows

Windows 기반 VM에서 코어당 스레드 수를 보려면 다음 절차를 사용합니다.

  1. Windows VM에 연결합니다.

  2. PowerShell을 시작합니다.

  3. 다음 명령어를 실행합니다.

    Get-WmiObject -Class Win32_processor | Select-Object NumberOfCores, @{Name="Thread(s) per core";Expression={$_.NumberOfLogicalProcessors/$_.NumberOfCores}}
    
  4. 코어당 스레드 수를 보려면 출력을 검토합니다.

    n2-standard-16 머신의 다음 샘플 출력에서 코어당 스레드 수 값은 Thread(s) per core 열에 표시된 1입니다.

    NumberOfCores Thread(s) per core
    ------------- ------------------
                8                  1
    

다음 단계