TheKoguryo's 기술 블로그

 Version 2024.04.01

3.9.1 Burstable Instances 사용하기

Burstable Instance는 Baseline의 기본 CPU 성능을 제공하며, 일시적으로 사용량이 늘어날때에는 더 높은 성능을 제공하는 가상 머신 인스턴스 타입입니다. 비용은 지정한 Baseline OCPU를 기준으로 과금됩니다.

Burstable 인스턴스 만들기

  1. OCI 콘솔에서 내비게이션 메뉴를 엽니다. Compute > Instances 항목으로 이동합니다.

  2. Instance를 생성할 Region을 확인하고 Create Instance 클릭합니다.

  3. Shape에서 Change shape을 클릭합니다.

  4. 다음 Shape에서 Burstable Instance을 선택할 수 있습니다.

    • VM.Standard3.Flex
    • VM.Standard.E3.Flex
    • VM.Standard.E4.Flex
  5. 선택한 Shape 상세항목을 클릭한후, Burstable을 선택합니다.

  6. Baseline OCPU를 12.5% 또는 50%에서 선택가능합니다. 여기서는 12.5%를 선택합니다. CPU와 Network Bandwith는 부하에 따라 Burst 됩니다. Memory는 Burst 되지 않으므로, 원하는 메모리를 선택합니다.

    image-20230424163929007

  7. 생성이 완료되었습니다.

    image-20230424163330523

  8. 1 OCPU * 12.5% 이므로 0.125 OCPU 에 대한 과금이 발생합니다. Burst시 사용한 추가 OCPU에 대해서는 비용이 발생하지 않습니다.

Burst 발생시키기

OCI 문서에서는 Burst 발생상황에 대해서 아래와 같이 설명하고 있습니다. 자세한 조건에 대한 추가적인 설명이 없는데, 이 부분에 대해서 테스트를 진행해 보겠습니다.

  • 지난 24시간 동안 평균 CPU 사용도가 Baseline 이하일 때, Baseline 이상으로 Burst를 허용합니다. Burst는 short period of time으로 한정되며, Burst Instance는 oversubscribed된 Compute 자원을 나누어 쓰는 것이지 때문에, Burst가 허용되는 상황에서, Burst를 요청하더라도, Burst 된다는 것을 보장하지는 않습니다.

    The ability to burst depends on the instance’s CPU usage pattern and the underlying server resource usage. If the instance’s average CPU utilization over the past 24 hours is below the baseline, the system will allow it to burst above the baseline. The burst is limited to a short period of time to ensure that resources are managed fairly. Because burstable instances are oversubscribed compute resources, there is no guarantee that an instance will be able to burst exactly when needed

  1. 조건에 맞추기 위해 Compute VM 생성후 지난 24시간 동안 그냥 두어, Baseline 이하로 CPU로 사용되게 합니다.

    image-20230424100738766

  2. CPU 사용량을 확인해 봅니다.

    최근 1시간 기준으로 user CPU가 평균 0.56%을 사용하고 있습니다.

    [opc@burstable-instance ~]$ sar 
    Linux 5.15.0-6.80.3.1.el8uek.x86_64 (burstable-instance)        04/24/2023      _x86_64_        (2 CPU)
    
    12:00:05 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    12:10:01 AM     all      0.61      0.00      0.41      0.00      1.14     97.84
    12:20:05 AM     all      0.58      0.00      0.40      0.00      1.01     98.01
    12:30:05 AM     all      0.49      0.00      0.41      0.00      0.97     98.13
    12:40:01 AM     all      0.59      0.00      0.41      0.00      1.01     97.99
    12:50:05 AM     all      0.56      0.04      0.41      0.00      1.07     97.92
    01:00:05 AM     all      0.57      0.00      0.40      0.00      1.06     97.98
    01:10:01 AM     all      0.52      0.00      0.41      0.00      1.04     98.03
    Average:        all      0.56      0.01      0.41      0.00      1.04     97.98
    
  3. 1 OCPU, 2 Thread에 맞게 CPU에 부하를 줍니다.

    $ stress --cpu 2
    
  4. 지난 24시간 동안 Baseline이하였기 때문에, 지금은 실제 Burst가 되어 user CPU가 99% 이상을 사용하고 있습니다. 1시간 정도가 지나면, user CPU는 11% 정도로 Baseline 이하로 떨어집니다. 발생하는 부하량은 변경되지 않았지만, steal CPU가 88.45% 정도로 올라가면서, user CPU가 떨진 것을 볼 수 있습니다.

    [opc@burstable-instance ~]$ sar -u 60
    Linux 5.15.0-6.80.3.1.el8uek.x86_64 (burstable-instance)        04/24/2023      _x86_64_        (2 CPU)
    
    01:20:22 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    01:21:22 AM     all     56.63      0.00      0.38      0.00      0.56     42.43
    01:22:22 AM     all     99.43      0.00      0.29      0.00      0.27      0.00
    01:23:22 AM     all     99.32      0.00      0.39      0.00      0.29      0.00
    ...
    02:20:22 AM     all     99.48      0.00      0.26      0.00      0.26      0.00
    02:21:22 AM     all     54.78      0.00      0.25      0.00     44.97      0.00
    02:22:22 AM     all     11.23      0.00      0.32      0.00     88.45      0.00
    02:23:22 AM     all     11.21      0.00      0.35      0.00     88.44      0.00
    02:24:22 AM     all     11.22      0.00      0.30      0.00     88.48      0.00
    02:25:22 AM     all     11.21      0.00      0.34      0.00     88.45      0.00
    
    • 01:21:22 ~ 02:21:22 까지 아래 그래프 처럼 1시간 정도 CPU는 일시적으로 최대한으로 사용하고, 강제로 Baseline이하로 떨어지게 됩니다.

    image-20230424115101550

  5. Steal time은 위키피디아에서 다음과 같이 설명하고 있습니다. 가상화 환경에서 OS가 CPU를 요청하였지만, 하이퍼바이저가 허용하지 않은 CPU의 시간으로 말하고 있습니다. OCI 내 하이퍼바이저가 사용자가 정의한 Baseline 이하로만 CPU를 허용하는 것을 볼 수 있습니다.

    • https://en.wikipedia.org/wiki/CPU_time
    • Steal time (for the whole system only), on virtualized hardware, is the amount of time the operating system wanted to execute, but was not allowed to by the hypervisor. This can happen if the physical hardware runs multiple guest operating system and the hypervisor chose to allocate a CPU time slot to another one.
  6. 문서에 처럼 24시간 Baseline 이하로 CPU를 사용하였을 때, Burst가 허용되는 상태에서, 실제 CPU 100%에 해당하는 부하가 발생하게 되면, 자원이 가용한 경우에 실제 Burst가 발생하게 됩니다. 이 때 문서에서 말한 short period of time이 테스트 결과에서는 1시간이었습니다.

Burst 시간 추정하기

  1. Burst 가능여부 및 가능 시간은 서비스 제공자의 구현방식에 따라 달라지겠지만, OCI Burstable Instance는 기본적으로 Credit을 기반으로 합니다.

    • 앞선 테스트에서 부하가 전혀 없는 휴지기에서 보인 User CPU를 0.56%을 가정합니다.
    • 초당 쌓이는 Credit: Baseline - 0.56 = 12.5% - 0.56% = 11.94%
    • 100이 되는 시간: 11.94% * 9초 = 107.46%
    • 즉, 평균 User CPU 0.56%로 9초 정도 사용하면, User CPU 100%를 1초동안 사용할 수 있는 Credit이 쌓이게 됩니다.
  2. Credit이 없는 상태에서 90분간 아무런 부하가 없는 상태에서, 쌓이는 Credit을 계산하여, Burst할 수 있는 시간을 추정해 보면 다음과 같습니다.

    • 계산 편의상 휴지기에서 User CPU: 1%
    • (Baseline - 1%) * 60초 * 90분 = (12.5 - 1) * 60 * 90 = 62,100
    • 62,100 / 100% = 621초 = 10분 21초
    • 즉, Baseline이 12.5%일때, 평균 User CPU 1%로 90분간 사용하면, User CPU 100%를 10분 21초가 사용할 수 있는 Credit이 쌓입니다.
  3. 검증을 테스트를 순서대로 진행합니다.

    1. 90분간 부하를 주지 않습니다.

    2. 부하를 발생시킵니다.

      $ stress --cpu 2
      
    3. Burst가 끝나고, User CPU가 다시 Baseline 이하로 내려가는 것을 확인합니다.

    4. 테스트 결과

      • 03:00:53 ~ 04:29:53: 부하 없음
      • 04:30:53 ~ : 부하 발생
      • 04:30:53 ~ 04:39:53 : Steal CPU에 제한없이 User CPU를 99.5% 사용
      • 04:41:53 ~ : Steal CPU가 88.5%로 올라가고, User CPU는 Baseline이하인 11.x%로 내려감.
      [opc@burstable-instance ~]$ sar -u 60
      Linux 5.15.0-6.80.3.1.el8uek.x86_64 (burstable-instance)        04/24/2023      _x86_64_        (2 CPU)
      
      02:58:53 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
      02:59:53 AM     all     11.25      0.00      0.28      0.00     88.48      0.00
      03:00:53 AM     all      6.55      0.00      0.46      0.02     51.70     41.27
      03:01:53 AM     all      0.51      0.00      0.49      0.00      1.20     97.81
      ...
      04:29:53 AM     all      0.48      0.00      0.42      0.01      1.05     98.04
      04:30:53 AM     all     48.06      0.00      0.38      0.00      0.82     50.73
      04:31:53 AM     all     99.49      0.00      0.28      0.00      0.23      0.00
      04:32:53 AM     all     99.50      0.00      0.25      0.00      0.25      0.00
      ...
      04:39:53 AM     all     99.45      0.00      0.30      0.00      0.25      0.00
      04:40:53 AM     all     49.12      0.00      0.32      0.00     50.56      0.00
      04:41:53 AM     all     11.14      0.00      0.34      0.00     88.53      0.00
      04:42:53 AM     all     11.13      0.00      0.34      0.00     88.53      0.00
      04:43:53 AM     all     11.18      0.00      0.29      0.00     88.54      0.00
      ...
      
      • Baseline이 12.5%일때, 평균 User CPU 1%로 90분간 사용하면, User CPU 100%를 10분 가량을 사용할 수 있습니다.

      image-20230424142642493

  4. 테스트 결과, Baseline 이하로 사용한 CPU 사용량을 Credit으로 쌓아, Burst가 필요한 상황에 해당 Credit 만큼 사용하는 것을 볼 수 있습니다. 또한 첫번째 테스트에서 보듯이, 24 시간 동안 쌓인 Credit을 사용하는 경우에는 최대 1시간 Burst 되는 것을 확인할 수 있었습니다.



이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.

Last updated on 24 Apr 2023