<?xml version="1.0" encoding="utf-8"?>
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="profiling" xml:lang="ko">
    <info>
      <link type="guide" xref="index#profiling"/>
    </info>
    <title>프로파일링</title>
  <section id="system-profiling">
    <title>시스템 프로파일링 방법</title>
    <p><app>시스프롭</app>에서 시스템을 프로파일링할 때는 커널 및 모든 프로그램의 실행 스택 정보를 기록합니다. 단일 프로세스만을 보려 할 경우 혼동을 줄 수 있습니다. 앱이 호스트 시스템과 충분한 상호 작용을 거치지 않는다면 <app>시스프롭</app>에서 <link href="profiling#new-process-profiling">새 프로세스를 실행</link>하여 더 원하는 정보를 볼 수 있습니다.</p>

    <p>전체 시스템을 프로파일링 하려면, 대상 단추를 <em>모든 프로세스</em>로 설정한 후 <em>기록</em>을 누릅니다.</p>

    <p>여기서,  시스템을 프로파일링할 때 접근 <em>승인 확인</em>을 받습니다. 리눅스 커널의 perf 구현체에서 전체 시스템 프로파일링을 수행할 때 루트 권한이 필요하기에 필요한 과정입니다.</p>

    <p>프로파일링 세션을 진행하는 동안, 몇초간 프로파일 활성 상태를 보게됩니다. <em>기록</em> 단추를 다시 누르면 프로파일링 세션을 멈춥니다. 이 동작이 끝나면, 호출 그래프를 보여줍니다.</p>

    <note>
      <p><app>시스프롭</app> 앱에서 프로파일링 호출 그래프를 보여주고 나면, <cmd>sysprof-cli</cmd>로 프로파일링 세션 기록을 생각해볼 수 있습니다. 이 명령행 프로그램은 나중에 볼 프로파일링 세션을 캡쳐하여 디스크에 저장합니다.</p>
    </note>

    <p>자세한 안내는 <link href="profiling#interpreting-results">결과 해석</link> 편을 살펴봅니다.</p>

  </section>

  <section id="new-process-profiling">
    <info>
      <link type="guide" xref="index#profiling"/>
    </info>
    <title>새 프로세스 프로파일링</title>

    <p>종종 프로파일링할 새 프로세스를 실행해야 할 경우가 생깁니다. 기록 창의 상단 측면에 <em>앱</em> 단추를 선택합니다. 명령과 작업 디렉터리 내용을 채워넣고, 추가로 필요한 환경변수도 넣습니다. 기록을 시작할 때 프로세스 실행을 시작합니다.</p>

    <note>
      <p>GTK+ 앱과 같은 현재 화면에 접근해야 할 프로세스를 실행한다면, <em>현재 환경 정보 전달</em>을 설정했는지 확인하는게 좋습니다.</p>
    </note>

  </section>

  <section id="sysprof-cli">
    <info>
      <link type="guide" xref="index#profiling"/>
    </info>
    <title>sysprof-cli 명령행 도구로 프로파일링하기</title>

    <p>부하를 최소화하려는 목적으로 <cmd>sysprof-cli</cmd> 명령행 도구를 사용할 수 있습니다. 어떤 인자 값 없이 실행하면, 전체 시스템을 기록하고 <file>capture.syscap</file> 파일에 출력 내용을 저장합니다. 이 파일을 <app>시스프롭</app>앱에서 열고 호출 그래프를 볼 수 있습니다.</p>

    <p>새 프로세스를 실행하려면 <cmd>sysprof-cli -- 'command'</cmd> 명령을 활용하고, 실행할 명령을 command 대신 지정합니다. 지정 명령은 현재 환경 정보를 전달받습니다.</p>

  </section>

  <section id="interpreting-results">
    <info>
      <link type="guide" xref="index#profiling"/>
    </info>
    <title>결과 해석</title>

    <p><app>시스프롭</app>의 프로파일링 결과는 세가지 섹션으로 나눕니다. 좌측 상단에는 프로파일링한 모든 함수의 목록입니다. 기록하는 동안 얼마나 자주 호출했는지에 따라 정렬하여 보여줍니다.</p>

    <note>
      <p>각 함수가 얼마나 많은 시간을 소요했는지 캡처하지 않은게 중요합니다. 추적 프로파일러에서는 실제로 기록해야 하는 정보입니다. 백분율은 샘플을 기록했을 때 현재 스택추적 영역에서 보여주는 함수가 얼마나 자주 나타났는지 헤아려 계산합니다.</p>
    </note>

    <p>함수 목록에서 함수를 선별한 후에는, 기록한 모든 함수 호출자를 하단 좌측에 보여줍니다. 스택추적 영역에서 해당 함수라 들어간 샘플의 백분율에 따라 정렬합니다.</p>

    <p>우측에는 선택한 함수의 모든 하위 요소를 보여줍니다. 함수 목록 또는 함수 호출자 목록에서 함수를 선택할 수 있습니다.</p>

    <note>
      <p>결과에 <em>- - 컨텍스트 스위치 - -</em>가 나타났다면, 해당 시점에 리눅스 커널에서 실행 앱을 전환했다는 의미입니다. <em>syscall</em> 또는 <em>signal</em>과 같은 요인이 이러한 현상을 야기할 수 있습니다.</p>
    </note>

  </section>

</page>
