Performance Methodologies

성능 분석의 목표는 End-user 성능을 향상시키고 소프트웨어 동작에 대한 비용을 줄이기 위한 활동이며, 이러한 활동은 측정 가능한 측면, 요소등을 통해 달성하고자 하는 기대 성능 목표를 설명하는데 도움이 된다.

성능을 얘기할 때 측정 가능한 요소들은 빠질 수 없습니다. 먼저 측정가능한 요소에 대한 용어를 먼저 정의하려 한다.

  • latency : 어떤 요청에 대한 응답을 받기까지 기다려야 하는 시간
  • Rate : 초 당 동작 또는 요청 수
  • Throughput : 단위 시간 당 처리량
  • Utilization : 요청을 서비스하는 자원의 경우 그 자원이 얼마나 바쁜 상태인가를 측정하는 기준
  • Cost : 가격 대비 성능 비율

위에 나열한 정의 외에도 매우 다양한 요소들이 있다. 다른 부분은 필요할 때 설명하려 한다.

Performance Methodologies

이제 진짜 이 글에서 말하고싶은 내용이다. 성능 분석을 처음 시작하려 하면 무엇부터 해야할지 감이 잘 오지 않는다.(매우 쉽거나, 명확한 문제를 제외하면..) 다양한 툴들이 존재하지만 그 툴에서 제공하는 데이터의 의미가 무엇인지 어떻게 사용해야 할지도 어렵기만하다. 그렇기에 다양한 사람들이 성능 분석에 대한 여러 방법론을 제시하였고, 그 중 몇 가지를 정리해 보려 한다.

성능 분석 방법론을 정의하면 아래와 같다

Process you can follow that provides a starting point, steps, and an ending point.

즉, 성능 분석을 위해, 시작과 나가야할 방법, 끝점을 제시하여 따라갈 수 있도록 하는 과정이다.

1. Workload Characterization (부하 특성 평가 방법)

Workload characterization은 성능 분석 방법론에 있지만 성능에 직접적으로 관심을 가지는 방법론은 아니다. 이 방법론은 시스템에 가해진 부하에 의해 생겨난 문제가 어떤 종류의 것인지 식별하는 방법으로 많이 사용된다. 그렇기에 성능보다는 시스템에 가해진 부하에 더 초점을 맞춘다.

Workload characterization 을 수행하기 위한 단계는 아래와 같다.

  1. Who is causing the load?

    • 누가 부하를 발생 시키는가? 프로세스? 스레드? 그 외 무엇인가?
  2. Why is the load called?

    • 왜 부하가 발생하는가? 코드 경로 어떠한가? 스택 트레이스, 플레임 그레프 등으로 확인할 수 있는가?
  3. What is the load?

    • 부하가 무엇인가? 측정할 수 있는가? IOPS, Throughput, letency?
  4. How is the load changing over time?

    • 부하가 시간에 따라 어떻게 변하는가? 패턴이 있는가?

2. Drill-Down Analysis

Drill-Down 방법은 가장 많이 사용되는 방법이며, 여러분 중에서도 방법론 이름을 모를 뿐 흔히 사용하는 방법 중 하나다.

Drill-Down 방법론은 이름에서 유추할 수 있듯이 높은 곳에서 낮은 곳으로 파고 들어가는 것이다. 문제는 더 높은 곳에서 살펴보고 거기서 발견한 것을 기초로 관심이 없는 범위는 제외하고 문제의 대상을 다시 좁혀나가며 관심이 있는 대상에 대해 더 깊이 파고드는 분석 방법이다.

좀 더 각 단계에 대해 설명하면 아래와 같다.

  1. 높은 레벨에서 분석을 시작하라.
  2. 좀 더 깊숙한 다음 단계로 상세하게 조사하라.
  3. 관심있는 부분이나 단서를 발견하고 분석하라.
  4. 만약 문제가 해결되지 않는다면 2번 단계로 다시 돌아가라.

3. USE Methodologies

USE 방법론의 정의부터 언급하고 시작하자.

For every resource, check utilization, saturation, and errors.

모든 자원에 대해, Utilization, Saturation, 그리고 Errors를 확인하는 방법입니다. 이 방법론은 성능 검토 초기 단계에서 시스템의 병목 지점을 분석하기 위해 자주 사용되는 방법론입니다.

시작하기 전에 용어에 대해 정리하자면 아래와 같습니다

  • Resource : 모든 물리적인 서버 구성 요소로 CPU, DISK, Memory, Network 등을 일컫는다.
  • Utilization : 사용률, 어떤 특정 시간ㄷ 동안 자원이 작업을 하느라 사용한 비율
  • Saturation : 포화도, 어떤 자원이 처리 불가능한 추가 작업을 얼마나 가지고 있는지를 보여주는 정도
  • Errors : 오류율, 발생한 오류의 횟수