지난 글
지난번에 이어 uftrace에 대해 알아보겠습니다.
record/replay
uftrace 는 실행 결과를 기록(저장)하고 반복해서 출력 가능하도록 기능을 지원합니다.
$ uftrace recorde ./test |
기본적인 uftrace 명령어를 실행할 경우 함수 추적 결과가 나오지만 recorde 명령어를 함께 사용할 경우 프로그램 자체의 실행 결과만을 보여줍니다. 대신 uftrace.data 디렉토리가 생기는것을 볼 수 있습니다. 이 디렉토리는 앞서 실행한 recorde 의 결과를 저장한 디렉토리입니다. 하지만 디렉토리내의 파일을 직접 열어볼 경우는 가공되지않은 데이터로 보여지게 됩니다. 기록된 데이터를 보기위해선 replay 명령어를 실행합니다.
$ uftrace replay |
* replay 명령어는 uftrace.data 디렉토리를 필요로하며 만약 디렉토리가 존재하지 않는다면 에러를 출력합니다.
커널 함수 추적: -k 옵션
옵션 없이 사용할 경우 유저 레벨의 함수만 출력을 해주는 반면, -k 옵션을 사용할 경우 커널 레벨의 함수를 출력할 수 있습니다. 이때 반드시 슈퍼유저 권한으로 실행해야합니다.
* 이전 실행 결과까지는 별도의 예제 파일을 작성해서 테스트했지만 이후 예제부터는 uftrace내에 포함된 소스파일을 이용했습니다.
~/uftrace/tests
$ sudo uftrace -k fork |
역시 리눅스 커널은 fork죠
필터
너무 많은 함수 결과가 출력되서 오히려 보기 불편하다고 느껴질 수 있는데 이 때 필터 옵션들을 사용해 출력 결과를 좀 더 간단히 만들 수 있습니다.
-D 옵션
함수 호출의 깊이(Depth)를 출력해주는 함수입니다.
$ sudo uftrace -k -D 2 fork |
-k 옵션에서 -D 2를 추가한 결과입니다. 편의상 확연하게 차이점이 보이는 부분을 캡쳐했습니다. 이전 결과에서는 a(), b(), c(), get_pid() 함수가 차례로 불렸는데 -D함수에서는 a까지만 출력되는 모습을 보이고있습니다.
-F 옵션
특정 함수의 결과만 출력하는 옵션입니다. b()함수를 출력하기위해선 다음과 같이 입력해줍니다.
$ sudo uftrace -k -F b fork |
-N 옵션
특정 함수를 제외한 결과를 출력하는 옵션입니다. b() 함수를 출력에서 제외하기위해선 다음과 같이 입력해줍니다.
$ sudo uftrace -k -N b fork |
-t 옵션
특정 실행시간 이상 소요되는 함수를 출력하는 옵션입니다. 10us 이상 소요되는 함수들만 출력하기위해선 다음과 같이 입력해줍니다.
$ sudo uftrace -k -t 10us fork |
'공부 > 리눅스' 카테고리의 다른 글
uftrace 를 이용한 함수 추적 (0) | 2021.01.29 |
---|---|
2. Docker Image Build를 이용한 클러스터링 용 도커 이미지 생성 (0) | 2020.08.09 |
1. Docker 를 이용한 RabbitMQ 클러스터링 (1) | 2020.07.30 |
(ubuntu 16.04)ssh algorithm negotiation failed (0) | 2016.12.08 |
리눅스 커널 맵 (0) | 2015.12.28 |