CPU 성능 (CPU Performance)
Fly.io는 Machine용으로 shared와 performance 두 종류의 가상 CPU를 제공해요. 둘 다 동일한 물리 하드웨어에서 실행되고, 동일한 클럭 속도를 갖습니다. 차이는 애플리케이션 실행에 얼마나 많은 시간을 쓸 수 있는지에 있습니다.
출처: 문서
본문
Machine용으로 두 종류의 가상 CPU를 제공합니다: shared와 performance. 둘 다 동일한 물리 하드웨어에서 실행되고, 동일한 클럭 속도 등을 갖습니다. 차이는 애플리케이션 실행에 허용되는 시간이 얼마나 되는지입니다.
| CPU 유형 | 주기1 | 기본 할당량1 | 초기 버스트 잔액1 | 최대 버스트 잔액1 |
|---|---|---|---|---|
shared |
80ms | 5ms (6.25%) | 5s | 500s |
performance |
80ms | 80ms (100%) | - | - |
각 machine cgroup의 cpu.cfs_quota_us 설정을 조정하여 Linux 스케줄러의 CPU 대역폭 제어를 통해 제한을 시행합니다. 각 80ms 주기에 대해 shared vCPU마다 5ms의 할당량을 설정하거나, performance vCPU마다 전체 80ms 주기를 설정합니다. machine cgroup의 CPU 사용량이 할당량에 도달하면 해당 작업은 80ms 주기의 나머지 동안 '제한(throttle)'됩니다(다시 실행되도록 스케줄되지 않음).
할당량은 Machine의 vCPU 간에 공유됩니다. 예를 들어 shared-cpu-2x Machine은 어떤 vCPU가 그 시간을 사용하든 80ms 주기당 10ms 실행이 허용됩니다.
1 이 특정 숫자는 시간이 지남에 따라 변경될 수 있습니다.
버스팅 (Bursting)
API와 사람을 대상으로 하는 웹 애플리케이션은 지연 시간에 민감하며, 프로그램 실행에서 75ms의 일시 중지는 종종 받아들일 수 없어요. 이러한 유형의 애플리케이션은 종종 짧은 버스트로 열심히 작업하고 대부분의 시간은 유휴 상태입니다. shared vCPU의 성능을 이러한 애플리케이션에 맞게 개선하기 위해, 사용하지 않은 CPU 시간의 잔액을 누적할 수 있게 합니다. 그러면 애플리케이션은 잔액을 버스트로 사용할 수 있어요. 버스팅 중에는 vCPU가 최대 100%로 실행될 수 있습니다. 잔액이 소진되면 vCPU는 기본 할당량으로 실행되는 것으로 제한됩니다.
버스트 잔액은 기본 할당량을 초과하는 사용률에만 사용되므로, machine이 실제로 100%로 실행할 수 있는 시간은 누적된 잔액보다 길어요. 예를 들어 버스트 잔액이 500초인 shared CPU는 500/(1-.0625) = 533초 동안 버스트할 수 있습니다. 이 조정은 이미 대시보드 패널에 표시된 버스트 잔액에 적용되어 있습니다.
모니터링 (Monitoring)
여러분의 Machine의 할당량과 제한 동작을 모니터링하는 데 사용할 수 있는 다양한 인스턴스 로드 및 CPU 플랫폼 메트릭을 게시합니다. 이 메트릭을 시각화하는 가장 쉬운 방법은 Managed Grafana의 Fly Instance 대시보드에서 CPU Quota Balance and Throttling 패널을 사용하는 것입니다:
대시보드에서 사용률(0-100%)은 인스턴스의 총 vCPU 수로 나눈 vCPU당 평균으로 표시됩니다. (각 개별 vCPU에 걸친 사용률의 상세 내역을 위한 Per-CPU Utilization 패널도 있지만, 할당량은 Machine의 vCPU 간에 공유되므로 시행되는 한도에는 평균만이 중요합니다.)
여기에서 utilization이 baseline 할당량 65%보다 훨씬 아래에서 실행되고 50초의 버스트 balance를 축적한 Machine을 볼 수 있어요. 그런 다음 활동 버스트 동안 CPU 사용률이 기본 할당량을 초과하여 잔액이 소진되었습니다. 잔액이 0에 도달하자 Machine은 잠시 throttle되었습니다. CPU 사용률이 내려가자 제한이 끝나고 잔액이 다시 축적되었습니다.
관련이 있지만 다소 오해의 소지가 있는 메트릭은 CPU steal입니다. fly_instance_cpu 메트릭에서 mode=steal 레이블 아래에서 볼 수 있어요. Steal은 vCPU가 실행을 기다리고 있지만 스케줄러가 허용하지 않는 시간의 양입니다. 이는 Machine이 할당량을 초과하여 제한될 때 발생할 수 있지만, 같은 호스트의 다른 Machine이 리소스를 두고 경쟁하고 있다는 신호일 수도 있어요. 대시보드 패널에서는 CPU 할당량을 소비하지 않기 때문에 steal을 다른 CPU 사용률과 별도로 시각화합니다. 할당량 초과로 vCPU가 제한된 시간만 포함하는 별도의 fly_instance_cpu_throttle 메트릭도 게시합니다.