윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

25
[email protected] http://nemoux00.wordpress.com

Upload: nemoux

Post on 21-Jul-2015

336 views

Category:

Software


3 download

TRANSCRIPT

Page 1: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

[email protected]

http://nemoux00.wordpress.com

Page 2: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

컴포지팅 최적화

OPENGL 확장 인터페이스

WAYLAND 확장 프로토콜

소프트웨어 아키텍처 개선

Page 3: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
Page 4: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

메모리 복사 최소화 메모리 사용을 최소화하고, 불필요한 메모리 전송을 줄여라!

제한된 자원의 스마트기기 활용 범위 확대

고해상도 디스플레이 등장 (레티나, 4K, …)

애니메이션 효과 일반화

지연 모드 지원 SCENE GRAPH 을 잘 관리하여 효과적인 렌더링을 하자!

윈도우 매니저는 SCENE GRAPH 관리 필수

효율적인 화면 갱신 및 불필요한 렌더링 제거 필수

하드웨어 가속 지원 CPU 대신 GPU 를 적극 활용하자!

3D 가속 지원 게임/서비스 지원 필수

컴포지팅을 위한 OpenGL 확장 기능 활용 필수

효과적인 하드웨어 플레인 활용 필수

Page 5: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

ZERO-COPY 윈도우 버퍼 공유 및 복사 최소화 가장 기본적인/필수적인 컴포지팅 최적화!!!

버퍼 중복 제거 클라이언트와 서버가 하나의 버퍼 공유 ■ 레퍼런스 기반 버퍼 관리 (공유 메모리/DRM 기반 버퍼)

버퍼 복사 제거 화면이 변경된 부분만 갱신 ■ SCENE GRAPH 을 이용한 효과적인 데미지/클리핑 관리

window (client)

buffer

window (client)

buffer

compositor (server)

framebuffer

buffer

buffer

buffer

damage

damage

: 클라이언트 버퍼 공유 : 수정된 (damaged) 부분만 복사

copy copy

copy

Page 6: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

데미지/클리핑 관리 최소 더블 버퍼링 필요 이전 프레임버퍼에서 변경된 부분만 갱신

■ 현재 프레임버퍼 모니터 출력

■ 이전 프레임버퍼 수정된 부분 갱신 후 다음 프레임버퍼로 사용

프레임버퍼 히스토리 관리 필수 (이전 프레임버퍼에 대한 정보 유지)

window (client)

buffer

window (client)

buffer

compositor (server)

framebuffer

buffer

buffer

copy

copy

window (client)

buffer

window (client)

buffer

damage

compositor (server)

copy

framebuffer (old)

buffer

buffer

damage

framebuffer

buffer

buffer

Page 7: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

지연 모드(retained-mode) vs 즉시 모드(immediate mode) 지연 모드는 클라이언트의 요청을 모아서 한번에 반영

■ 모든 그래픽 정보 유지/관리 (즉시 모드는 반대)

윈도우 매니저는 일반적으로 지연 모드를 사용하는 것이 유리 ■ 화면 갱신 비율에 맞춰서 효율적인 렌더링 가능 (영상 vs 게임)

■ SCENE GRAPH 을 이용하여 불필요한 렌더링 제거 (데미지/클리핑)

■ 수정된 부분이 다음 화면 갱신 전에 다시 변경이 된다면 무시 가능

scanout

vblank

scanout

vblank

60 hz

window (client)

buffer

damage (1st)

window (client)

buffer

damage (2st)

ignore

Page 8: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

기존 하드웨어가속 컴포지팅 기본적인 데미지/클리핑 관리 불필요

텍스처 부분 갱신 미지원

프레임버퍼 부분 렌더링 미지원

향후 하드웨어가속 컴포지팅 텍스처 부분 갱신 지원

■ OpenGL 확장 인터페이스 (SUBIMAGE extension)

데미지/클리핑 관리를 통한 부분 렌더링 지원 ■ 프레임버퍼 히스토리 관리

■ OpenGL 확장 인터페이스 (BUFFER_AGE/SWAP_BUFFERS_WITH_DAMAGE extension)

Page 9: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
Page 10: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

2D 기반 컴포지팅에 OpenGL 을 사용할 때의 문제점 더블 버퍼링을 지원하지만 이전 프레임버퍼에 대한 보장 없음

3D 게임을 지원하는 목적으로 개발되었기 때문에 부분 텍스처 갱신과 렌더링에 대한 지원 없음

2D 기반 컴포지팅을 위한 OpenGL 확장 기능 (최신) BUFFER_AGE extension 프레임버퍼 히스토리 관리 지원

SUBIMAGE extension 텍스처 부분 갱신 지원

SWAP_BUFFERS_WITH_DAMAGE extension 부분 렌더링 지원

Page 11: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

프레임버퍼 히스토리 관리 기능 최근에 추가된 BUFFER_AGE extension 을 이용

이전 프레임버퍼에서 변경된 부분만 갱신하여 다음 프레임버퍼로 활용 가능

■ 이전 프레임버퍼에 이전 변경 사항 복사 (이전 프레임버퍼 현재 프레임버퍼로 변경된 영역)

■ 이전 프레임버퍼에 이번 변경 사항 복사 (현재 프레임버퍼 다음 프레임버퍼로 변경된 영역)

framebuffer (prev)

buffer

buffer

framebuffer

buffer

buffer

framebuffer (next)

buffer

buffer

damage

window (client)

buffer

damage (1st)

window (client)

buffer

damage (2st)

damage

damage

Page 12: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

텍스처 부분 갱신 지원 SUBIMAGE extension 이용

GL 렌더러에서 공유 메모리 버퍼를 사용할 때 변경된 부분만 갱신 ■ 기존에는 텍스처를 부분적으로 업데이트하는 것이 불가능

window (client)

buffer

window (client)

buffer

compositor (server)

framebuffer

texture

texture

texture

damage copy damage

Page 13: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

부분 렌더링 지원 SWAP_BUFFERS_WITH_DAMAGE extension 이용

BUFFER_AGE extension 과 같이 사용 ■ 이전 프레임버퍼에서 필요한 부분만 다시 렌더링 할 수 있도록 지원

■ 기존에는 전체 프레임버퍼를 한번에 렌더링하는 기능만 제공

■ 해당 확장 기능으로 이전 프레임버퍼를 효과적으로 사용 가능

window (client)

buffer

window (client)

buffer

compositor (server)

framebuffer

texture

texture

texture

damage

damage

rendering

Page 14: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

AMD Mantle API 공개 (& APPLE Metal API)

범용성을 중요시 하는 DirectX 와 OpenGL 대체

콘솔 게임은 범용성 보다는 성능 중시 ■ 특정 플랫폼에 최적화된 로우 레벨 API 사용

개별적으로 사용되던 로우 레벨 API 에 대한 표준화 시도 ■ PC 뿐 아니라 다양한 콘솔도 적용 가능

DirectX 와 OpenGL 차기 버전 준비 중 MS 는 Mantle 에 대항할 수 있는 성능을 가진 DirectX 12 준비

NVIDIA, AMD, INTEL 등 다양한 회사에서 OpenGL 최적화 진행

Page 15: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
Page 16: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

wl_subsurface 프로토콜 효과적인 CSD (Client Side Decoration) 지원

클라이언트에서의 불필요한 서페이스 합성 제거

편리한 윈도우 프레임 지원

영상 재생 어플리케이션 개발 지원

APPLICATION

FRAME

WINDOW

APPLICATION

VIDEO

CONTROL

Page 17: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

presentation 프로토콜 효과적인 영상 재생 및 UI 애니메이션 지원

시간 동기화 및 큐잉 지원

Maintained by Pekka Paalanen at Collabora

CLIENT (VIDEO)

BUFFER

WAYLAND

WINDOW synchronized video frame

FRAMEBUFFER

CLIENT (VIDEO)

BUFFER

WAYLAND

WINDOW video frame with sync timing

FRAMEBUFFER

WINDOW WINDOW

sync

sync

Page 18: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
Page 19: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

싱글 스레드 기반 윈도우 매니저/툴킷 엔진 UI 관련 이벤트 처리는 UI 스레드에서 단독으로 처리

입력 이벤트 처리, 렌더링, 애니메이션 등 처리해야 할 작업 증가

관련연구) 리눅스 선점 커널 (2.6), node.js, …

wl_event_loop_dispatch()

dispatch idle source

wait epoll

dispatch fd source

destroy needless source

wl_event_source_fd_dispatch()

wl_event_source_timer_dispatch()

wl_event_source_signal_dispatch()

wl_display_run()

wl_display_flush_clients()

animation, rendering, …

Page 20: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

두 개 이상의 병렬 GPU 지원 호스트 + 그래픽 메모리 및 주소공간 관리 (PRIME, IOMMU, …)

병렬 디스플레이 동기화 기술 필요 (NVIDIA Mosaic/QuardSync/SwapSync, …)

RAM

VRAM

PAGE

PAGE

PAGE

PAGE

PAGE

PAGE

PAGE

PAGE

PAGE

GPU0 (GART)

CPU (MMU)

physical address virtual address virtual address

PAGE

PAGE GPU1 (GART)

Page 21: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

전체 화면 모드에서 클라이언트가 렌더링한 화면과 결과 화면이 동일

WESTON CLIENT MESA client-side MESA server-side

GPU

batch buffer

texture buffer

frame buffer

local name wl_drm wl_drm

wl_drm_buffer EGLImageKHR

eglSwapBuffers

flush (rendering)

wl_buffer

flush (rendering)

texture buffer

batch buffer

frame buffer

CRTC

Page 22: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

마우스 커서 플레인 지원 마우스 커서가 여러 개라면??

하드웨어 플레인 사용 윈도우 선정 같은 플레인에 존재하는 윈도우에 의해 클리핑 되지 않는 윈도우

비교적 화면 갱신이 많은 윈도우

현재 WESTON 동작 방식 화면 앞에서 뒤의 순서로 클리핑 되지 않는 윈도우 선정

Page 23: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

더블 버퍼링 vs 트리플 버퍼링 프레임버퍼 렌더링/플리핑/스캔아웃 타이밍 고려

vblank vblank vblank vblank

framebuffer0

framebuffer1

vblank vblank vblank vblank

framebuffer0

framebuffer1

1. rendering time < vblank

2. rendering time > vblank (double buffering)

3. rendering time > vblank (triple buffering)

vblank vblank vblank vblank

framebuffer0

framebuffer1

framebuffer2

rendering

rendering rendering

rendering

rendering

rendering

rendering

rendering

rendering

rendering

scan out

scan out

scan out

scan out

scan out

scan out

scan out

scan out

scan out

scan out

scan out

scan out

vsync vsync vsync

page flip

page flip

page flip

page flip

page flip

page flip

Page 24: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화

윈도우 매니저 기반 디스플레이 동기화 재생률 보장 (영상, …) vs 응답성 보장 (게임, …)

{ 입력 … 출력 } 불확정 요소 ■ 스케줄링, 대기 이벤트 처리, …

■ 렌더링 대기/소요 시간, VSYNC 대기 시간, …

window (client)

compositor (server) keyboard/mouse

GPU event

event

handle event

redraw surface

commit surface

display

graph

disp

renderer (mesa/drm)

framebuffer

rendering

pageflip fence

scanout

Page 25: 윈도우 매니저 스터디: 2. 윈도우 매니저 최적화