# 프로파일링

# 시스템 프로파일링 방법

시스프롭에서 시스템을 프로파일링할 때는 커널 및 모든 프로그램의 실행 스택 정보를 기록합니다. 단일 프로세스만을 보려 할 경우 혼동을 줄 수 있습니다. 앱이 호스트 시스템과 충분한 상호 작용을 거치지 않는다면 시스프롭에서 새 프로세스를 실행하여 더 원하는 정보를 볼 수 있습니다.

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

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

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

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

자세한 안내는 결과 해석 편을 살펴봅니다.

# 새 프로세스 프로파일링

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

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

# sysprof-cli 명령행 도구로 프로파일링하기

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

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

# 결과 해석

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

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

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

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

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