이 강의는 정말 프로파일링 삽질기 과정? 을 소개해주는 시간이었다.


프로파일링을 할때에는 가장 문제가 되는 부분을 고치는 것이 효율이 좋다.

즉 10%를 차지하는 부분을 1/10로 최적화하여 1%로 만드는것보다 

90%를 차지하는 부분을 1/3 최적화하여 30%로 만드는 것이 더 좋다는 것.


프로파일링 방식에는 코드삽입 방식과 샘플링 방식이 있는데.

코드삽입은 직접 체크하는 함수를 넣는다. 그렇기에 시간이 적게들고 직접눈으로 확인할 수 있지만 코드가 수정된다.

샘플링은 일정시간마다 콜스택을 수집하여 통계를 내는것으로 시간을 많이필요로 하지만 그만큼 더 정확하다.


최적화를 하다보면 최신폰에서는 성능문제가 거의 발생하지않으나 특정 폰에서만 문제가 발생한다.


프로파일링 툴로는

아이폰에서는 Instrument가 제일 좋지만.

안드로이드에서는 그렇지않아 여러가지를 테스트해보았다.


1. 안드로이드 스튜디오 프로파일러 -> 자바만됨

2. NDK 프로파일러 -> 2015년 이후 지원 x

3. fplutil -> 지원 기계 고작 2개

4. 유니티 내장 프로파일러 -> 빠르게 상황파악 도움되어 많이 사용한다.

그렇지만 콜스택 보려면 직접 코드추가(Deep Profile)하여야 하며 프레임이 눈에띄게 떨어진다. 그리고 왜곡

5. Snapdragon 프로파일러 -> 최신칩전용

6. NVIDIA Tegra 프로파일러 -> Tegra칩 전용


조사 끝에 simpleperf라는 툴을 사용했으나 그렇게 쓸만하진 않다.

simpleperf binary 복사 → 앱실행 → simpleperf 실행 → 로그 확인


이후 reporyt.py를 실행하면 로그가 이쁘게 나온다.


FlameGraph

프로파일링 결과를 그래프로 나타내는 프로그램으로 perf와 파일형식이 동일해 사용가능하다.

시간과 콜스택 깊이를 나타낸다.


작업하다보니 256개까지만 쌓고 수집못하는경우가 발생해 자동 재실행툴을 개발.



그렇게 원인을 찾아내니

Pool에서 꺼내온후 특정조건에 따라 Add Component를 실행하는데

데이터를 추적해본 결과 100%의 오브젝트가 Add Component를 실행하더라.

그래서 조건에 따라 실행하지않고 Pooling 생성시 추가하였더니 50% 성능향상이 일어남.


Posted by misty_
,