2008. 12. 24. 15:03

Q] 프로그램의 성능 측정은 어떤 원리로 가능한것인가요?

프로그램의 성능이나 부하 등을 측정해주는 프로그램을 profiler라고 부른다고 알고있는데요
이러한 프로그램들은 어떤 원리에 의해서 가능한것인가요?

함수이름과 그 함수의 호출횟수와 전체적인 비율이나 메모리 사용량까지 세세하게 나오는것으로 알고있는데
이는 운영체제의 도움을 받아 스스로 돌아가는 일반적인 프로그램과는 달라보이는거 같아서요

조금 오바해서 지금 나는 돌주먹으로 나무를 패고있는데 옆에서 달나라 로켓이 하늘을 뚫고 우주로 솟아오르는 광경을 본 느낌 같은걸 받았어요;

대략적이나마 호기심을 채울수 있을 정도의 설명이라도 부탁드립니다 (__)

A] 흔히 사용되는 방법으로 instrumentation과 sampling, simulation이 있는데요,

instrumentation은 코드 사이사이에 측정을 위한 코드를 집어 넣는 것입니다.
예를 들어 함수의 호출 횟수를 측정하고 싶으면
어딘가에 카운터를 위한 공간을 잡아 놓고 함수 시작에 카운터를 증가시키는 코드를 넣어 두면 되겠지요.
그리고 요즘 cpu들에는 대개 performance monitor를 제공하기 때문에,
cpu time을 측정할 때 performance counter를 읽는 코드를 삽입하기도 합니다.

sampling은 말 그대로 주기적으로 표본을 뽑는 것인데요,
예를 들어 cpu time을 측정하려고 할 때
특정 시간 마다 interrupt를 발생시켜 현재 program counter가 어느 함수 위치에 있는지를 보는 것이지요.
그러면 전체 실행 시간 중 특정 함수가 차지하는 비율을 sample의 비율로 생각하는 것입니다.

simulation은 java vm 처럼 프로그램을 가상의 cpu, memory를 가진 virtual machine에서 수행하면서
cycle 수, 메모리 사용량 등등을 측정하는 것입니다