윈도우 매니저 스터디: 1. 윈도우 매니저 출력

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

Upload: nemoux

Post on 21-Jul-2015

474 views

Category:

Engineering


6 download

TRANSCRIPT

Page 1: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

[email protected]

http://nemoux00.wordpress.com

Page 2: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

윈도우 매니저 출력 기본 동작 과정

윈도우 버퍼 관리 (메모리 버퍼 vs DRM 버퍼)

컴포지팅/렌더링 방식 (메모리 기반 vs 하드웨어가속 기반)

윈도우 매니저 구조 (출력: 렌더러 + 백엔드)

OPENGL OPENGL 동작 과정 및 소프트웨어 스택 구조

DRI & DRM

컴포지팅

디스플레이 동기화

Page 3: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력
Page 4: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

윈도우 매니저 출력 과정 1. 윈도우 버퍼 공유

■ 메모리 버퍼 기반 vs DRM 버퍼 기반

2. 컴포지팅(렌더링) ■ PIXMAN 렌더러 vs OPENGL 렌더러

3. 디스플레이 동기화 ■ FB 백엔드 vs DRM 백엔드

APPLICATION

APPLICATION

COMPOSITOR

FRAMEBUFFER

CRTC

1

2 3

1 2

Page 5: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

렌더링 방식 메모리 기반(PIXMAN) vs 하드웨어가속 기반(OPENGL)

SCREEN

GPU

framebuffer framebuffer

GUI framework (without opengl)

GUI framework (with opengl)

WINDOW

WINDOW

CPU

Page 6: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

APPLICATION

APPLICATION

CPU memory

FRAMEBUFFER

CRTC copy

copy

APPLICATION

APPLICATION

GPU memory

FRAMEBUFFER

CRTC

rendering

메모리 기반 (without OPENGL, with PIXMAN)

하드웨어가속 기반 (with OPENGL)

sync

Page 7: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

공유 메모리 기반 윈도우 버퍼 관리 WAYLAND 는 로컬 기반 프로토콜이므로 레퍼런스 기반 버퍼 관리

■ 클라이언트는 서버에 버퍼를 복사하지 않고 공유 메모리에 대한 접근 허용

렌더러는 클라이언트와의 공유 메모리에 직접 접근하여 필요한 부분을 프레임버퍼로 복사

application (shm)

buffer

application (shm)

buffer

compositor (pixman-renderer)

framebuffer

buffer

buffer

copy

copy

Page 8: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

공유 메모리 기반 윈도우 버퍼 공유 과정 파일디스크립터 공유 (SCM_RIGHT 소켓 확장 기능 이용)

레퍼런스 기반 버퍼

최소한 더블 버퍼링 필요

CLIENT

wl_surface

wl_shm

wl_shm_pool

WAYLAND/WESTON

wl_shm

wl_shm_pool

tmpfile

create tmpfile

fd

create_pool (fd)

wl_shm_pool

create_buffer (pool)

wl_buffer

wl_surface attach (buffer)/damage/commit

pixman_surface

pixman_image_t

Page 9: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

DRM 버퍼 기반 윈도우 버퍼 관리 클라이언트가 하드웨어가속을 지원하는 경우 (drm)

■ 렌더러는 클라이언트가 생성한 프레임버퍼를 텍스처로 이용하여 렌더링

클라이언트가 공유 메모리를 지원하는 경우 (shm) ■ 렌더러는 클라이언트의 공유 메모리를 이용하여 텍스처 생성

이로 인해 경우에 따라, PIXMAN 렌더러보다 성능이 떨어질 수도 있다.

application

(shm)

buffer

application (drm)

buffer (framebuffer)

compositor (gl-renderer)

framebuffer

texture

texture

texture

copy

Page 10: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

윈도우 버퍼 반환(해제) 시점 메모리 버퍼 + PIXMAN 렌더러 (reference)

■ 다음 윈도우 버퍼로 교체하기 전까지 유지

DRM 버퍼 + OPENGL 렌더러 (reference) ■ 다음 윈도우 버퍼로 교체하기 전까지 유지

메모리 버퍼 + OPENGL 렌더러 (copy) ■ 컴포지터에서 텍스처를 업데이트하기 전까지 유지

application (shm)

buffer

application (shm)

buffer

compositor (pixman-renderer)

framebuffer

buffer

buffer

application (shm)

buffer

application (drm)

buffer (framebuffer)

compositor (gl-renderer)

framebuffer

texture

texture

texture

Page 11: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

렌더러 + 백엔드 일반적인 어플리케이션은 메모리 버퍼 사용 (하드웨어가속 x)

렌더러는 PIXMAN, OPENGL 두 가지만 존재

백엔드는 FB, DRM 외에도 X11, WAYLAND 등 여러 가지 존재 ■ 원격 지원을 위한 RDP 백엔드도 존재 (Remote Desktop Protocol)

메모리 버퍼 DRM 버퍼

PIXMAN 렌더러 OPENGL 렌더러

FB 백엔드 DRM 백엔드 WAYLAND 백엔드

Page 12: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

DRM 백엔드 (≠ OPENGL)

KMS (Kernel Mode Setting) ■ Framebuffer/CRTC/Encoder/Connector

■ 장치 검색 및 해상도/재생률 관리

디스플레이 동기화 ■ PAGE_FLIP 다음 VBLANK 에서 프레임버퍼 교체

■ VSYNC 다음 VSYNC 이벤트 전달

하드웨어 플레인 관리 ■ 마우스 커서 플레인, …

자원 관리 ■ GPU 가 사용하는 시스템 메모리와 그래픽 메모리 관리

■ GPU 가 사용하는 가상 주소 공간 관리 (IOMMU)

■ GPU 에 명령어 스트림 전달 및 실행 (렌더링, DMA, …)

Page 13: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력
Page 14: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

OPENGL 동작 방식 (레스터라이징 방식) 버텍스(vertex) 점

폴리곤(polygon) 면 (삼각형 기반)

텍스쳐(texture) 이미지

3D SPACE

(1, 0, 0) (-1, 0, 0)

(0, 1, 0)

FRAMEBUFFER

Page 15: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

레스터라이징 vs 레이트레이싱

Rasterization Ray tracing

OpenGL, DirectX NVidia OptiX, …

기본 동작 저비용, 효과 고비용 기본 동작 고비용, 효과 저비용

실시간 게임, 모델링 등에 활용 영화, 인테리어 CG 제작 등에 활용

Real time ray tracing 그래픽장치 성능 발전

실시간 게임, 모델링 등에 활용

Page 16: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

기본 동작 과정 GPU 메모리를 할당받아 필요한 데이터 전달 (텍스쳐, 버텍스, …)

명령어 버퍼에 OPENGL 명령어 순서대로 전달

지정된 명령어 버퍼를 이용하여 렌더링 요청

GPU 가 명령어 버퍼를 이용하여 프레임버퍼에 결과 이미지 렌더링

glVertex() glTexImage()

GPU

batch buffer

texture buffer

frame buffer

eglSwapBuffers()

CRTC

vertex buffer

glBufferData()

Page 17: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

소프트웨어 구조 OPENGL 라이브러리/GPU 드라이버

플랫폼 API(GLX/WGL/EGL/…)/렌더링 API

weston

mesa

gl-renderer

EGL-api

gallium

GL-api

i915-driver

drm

kernel

drm-driver (kms, gem, …)

i915-driver nv, radeon, …

nv, radeon, …

OpenGL app OpenGL app

gl-renderer

OpenGL app OpenGL app

nvidia OpenGL library

EGL-api GL-api

nvidia kernel driver

Page 18: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

어플리케이션이 윈도우 매니저를 통하지 않고 그래픽 카드에 직접 접근하는 방식

GPU

kernel

X server

OpenGL driver

drm driver

application (X11)

application (OpenGL-X11)

GLX X

2D driver

AIGLX

GPU

kernel

WAYLAND/WESTON

OpenGL driver

drm driver

application (wayland)

application (OpenGL-wayland)

wayland

EGL

EGL EGL

kms kms

Page 19: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

MESA/DRM 기준 동작 과정 (하나의 GPU 사용)

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 20: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

둘 이상의 GPU 사용시 (파일디스크립터를 이용)

GPU0

batch buffer

texture buffer

frame buffer

GPU1

texture buffer

batch buffer

frame buffer

WESTON CLIENT MESA client-side MESA server-side

fd wl_drm wl_drm

wl_drm_buffer EGLImageKHR

eglSwapBuffers

flush (rendering)

wl_buffer

flush (rendering)

CRTC

Page 21: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

DRM 백엔드/GL 렌더러 동작 구조

CLIENT

wl_shm wl_egl_window wl_surface

WAYLAND/WESTON

gl-renderer

texture

shm_buffer egl_texture weston_surface

wl_buffer

compositor- drm

GPU

texture buffer

batch buffer

frame buffer

CRTC

texture buffer

texture buffer

texture texture

texture buffer

batch buffer

frame buffer

EGLSurface

Page 22: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력
Page 23: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

여러 화면을 하나의 화면으로 합쳐주는 것 SCENE GRAPH 각 화면의 위치 정보 관리

다양한 그래픽 관련 분야에서 활용 윈도우 매니저 여러 윈도우를 하나의 프레임버퍼로 합성

위젯 엔진 여러 위젯을 하나의 윈도우 화면으로 합성

window

window

framebuffer widget

widget

widget

widget window

widget

widget window

copy

copy copy

copy

Page 24: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

변환(transform) 관리 기본 변환 종류

■ 위치(position), 회전(rotation), 크기(size/scale)

상속 관계 표현(o), 상하 관계 표현(x)

레이어(layer) 관리 대부분의 윈도우는 동일한 계층 소속

윈도우의 상하 관계를 표현

플레인(plane) 관리 윈도우가 실제로 그려질 영역 관리

소프트웨어 플레인 vs 하드웨어 플레인

node (transform)

node (transform)

node (transform)

node (transform)

node (transform)

Page 25: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

현재 WESTON 에서 사용하는 레이어 구조

weston_view (cursor sprite)

fade_layer

cursor_layer

fullscreen_layer

panel_layer

background_layer

workspace_layer workspace_layer workspace_layer weston_view (application)

input_panel_layer

lock_layer

weston_surface

shell_surface

content

geometry

weston_view (application)

weston_surface weston_surface weston_surface

subsurface

Page 26: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

하드웨어 플레인 동작 원리 디스플레이에서 처리하는 일종의 컴포지팅

마우스 커서를 위한 독립된 하드웨어 플레인은 필수

사용자 시나리오에 맞는 적절한 하드웨어 플레인 활용 필요

APPLICATION

WINDOW

APPLICATION

WINDOW

APPLICATION

WINDOW

LAYER0

WINDOW

WINDOW

LAYER1

WINDOW

SCREEN

WINDOW

WINDOW

WINDOW

Page 27: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

데미지(damage) 관리 목적 PIXMAN 과 GL 렌더러에서 다음 프레임버퍼를 생성하기 위한 메모리 복사 최소화 (이전 프레임버퍼 재활용)

■ 동영상 압축 기술에서 사용하는 기술과 유사한 목적 (I/P 프레임)

이전 프레임버퍼에서 변경이 필요한 부분만 갱신하여 다음 프레임버퍼로 재활용

■ 변경이 필요한 영역을 잘 계산하는 것이 핵심!!!

화면 변경이 필요한 경우 클라이언트가 버퍼의 내용을 갱신할 때

■ 클라이언트는 버퍼의 변경 범위를 서버에 전송

윈도우의 위치/크기/방향이 변경될 때

새로운 윈도우가 나타나거나 기존의 윈도우가 사라질 때

Page 28: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

클라이언트가 버퍼의 내용을 갱신할 때 이전에 사용했던, 변경 사항이 없는 부분은 그대로 재사용

WAYLAND 의 기본 프로토콜을 이용하여 윈도우 버퍼가 변경된 범위를 전달 (wl_surface.damage)

window (client)

buffer

window (client)

buffer

compositor (server)

framebuffer

buffer

buffer

buffer

damage

damage

copy

Page 29: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

윈도우의 위치/크기/방향이 변경될 때 윈도우의 위치(크기/방향)가 변경되어 아래 있던 윈도우가 화면에 보여지는 경우 발생

■ 아래 있던 윈도우에서 새롭게 보여지게 된 영역 변경

■ 위치가 변경된 윈도우를 새로운 위치에서 다시 그림

※ 이러한 이유로, 레퍼런스 기반 버퍼를 사용할 때는 클라이언트가 마지막 윈도우 버퍼를 항상 유지할 필요가 있다. (마지막 윈도우 버퍼가 프레임버퍼에 한번 반영되었다고 끝이 아니다.)

window (client)

buffer

window (client)

buffer

compositor (pixman-renderer)

framebuffer

buffer

buffer

compositor (pixman-renderer)

framebuffer

buffer

buffer

copy

copy

Page 30: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

새로운 윈도우가 나타나거나 기존의 윈도우가 사라질 때 새로운 윈도우가 화면에 나타날 때 (왼쪽 그림)

■ 새로운 윈도우가 위치한 영역 변경

기존의 윈도우가 화면에서 사라질 때 (오른쪽 그림)

■ 아래 있던 윈도우에서 새롭게 보여지게 된 영역 변경

window (client)

buffer

window (client)

buffer

compositor (server)

framebuffer

buffer

buffer

copy

window (client)

buffer

compositor (server)

framebuffer

buffer copy

Page 31: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

화면에 보여지지 않는 부분에서 일어나는 변경 무시 스크린의 영역을 벗어난 곳에 위치할 때

다른 윈도우에 가려져있을 때

투명(blend) vs 불투명(opaque) 영역 관리

window (client)

buffer

window (client)

buffer

compositor (server)

framebuffer

buffer

buffer

window (client)

buffer

window (client)

buffer

compositor (pixman-renderer)

framebuffer

buffer buffer

Page 32: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력
Page 33: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

프레임버퍼를 디스플레이에 반영하는 과정 SCANOUT 프레임버퍼를 모니터 화면으로 전송

VBLANK(Vertical Blank) 다음 화면 갱신까지 대기

더블버퍼링 스캔아웃(front) 버퍼 + 업데이트(back) 버퍼

일반적으로 초당 60회 프레임버퍼 갱신 ■ SCANOUT & VBLANK 60회

scanout

vblank

scanout

vblank

60 hz

memory (CPU or GPU)

FRAMEBUFFER (back)

CRTC

FRAMEBUFFER (front)

compositor

Page 34: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

DRM 기반 디스플레이 동기화 (pageflip) DRM 에서 PAGE_FLIP 명령어/이벤트 제공 (모니터 ID, 프레임버퍼 ID)

다음 VBLANK 에서 프레임버퍼 갱신

scanout

vblank

scanout

vblank

60 hz kernel (DRM)

vsync

GPU

pageflip

weston (compositor)

framebuffer (front back)

buffer buffer

framebuffer (back front)

buffer buffer

: DRM IOCTL (PAGE_FLIP)

intr

Page 35: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력

현재 디스플레이 동기화 기술의 문제점 사용자 응답성 저하

■ 프레임버퍼 갱신 후 다음 VBLANK 까지 대기

■ 사용자 응답성을 높이기 위한 VSYNC 오프 모드 지원 (화면 깨짐 현상 발생)

프레임버퍼 렌더링 시간이 하나의 VBLANK 를 초과 ■ 프레임버퍼 갱신 주기가 지연되는 현상 발생

■ 실시간 3D 게임에서는 렌더링 시간 예측 불가

렌더링은 GPU 가 하고, 동기화는 디스플레이가 하는 것이 문제 ■ 과거 TV 에서 사용되던 동기화 기술 그대로 답습 (수동적인 2D 영상 감상 최적화)

■ NVIDIA G-SYNC 는 렌더링/동기화 모두 GPU 가 수행

Page 36: 윈도우 매니저 스터디: 1. 윈도우 매니저 출력