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

gurumong의 이미지

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

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

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

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

prio의 이미지

흔히 사용되는 방법으로 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 수, 메모리 사용량 등등을 측정하는 것입니다.

gurumong의 이미지

답변 감사드립니다 (__)

언제인가 능력이 갖춰진다면 꼭 만들어보고 싶네요 T.T

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.