9th Kandroid Conference
The Gate of the AOSP #2 : Graphics and Memory
행사일정
일시 : 2012년 3월 22일(목),23일(금) 오전 9시 ~ 오후 5시30분
장소 : 한국과학기술회관 국제회의실 (강남역 12번출구)
주의 : 강남역 신분당선이 개통되면서,
과거 8번출구가 12번 출구로 이름이 바뀌었습니다.
대상 : 안드로이드 플랫폼/애플리케이션에 관심있는 분
주최 : www.kandroid.org
수용인원
이번 세미나의 최대수용인원은 550명 입니다. [사전등록 인원 현황 보기]
더불어, 550명이 모두 사전등록할 경우
더이상의 사전등록이나 현장등록은 받지 않음을 알려드립니다.
프로그램
사회 : kandroid.org 운영자 양정수(닉네임,들풀)
입장 : 08:30 ~ 09:00
3월 22일 목요일 (1일차)
시간 발표 내용 발표자
09:00 ~ 09:50
Valgrind Technology Session

세션목표 : 안드로이드 앱의 LMK 동작을 억제하기 위한 메모리 누수 해결기법

모바일 폰의 특성상 데스크탑PC처럼 메모리를 추가로 확장하는 것은 사실상 불가능합니다. 따라서, 애플리케이션들의 성능을 위해서 무분별하게 과다 메모리를 사용하지 않고 최소한의 메모리로 동작하는 것이 중요합니다. 본 세션에서는 ICS 4.0부터 도입된 Valgrind의 “메모리 누수방지 기술”을 이용하여 최소의 메모리로 애플리케이션을 동작 시킬 수 있기 위한 방법들을 공개합니다..

특히, 메모리 고갈 상태에 가까워지면 LMK 동작으로 인해 안드로이드의 플랫폼 건강 상태가 악화되는 것을 피하기 어렵습니다. 이를 치료하기 위해, 시스템적인 내부 기술지식이 적더라도 애플리케이션의 메모리 누수를 쉽게 디버깅 및 프로파일링 할 수 있는 실용적인 Know-How들을 제시합니다.

# 세션1: Valgrind 이론편 for System Developers

1.Introduction & Overview
- 안드로이드앱의 메모리 취약성
- 안드로이드앱의 메모리 누수 이슈
- Valgrind를 위한 Bionic의 쓰레드 APIs 지원
- Valgrind 의 Overview
- Valgrind 아키텍쳐(설계&구현)
- ARM Porting for Android

2. Using Valgrind on Android
- Valgrind's Tool Suite 이해하기
- 모바일폰에서의 Valgrind 장점 및 한계점

# 세션2: Valgrind 활용편 for App Developers

1. 메모리 누수 Type별 기능사용 방법
- Android-NDK으로 ARM용 Valgrind 제작
- Case Study(기능별 활용 예제)
1) memcheck
2) Massif
3) DRD
4) helgrind
5) cachegrind
6) callgrind

2. Troubleshooting
- 메모리 누수 방지 예제
- 임베디드에서의 메모리 제한문제
임근식 (Geunsik Lim)
- Nickname: invain (인베인)
- www.kandroid.org 운영진
10:00 ~ 10:50
11:00 ~ 11:50
OpenMax and Android

세션목표 : 안드로이드에서의 OpenMax 지원은 크게 두가지로 나뉘어집니다. OpenMax AL (Application Layer)를 통한 네이티브 미디어 어플리케이션 지원이 그 하나이고, OpenMax IL (Integration Layer)를 통한 코덱의 호환성 확보입니다. 이 세션에서는 최근에 Android ICS에 추가된 OpenMax AL 인터페이스를 살펴보고, 전체적인 안드로이드 미디어 프레임워크에서 OpenMax 지원에 대해서 이해를 돕고자 합니다.

[Basic]

- 미디어 프레임워크의 의미
- 최신 코덱의 동작 이해
- OpenMax의 구조와 동작

[Advanced]

- Android에서의 OpenMax 지원
- OpenMax AL 기반 어플리케이션 예제
- 미디어 프레임워크에서 데이터의 흐름
김태용(Taeyong Kim)
- 솔루션 아키텍트
- 윈드리버 시스템스 이사
- www.kandroid.org 운영진
12:00 ~ 13:00 점심 시간
13:00 ~ 13:50
Hierarchy Viewer Internals

세션목표 : Android와 같은 S/W 플랫폼이 성장하고 널리 확산되는데 있어 SDK(Software Development Kit)의 역할은 매우 큽니다. 아무리 좋은 기능과 성능을 제공하는 플랫폼이라 할지라도 그 위에서 동작하는 앱을 만드는게 어렵다면 그 플랫폼은 개발자들로부터 외면받게 됩니다. 이는 해당 플랫폼에서 이용 가능한 앱의 개수가 줄고 품질이 저하되는 결과를 만들게 되어 그 플랫폼은 사용자들에게도 외면받게 됩니다. 이로 인해 개발자들이 다시금 그 플랫폼을 외면하게 만드는 악순환이 형성됩니다. 이러한 악순환을 끊기 위한 첫 걸음은 바로 개발 생산성을 높여주는 SDK를 잘 만들어 제공하는 것입니다. 따라서 Android 기술 분야에서 경쟁력을 확보하고 주도권을 갖기 위해서는 Android 플랫폼을 제대로 이해하는 것 뿐만 아니라 Android SDK를 제대로 분석하고 개선할 수 있어야 합니다.

이번 세션에서는 "Android SDK 기술의 이해"라는 큰 주제의 첫 꼭지로써 Android UI(User Interface)를 디버깅하고 프로파일링하는데 사용하는 Hierarchy Viewer를 분석하고자 합니다. 먼저, Hierarchy Viewer를 분석하는데 필요한 몇몇 배경 지식을 설명한 후 Hierarchy Viewer의 내부 구조와 동작 방식을살펴보겠습니다.

이론편: Hierarchy Viewer 분석에 필요한 배경 지식

- Java Reflection
- Java Annotations
- Android Debug Bridge
- Android Binder IPC
- Android Window and View System
- Summary

활용편: Hierarchy Viewer 내부 구조 및 동작 분석

- Overview: What and Why?
- Static Structure
- Runtime Structure
- Internal Behaviors
- Summary
이경민 (Kyungmin Lee)
- 닉네임: snailee
- LG전자
14:00 ~ 14:50
15:00 ~ 15:30 휴식 시간
15:30 ~ 16:20
Android Graphic Performance

세션목표 : 안드로이드의 그래픽 구조에 대해서 분석해보고 성능 이슈와 최신 버전에 추가된 HW 가속을 이용한 고성능 그래픽 어플 개발에 대해 자세히 살펴본다.

Graphics Basic

- Architecture
- Glossary
- Surface and View
- Drawing Tools
- Bitmap and Format
- Basic Performance

Old Problems

- Animation
- Drawing Performance
- Android vs iOS

Android Hardware Acceleration

- Introduction
- History
- Controls
- Display List
- View Layers
- Performance
- Restrictions
- Tips & Tricks

Other Performance Issues

- Property Animation
- 3D Integration
이승민(LEE SEUNG MIN)
- 네무스텍(주)
- NemusTech, Inc.
16:30 ~ 17:20

3월 23일 금요일 (2일차)
시간 발표 내용 발표자
09:00 ~ 09:50
안드로이드 네이티브 인프라 : C++, Looper, Binder


세션목표 : 안드로이드 플랫폼은 C, C++ 로 작성 된 네이티브(Native) 코드 기반계층과 달빅(Dalvik) 가상머신에서 실행 되는 자바 코드 기반 계층으로 구분 됩니다. 각 계층에 속한 시스템 컴포넌트들은 어떤 기준으로 나눠지게 된 걸까요? 또 계층을 넘나들며 상호 연동되는 원리는 무엇일까요?

본 세션에서는 Native 코드로 작성된 시스템 인프라가 안드로이드에서 차지하는 비중과 역할에 대해 알아 봅니다.
특히 내부동작구조의 핵심인 바인더(Binder)의 작동원리를 아키텍처/패턴/코드 측면에서 상세히 알아 보겠습니다.
이를 통해 안드로이드 내부동작구조와 작동원리에 대해 이해도를 높이고 애플리케이션 개발에 응용할 수 있도록 합니다.

기본편

-안드로이드 시스템 서비스 개요
-Native 인프라 개요
-Native 컴포넌트 구성과 역할
-Native 코드를 이해하기 위한 기본 문법 익히기
-Native 코드에서 Looper 를 보다.

심화편

-안드로이드 주요 C, C++ 코드 분석
-바인더 아키텍처
-바인더 패턴
-바인더 드라이버 역할과 구조
-애플리케이션에서 바인더를 보다
안준석(Ahn JoonSeok)
- NHN Corp.
10:00 ~ 10:50
11:00 ~ 11:50
Dalvik JIT Internal


세션목표 : JIT컴파일러는 Java의 실행 성능을 개선하기 위한 목적으로 안드로이드 이전에도 다양한 연구가 이루어졌으며, Android의 경우 JIT컴파일러의 개선을 통해 Froyo 버전부터 이전 버전보다 약 2~5배 정도의 성능 향상을 이루어냈습니다.

본 세션에서는 Android Dalvik의 JIT 컴파일러 내부 구성요소와 동작 방식을 살펴보고, JIT 컴파일러의 변경에 따른 애플리케이션의 성능 변화를 관찰함으로써 JIT기반의 안드로이드 최적화 방안을 고찰하고자 합니다.

1. JIT Compiler Overview
2. Compile & Runtime Operation with JIT
3. Optimizations and Profiling
4. Experimental Results (Benchmarks)
5. Considerations
국중진(Kook, Joongjin)
- 전자부품연구원(KETI)
12:00 ~ 13:00 점심 시간
13:00 ~ 13:50
Linking, Prelink&ASLR, Toolchain 소개


세션목표 : Android 플랫폼에서 런타임 수행 시간 단축을 위해 사용하는 Prelink 기술의 정확한 이해와 플랫폼 빌드를 위해 사용하는 Android Toolchain의 정확한 이해가 본 강좌의 목표입니다.

이를 위하여 첫번째 시간에서는 본 기술의 백그라운드인 Static & Dynamic Linking, Static & Dynamic Library, ELF 포맷 등에 대한 기본 개념을 예제를 통하여 상세하게 설명하고, 두번째 시간에는 Prelink 개념과 Toolchain 개념을 소개하고, Prelink 기술이 가지고 있는 보안 약점을 해결하기 위한 ASLR 기술도 소개합니다.

1. Linking

- Object File & Executable & ELF
- Static & Shared Library
- Static & Dynamic Linking

2. Prelink & ASLR
(Address Space Layout Randomization)

- Prelink 개념
- Prelink in Android
- ASLR 개념

3. Toolchain

- Native & Cross Toolchain 개념
- Toolchain in Android
우덕균(Duk-Kyun Woo)
- ETRI
14:00 ~ 14:50
15:00 ~ 15:30 휴식 시간
15:30 ~ 16:20
Android Application Framework II : Memory Model

세션목표 : 안드로이드 플랫폼의 메모리 관리구조를 살펴보는 것을 목적으로 하는 세션입니다.

첫번째 시간에는 안드로이드 플래폼에서 사용하는 리눅스 커널의 메모리 관리 구조를 전반적으로 살펴보고 이들 중 안드로이드를 위해 추가된 Ashmem과 LMK를 이해하기 위한 기반인 Shared Memory Virtual Filesystem과 Out of Memory Management를 살펴봅니다. 그리고 최종적으로 Ashmem과 LMK의 필요성과 동작원리를 살펴봅니다.

두번째 시간에는 안드로이드 플랫폼의 각 계층, 즉 bionic libc, binder c++ lib, dalvikvm에 도입된 일반적인 메모리 관리자들을 살펴봅니다. 더불어 Low Memory를 관리하기 위한 정책과 이 정책이 일반적 메모리와 Shared Mememory에 미치는 영향을 살펴봅니다. 또한 안드로이드에서 발생하는 Memory Leak의 가장 큰 형태인 Context, ApplicationContext에 대해 살펴보고, Anonymous Shared Memory의 가장 대표적인 사용형태인 Suface와 Event 인프라를 살펴봅니다.

Android Linux Kernel Memory Related Features

1. Linux Virtual Memory Manager
- Linux Memory Subsystem Overview
- Shared Memory Virtual Filesystem
- Out of Memory Management

2. Android Enhanced Features
- Reminder : Binder IPC Overview
- Ashmem : Anonymous Shared Memory
- LMK : Low Memory Killer

Android Memory Management

1. Common Memory Management
- Bionic libc memory manager : dlmalloc
- Binder object reference manager : Refbase
- DVM Heap Limitation and GC Enhancement : Bitmap GC

2. Low Memory Management
- Low Memory Policy Management
- Low Memory Killing and Instance State Restoration
- Low Memory and Shard Memory Shrinking

3. Case Study
- Memory Leak : Context, ApplicationContext, MAT
- Ashmem : Surface & Event Sharing Mechanism
양정수(Yang, Jeong Soo)
- 닉네임(들풀)
- www.kandroid.org 운영자
16:30 ~ 17:20