Emacs에서 함수 퍼포먼스 측정하기(Profiler)
Emacs Lisp 코드도 사람이 작성하든 AI가 작성하든 버그가 없을 수가 없다. 그 중에서 가장 사람을 괴롭히는 버그로 사용성을 떨어뜨리는 퍼포먼스 문제가 있다. 키를 하나 눌렀는데 잠깐 멈추는 증상이 발생한다면 얼마나 답답할까. 솔직히 이런 버그를 만나게 되면 Emacs를 쓰기 싫을 정도로 기분이 나빠지게 되기도 한다.
그렇다면 이런 문제를 경험했을 때 무엇이 원인인지 어떻게 알 수 있을까?
Emacs는 기본적으로 이런 경우를 위한 Profiler 도구를 제공한다.
Emacs Profiler 사용법
Profiler 사용법은 간단하다. 우선 profiler-start
함수를 실행시킨다.
M-x profiler-start
이 함수를 실행시키면 cpu, mem, cpu+mem 중 무엇을 측정할 것인지를 먼저 물어온다. 유추 가능하겠지만 CPU 점유율 및 메모리 사용량을 의미하며 원하는 것을 선택하면 된다.
측정을 원하는 항목을 선택하면 다시 일상적인 화면으로 돌아오는데 이제 원하는 커맨드나 기능을 실행시켜서 퍼포먼스가 떨어지는 상황을 연출한다.
이후 원하는 상황이 나왔다면 profiler-repot
함수를 실행시켜 보자.
M-x profiler-report
이러면 뭔가 복잡해 보이는 내역이 새로운 윈도우로 나타난다. 이 내역은 profile-start
함수가 실행되고 나서 profile-report
함수가 실행되기까지 중간에 실행된 각종 코드들의 측정 내역을 트리 형식으로 정리해서 보여준다. 여기의 내용을 살펴보면서 어떤 함수가 실행에 얼마나 시간이 걸렸는지 혹은 메모리를 얼마나 사용했는지를 파악할 수 있다.
당연하겠지만 트리 형식이기 때문에 세부 내역을 탭 키를 이용해 펼쳐 볼 수 있다.
여담
이런 식으로 문제의 원인을 찾고 버그를 수정할 수 있다면 참 좋겠다. 하지만 개인적인 실력으론 아직 Emacs Lisp이 난해하다고 느끼고 있어서 오픈소스 패키지의 버그를 수정해 본 경험은 없다.
다만 이 도구로는 문제가 되는 패키지를 찾을 수는 있다. 따라서 해당 패키지를 제외시키는 식으로 설정을 고치는 데는 큰 도움이 되었다.