모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) YoungSu Son
모바일 앱 성능 분석 방법에 대해서 설명을 드립니다
- 기존 서버 APM과 모바일에서의 성능 기준의 차이
- 모바일 제약사항및 아키텍처
- 안드로이드는 어떻게 발전해 왔나
- Vectorization
- Loop
- Redex / Optimized Layout
- Garbage Collector
- 제조사가 보장해야 되는 성능
- 개발사가 고민해야 되는 영역
- 실사례 설명
- 갤럭시노트 2의 점유율
- Xiaomi 폰의 국내 4위 시장 점유율
- 여러가지 모바일 성능 리포트
모바일 앱 성능 분석 방법 101 (Mobile Application Performance Analysis Methodology 101) YoungSu Son
모바일 앱 성능 분석 방법에 대해서 설명을 드립니다
- 기존 서버 APM과 모바일에서의 성능 기준의 차이
- 모바일 제약사항및 아키텍처
- 안드로이드는 어떻게 발전해 왔나
- Vectorization
- Loop
- Redex / Optimized Layout
- Garbage Collector
- 제조사가 보장해야 되는 성능
- 개발사가 고민해야 되는 영역
- 실사례 설명
- 갤럭시노트 2의 점유율
- Xiaomi 폰의 국내 4위 시장 점유율
- 여러가지 모바일 성능 리포트
[IGC 2017] 엔지메이킹 이대희 - 이제는 웹에서 게임을 만들 수 있는 환경 'Construct3를 바탕으로'강 민우
Construct2 이후 Scrria에서는 Construct3를 준비하였습니다. Construct3는 기존의 Construct2의 HTML5 + Java Script 기반의 게임 엔진을 Web Browser에서 활용할 수 있도록 개발되었습니다. 크롬이 설치되어 있다면 이제 모바일, PC 플랫폼 상관없이 게임을 개발할 수 있으며, 클라우드 시스템으로 세이브 데이터를 언제 어디서든 불러와 개발을 지속적으로 할 수 있습니다. 이러한 개발 환경을 바탕으로 간단한 미니게임 제작을 보여주면서 Construct3를 분석하는 시간을 가질 것입니다.
[IGC 2017] 오토데스크 박준석 - 3ds Max 2018과 Shotgun을 이용한 게임 제작 Pipeline 소개강 민우
3ds Max 2018의 새로운 기능 소개 및 3ds Max 2018의 기본 랜더로 탑재된 Arnold Render를 이용한 Game Asset 제작하는 방법에 대해 소개합니다. 그동안 3ds Max에서 사용되어온 방법 이외에 새로운 기능을 이용한 Game Asset 제작 과정으로 보다 효율적인 Workflow에 대해서 설명합니다. 그리고, 3ds Max에 포함된 Shotgun Plug-in을 사용해 실제 게임 제작공정과 작업 시간효율 극대화를 위한 방법 및 파이프라인 관리 툴인 Shotgun의 Game Pipeline 적용을 위한 사용법에 대해 설명합니다.
[IGC 2017] 엔지메이킹 이대희 - 이제는 웹에서 게임을 만들 수 있는 환경 'Construct3를 바탕으로'강 민우
Construct2 이후 Scrria에서는 Construct3를 준비하였습니다. Construct3는 기존의 Construct2의 HTML5 + Java Script 기반의 게임 엔진을 Web Browser에서 활용할 수 있도록 개발되었습니다. 크롬이 설치되어 있다면 이제 모바일, PC 플랫폼 상관없이 게임을 개발할 수 있으며, 클라우드 시스템으로 세이브 데이터를 언제 어디서든 불러와 개발을 지속적으로 할 수 있습니다. 이러한 개발 환경을 바탕으로 간단한 미니게임 제작을 보여주면서 Construct3를 분석하는 시간을 가질 것입니다.
[IGC 2017] 오토데스크 박준석 - 3ds Max 2018과 Shotgun을 이용한 게임 제작 Pipeline 소개강 민우
3ds Max 2018의 새로운 기능 소개 및 3ds Max 2018의 기본 랜더로 탑재된 Arnold Render를 이용한 Game Asset 제작하는 방법에 대해 소개합니다. 그동안 3ds Max에서 사용되어온 방법 이외에 새로운 기능을 이용한 Game Asset 제작 과정으로 보다 효율적인 Workflow에 대해서 설명합니다. 그리고, 3ds Max에 포함된 Shotgun Plug-in을 사용해 실제 게임 제작공정과 작업 시간효율 극대화를 위한 방법 및 파이프라인 관리 툴인 Shotgun의 Game Pipeline 적용을 위한 사용법에 대해 설명합니다.
2022년 11월 18일 코엑스에서 개최한 공공솔루션마켓에서 발표한 강연 자료입니다.
디지털 전환이 가속화됨에 따라 더욱 중요해진 디지털 경험 모니터링과 장애 및 병목 등 성능을 개선한 실 사례를 공유드립니다.
생생한 강연 영상으로 확인해 보세요!
https://youtu.be/_Cdms2TxO3M
Spark machine learning & deep learninghoondong kim
Spark Machine Learning and Deep Learning Deep Dive.
Scenarios that use Spark hybrid with other data analytics tools (MS R on Spark, Tensorflow(keras) with Spark, Scikit-learn with Spark, etc)
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용Susang Kim
도입
AI Chatbot 소개
Chatbot Ecosystem
Closed vs Open Domain
Rule Based vs AI
Chat IF Flow and Story Slot
AI기반의 학습을 위한 Data 구성 방법
Data를 구하는 법 / Train을 위한 Word Representation
Data의 구성 / Data Augmentation(Intent, NER)
자연어처리 위한 AI 적용 방안
Intent (Char-CNN) / QnA (Seq2Seq)
Named Entity Recognition (Bi-LSTM CRF) / Ontology (Graph DB)
Chatbot Service를 위한 Architecture 구성
Chatbot Architecture
NLP Architecture
Web Service Architecture
Bot builder / Chatbot API
Test Codes for Chatbot
실무에서 발생하는 문제와 해결 Tips
Ensemble and voting / Trigger / Synonym(N-Gram)
Tone Generator / Parallel processing / Response Speed
마무리
[설명 코드]
Text Augmentation / Slot Bot / QA Bot / Graph DB / Response Generator
[IGC 2017] 넥스트플로어 김영수 - Protocol:hyperspace Diver 개발 포스트모템강 민우
본 세션에서는 Protocol:hyperspace Diver의 개발 과정 전반에 대한 포스트 모템을 수행하며 기획적인 부분을 바탕으로 제기된 요구사항에 대응하기 위한 기술적인 이슈에 어떻게 대응하였는지를 살펴볼 예정입니다. 게임을 기획하며 게임에 어떤 기능들이 요구되었으며, 엔진 레벨에서부터 모바일 게임을 개발하는 과정에서 이런 요구사항들에 어떻게 대응하였는지를 살펴봅니다. 게임을 위한 전체적인 설계 및 문제 해결 전략과 각각의 문제 해결 과정에서 세부 내용에 대한 기술적 노하우를 공유합니다.
Similar to 안드로이드 Oreo의 변화와 모바일 앱/플랫폼의 적합한 성능 측정 방법 (20)
This document discusses the prototype pattern, which allows the creation of objects based on an existing "prototype" object, rather than based on classes. It covers how prototype pattern works, its structure, use cases and caveats. Examples of implementing prototype pattern in Java and JavaScript are provided to illustrate shallow and deep copying of objects.
The Singleton pattern ensures that only one instance of a class is created and provides a global access point to that instance. It describes how to implement the concept of a singleton class by creating a private constructor, a static method that returns the instance, and a static property that holds the single instance of the class. The document discusses issues that can arise with thread safety when multiple threads simultaneously try to access the singleton instance and provides solutions like using mutex locking to ensure only one thread initializes the instance.
[NEXT] 화면 재갱신이 되는 안드로이드 앱 만들기 - 네트워크에 독립하는 구조로 변경YoungSu Son
항상 네트워크에 연결되어있지 않다는 가정으로, 앱의 아키텍처를 변경합니다.
앱을 실행시 로컬 DB의 데이터를 읽으며, 백그라운드 서비스에서 주기적으로 데이터를 긁어옵니다. (추후 gcm push로 변경합니다.)
데이터 삽입시 화면을 자동 갱신할려면? 어떠한 구조를 가져야 할까요?
그리고 view holder 패턴도 다룹니다.
38. 전 계층을 다 모니터링 해야 한다.
CPU & GPU Memory NetworkStorage
Method Trace
Layout (60fps)
Wake Locks
Over Draws
Animations
Job Schedulers..
GC
Object Allocations
Caching
Background/Foregrou
nd Policy
BITMAP
Optimization..
Batch
(Job Scheduler)
Pre Patching
Data Compression
Response Time
Traffic, Packet, Error,
Dropped In/Out
File I/O
SQL Lite Operations
IOPS
CPU / GPU Governor
VSync
Wear Leveling
Seq , Random
Read/Write Speed
Battery Power
Consumption
WWAN(HSPA, LTE,
WiMAX..)
Peak Bit Rate /
Throughput MAX
Wear Leveling
Seq , Random
Read/Write Speed
41. 개발 편의성/ 관리를 위해 직접 메모리를 관리하고 싶지만..
Java에서는
C, C++에서 사용하는 ‘free’, ‘delete’가 없기 때문에
주기적으로 혹은 특정 조건일 때 GC를 하게 됩니다.
이로인해 프로그래머는 메모리 관리에 대해서 고민을 적게 할 수 있습니다.
하지만 임베디드 환경에서는 메모리 하나 하나가 매우 소중합니다.
43. 기본적으로 할당하는 방식은
Strong Reference 입니다.
Strong
- 기본적으로 할당하는 방식을 Strong Reference 라고 부릅니다.
mLauncher = new <Launcher>(launcher);
- GC과정에서 연결된 객체들을 Mark하고 Mark되지 않은 객체들을 Sweep합니다.
44. Strong 이외에 3가지가 더 있습니다.
1. 종류
Soft reference, Weak reference, Phantom reference
Private WeakReference<Launcher> mLauncher;
mLauncher = new WeakReference<Launcher>(launcher);
2. 원리
- GC동작에서 Strong이 아닌 경우 Mark하지 않고
Reference Queue라는 공간에 객체를 넣고,
Sweep하는 과정에서 제거 Queue에 있는 객체들을 제거 합니다.
45. 더 자세히 보겠습니다.
1. Soft reference
Mark가 되기도 하고 Reference Queue에 담기기도 합니다.
Soft reference로 참조된 객체는 메모리가 절대적으로 부족한 상황이 되기전에는 참조가 유지됩니다.
각 앱마다 할당된 메모리가 절대적을 부족할 때 Soft이면 제거, 여유롭다면 Strong과 같이 제거하지 않습니다.
2. Weak reference
Referene Queue에 담깁니다.
Weak reference로 참조된 객체는 Soft Reference보다 더 약한 연결고리를 가집니다.
메모리의 상태와 관계없이 GC가 동작되는 순간 Marked Object라도 회수됩니다.
Strong Soft
Weak
Phantom
Mark
Reference Queue
48. Rosalloc 이란
(Runs of Slots Allocator)
작은 객체들을 위한
thread local storage를 만들자.
Bulk free를 위하여.
작은 객체를 할당하는 영역과
큰 객체를 할당하는 영역을 구분하자
하나의 영역에 객체를 할당하니,
GC가 빈번하게 발생해서,
역할을 나누자!
52. 추가적인 기교들을 더함.
• Dalvik이 두번 Pause(mark remark) 해서 객체 mark-sweep 함
• ART에서는 한번 pause(mark를 병렬로 진행 remark에서만 멈춤).
• 그래도 mark-sweep은 느리니 병렬로 해서 빠르게 정리하자.
• 최근 생성(sticky)하거나, 짧은 수명의 객체는 빨리 제거하자.
• 메모리가 부족해 GC를 돌리면 OOM이 날수 있으니, 더 낮은 상한성 (GC Timelier) 만
들어서 돌리자.
53. Android L부터 GC 전략 추가
• CMS (기본전략)
• Mark-Sweep 전략을 유지하되 성능을 향상 시키는 방법
• Mark-Sweep 의 느린 속도를 해결하기 위해 병렬, 부분, 이전 세대에만 생성된 것을 제
거하는 방식 등이 종합적으로 적용함.
• SS : Semi Space (aka From Space To Space)
• 빠른 GC 방법 / 단 메모리는 많이 사용하는 방법 -> 단 첫 GC의 정확도는 Mark-Sweep
보다 낮은 문제가 있음.
• 2개의 Semi Space 를 만들어서 정리하는 방법
• GSS : Generation Semi Space
• Semi Space를 세대별로 하는 방법.
61. 왜 Foreground / Background GC
로 나누었을까?
Foreground GC (화면 담당)
Background GC (백드라운드 담당)
• Foreground GC -> CMS (파편화보다 빠른 정리)
빠르게 정리되는 것이 중요. 화면이 빈번하게 변경되므로
생명 주기가 긴 객체가 없다. 파편화 이슈보다 빠르게 정
리가 중요 (화면은 자주 갱신되니)
• Background GC (생명주기 긴 객체 -> 파편화)
항상 메모리에서 떠 있는 녀석들이 많다. 그만큼 생명주기
도 기니까 파편화가 많이 발생할수 있음. 속도보다는
memory compact 하는 녀석을 선택하는 것이 좋음.
64. Background gctype 은 언제든지 변경
(기본 gc 설정은 제조사 마음)
• To disable background compaction do:
• adb shell setprop dalvik.vm.backgroundgctype CMS
• To enable:
• adb shell setprop dalvik.vm.backgroundgctype SS
65. MemFree vs MemoryAvailable.
cat /proc/meminfoOS 메모리 정보는
MemFree보다
MemAvailable을 이용하세요.
MemFree:
The amount of physical RAM, in kilobytes,
left unused by the system.
MemAvailable:
An estimate of how much memory is available
for starting new application
70. Android 3.0 이후 HW Acceleration 도
입
https://developer.android.com/guide/topics/graphics/hardware-accel.html
http://blog.danlew.net/2015/10/20/using-hardware-layers-to-improve-animation-performance/
71. Android 5.0 이후 material design 도
입
Material 의 animation 효과 어떻게 하지?
자 그럼 이제 GPU를 사용해 CPU 부하 줄이자 (RenderThread도입)
77. 시사점..
CPU Governor 정책에 의해.
CPU가 뜨거워지면 -> 절전 모드로..
밧데리를 아끼기 위해 일이 없으면 -> 천천히 돌아가게..
개발자 입장에서는 내 앱이 최적의 상황에서만. 돌길 바랄뿐.
*cpu/gpu governor 정리자료
http://ajgupta.github.io/android/2015/01/28/CPU-and-
GPU-governors/
84. 시사점..
Database, File I/O Benchmark Test의 의미가 무색..
하나의 디바이스에서 매겨진 랭킹이.
다른 디바이스에서 동일하다는 보장이 없다..
또한 나의 앱이 IO를 쓸따 다른 앱이 IO를 안쓴다는 보
장도 없다..
직접 case by case 다 보셔야 한다.. (정말 가능?)
85. 또 하나의 변수 .. Wear Leveling (웨
어 레벨링)
Wear Leveling 전 Wear Leveling 후
86. 시사점..
화면을 16ms 안에 못 그려졌다면. 누구 책임인가?
데이터 읽기 / 쓰기 속도가 뒤죽 박죽 이라면 누구 책
임인가?
앱 개발자가 해결할수 있는 문제인가?..
89. 밧데리의 수명은 제한적
제조사의 고민
• 오래 사용하기 위해 전력 소비량을 낮추던가?
• 동일한 전력을 계속 공급해 성능은 유지하지만,
2,3시간 만에 방전 되던가?
90. 복잡한 다계층 시스템에 대해서 다시 생각해 보자.
CPU & GPU Memory NetworkStorage
Method Trace
Layout (60fps)
Wake Locks
Over Draws
Animations
Job Schedulers..
GC
Object Allocations
Caching
Background/Foregrou
nd Policy
BITMAP
Optimization..
Batch
(Job Scheduler)
Pre Patching
Data Compression
Response Time
Traffic, Packet, Error,
Dropped In/Out
File I/O
SQL Lite Operations
IOPS
CPU / GPU Governor
VSync
Wear Leveling
Seq , Random
Read/Write Speed
Battery Power
Consumption
WWAN(HSPA, LTE,
WiMAX..)
Peak Bit Rate /
Throughput MAX
Wear Leveling
Seq , Random
Read/Write Speed
91. 복잡한 다계층 시스템에 대해서 다시 생각해 보자.
CPU & GPU Memory NetworkStorage
UI Rendering Time
(Native, Web)
Event
GC Pause Time
Memory Allocation
Wear Level
HTTP Response Time
Traffic In/Out
File I/O
SQL Lite Operations
IOPS
CPU / GPU Governor
VSync
Wear Leveling
Seq , Random
Read/Write Speed
Battery Power
Consumption
WWAN(HSPA, LTE,
WiMAX..)
Peak Bit Rate /
Throughput MAX
Wear Leveling
Seq , Random
Read/Write Speed