SlideShare une entreprise Scribd logo
1  sur  36
Télécharger pour lire hors ligne
nemoux00@gmail.com 
http://nemoux00.wordpress.com
윈도우 매니저 출력 기본 동작 과정 윈도우 버퍼 관리 (메모리 버퍼 vs DRM 버퍼) 컴포지팅/렌더링 방식 (메모리 기반 vs 하드웨어가속 기반) 윈도우 매니저 구조 (출력: 렌더러 + 백엔드) OPENGL OPENGL 동작 과정 및 소프트웨어 스택 구조 DRI & DRM 컴포지팅 디스플레이 동기화
윈도우 매니저 출력 과정 1. 윈도우 버퍼 공유 
■메모리 버퍼 기반 vs DRM 버퍼 기반 2. 컴포지팅(렌더링) 
■PIXMAN 렌더러 vs OPENGL 렌더러 3. 디스플레이 동기화 
■FB 백엔드 vs DRM 백엔드 
APPLICATION 
APPLICATION 
COMPOSITOR 
FRAMEBUFFER 
CRTC 
1 
2 
3 
1 
2
렌더링 방식 메모리 기반(PIXMAN) vs 하드웨어가속 기반(OPENGL) 
SCREEN 
GPU 
framebuffer 
framebuffer 
GUI framework (without opengl) 
GUI framework 
(with opengl) 
WINDOW 
WINDOW 
CPU
APPLICATION 
APPLICATION 
CPU memory 
FRAMEBUFFER 
CRTC 
copy 
copy 
APPLICATION 
APPLICATION 
GPU memory 
FRAMEBUFFER 
CRTC 
rendering 
메모리 기반 (without OPENGL, with PIXMAN) 
하드웨어가속 기반 (with OPENGL) 
sync
공유 메모리 기반 윈도우 버퍼 관리 WAYLAND 는 로컬 기반 프로토콜이므로 레퍼런스 기반 버퍼 관리 
■클라이언트는 서버에 버퍼를 복사하지 않고 공유 메모리에 대한 접근 허용 렌더러는 클라이언트와의 공유 메모리에 직접 접근하여 필요한 부분을 프레임버퍼로 복사 
application (shm) 
buffer 
application 
(shm) 
buffer 
compositor (pixman-renderer) 
framebuffer 
buffer 
buffer 
copy 
copy
공유 메모리 기반 윈도우 버퍼 공유 과정 파일디스크립터 공유 (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
DRM 버퍼 기반 윈도우 버퍼 관리 클라이언트가 하드웨어가속을 지원하는 경우 (drm) 
■렌더러는 클라이언트가 생성한 프레임버퍼를 텍스처로 이용하여 렌더링 클라이언트가 공유 메모리를 지원하는 경우 (shm) 
■렌더러는 클라이언트의 공유 메모리를 이용하여 텍스처 생성 
 이로 인해 경우에 따라, PIXMAN 렌더러보다 성능이 떨어질 수도 있다. 
application (shm) 
buffer 
application 
(drm) 
buffer (framebuffer) 
compositor (gl-renderer) 
framebuffer 
texture 
texture 
texture 
copy
윈도우 버퍼 반환(해제) 시점 메모리 버퍼 + 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
렌더러 + 백엔드 일반적인 어플리케이션은 메모리 버퍼 사용 (하드웨어가속 x) 렌더러는 PIXMAN, OPENGL 두 가지만 존재 백엔드는 FB, DRM 외에도 X11, WAYLAND 등 여러 가지 존재 
■원격 지원을 위한 RDP 백엔드도 존재 (Remote Desktop Protocol) 
메모리 버퍼 
DRM 버퍼 
PIXMAN 렌더러 
OPENGL 렌더러 
FB 백엔드 
DRM 백엔드 
WAYLAND 백엔드
DRM 백엔드 (≠ OPENGL) KMS (Kernel Mode Setting) 
■Framebuffer/CRTC/Encoder/Connector 
■장치 검색 및 해상도/재생률 관리 디스플레이 동기화 
■PAGE_FLIP  다음 VBLANK 에서 프레임버퍼 교체 
■VSYNC  다음 VSYNC 이벤트 전달 하드웨어 플레인 관리 
■마우스 커서 플레인, … 자원 관리 
■GPU 가 사용하는 시스템 메모리와 그래픽 메모리 관리 
■GPU 가 사용하는 가상 주소 공간 관리 (IOMMU) 
■GPU 에 명령어 스트림 전달 및 실행 (렌더링, DMA, …)
OPENGL 동작 방식 (레스터라이징 방식) 버텍스(vertex)  점 폴리곤(polygon)  면 (삼각형 기반) 텍스쳐(texture)  이미지 
3D SPACE 
(1, 0, 0) 
(-1, 0, 0) 
(0, 1, 0) 
FRAMEBUFFER
레스터라이징 vs 레이트레이싱 
Rasterization 
Ray tracing 
OpenGL, DirectX 
NVidia OptiX, … 
기본 동작 저비용, 효과 고비용 
기본 동작 고비용, 효과 저비용 
실시간 게임, 모델링 등에 활용 
영화, 인테리어 CG 제작 등에 활용 
Real time ray tracing 
그래픽장치 성능 발전 
실시간 게임, 모델링 등에 활용
기본 동작 과정 GPU 메모리를 할당받아 필요한 데이터 전달 (텍스쳐, 버텍스, …) 명령어 버퍼에 OPENGL 명령어 순서대로 전달 지정된 명령어 버퍼를 이용하여 렌더링 요청 GPU 가 명령어 버퍼를 이용하여 프레임버퍼에 결과 이미지 렌더링 
glVertex() 
glTexImage() 
GPU 
batch buffer 
texture buffer 
frame buffer 
eglSwapBuffers() 
CRTC 
vertex buffer 
glBufferData()
소프트웨어 구조 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
어플리케이션이 윈도우 매니저를 통하지 않고 그래픽 카드에 직접 접근하는 방식 
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
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
둘 이상의 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
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
여러 화면을 하나의 화면으로 합쳐주는 것 SCENE GRAPH  각 화면의 위치 정보 관리 다양한 그래픽 관련 분야에서 활용 윈도우 매니저  여러 윈도우를 하나의 프레임버퍼로 합성 위젯 엔진  여러 위젯을 하나의 윈도우 화면으로 합성 … 
window 
window 
framebuffer 
widget 
widget 
widget 
widget 
window 
widget 
widget 
window 
copy 
copy 
copy 
copy
변환(transform) 관리 기본 변환 종류 
■위치(position), 회전(rotation), 크기(size/scale) 상속 관계 표현(o), 상하 관계 표현(x) 레이어(layer) 관리 대부분의 윈도우는 동일한 계층 소속 윈도우의 상하 관계를 표현 플레인(plane) 관리 윈도우가 실제로 그려질 영역 관리 소프트웨어 플레인 vs 하드웨어 플레인 
node 
(transform) 
node (transform) 
node (transform) 
node 
(transform) 
node 
(transform)
현재 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
하드웨어 플레인 동작 원리 디스플레이에서 처리하는 일종의 컴포지팅 마우스 커서를 위한 독립된 하드웨어 플레인은 필수 사용자 시나리오에 맞는 적절한 하드웨어 플레인 활용 필요 
APPLICATION 
WINDOW 
APPLICATION 
WINDOW 
APPLICATION 
WINDOW 
LAYER0 
WINDOW 
WINDOW 
LAYER1 
WINDOW 
SCREEN 
WINDOW 
WINDOW 
WINDOW
데미지(damage) 관리 목적 PIXMAN 과 GL 렌더러에서 다음 프레임버퍼를 생성하기 위한 메모리 복사 최소화 (이전 프레임버퍼 재활용) 
■동영상 압축 기술에서 사용하는 기술과 유사한 목적 (I/P 프레임) 이전 프레임버퍼에서 변경이 필요한 부분만 갱신하여 다음 프레임버퍼로 재활용 
■변경이 필요한 영역을 잘 계산하는 것이 핵심!!! 화면 변경이 필요한 경우 클라이언트가 버퍼의 내용을 갱신할 때 
■클라이언트는 버퍼의 변경 범위를 서버에 전송 윈도우의 위치/크기/방향이 변경될 때 새로운 윈도우가 나타나거나 기존의 윈도우가 사라질 때 …
클라이언트가 버퍼의 내용을 갱신할 때 이전에 사용했던, 변경 사항이 없는 부분은 그대로 재사용 WAYLAND 의 기본 프로토콜을 이용하여 윈도우 버퍼가 변경된 범위를 전달 (wl_surface.damage) 
window (client) 
buffer 
window 
(client) 
buffer 
compositor 
(server) 
framebuffer 
buffer 
buffer 
buffer 
damage 
damage 
copy
윈도우의 위치/크기/방향이 변경될 때 윈도우의 위치(크기/방향)가 변경되어 아래 있던 윈도우가 화면에 보여지는 경우 발생 
■아래 있던 윈도우에서 새롭게 보여지게 된 영역 변경 
■위치가 변경된 윈도우를 새로운 위치에서 다시 그림 
※ 이러한 이유로, 레퍼런스 기반 버퍼를 사용할 때는 클라이언트가 마지막 윈도우 버퍼를 항상 유지할 필요가 있다. (마지막 윈도우 버퍼가 프레임버퍼에 한번 반영되었다고 끝이 아니다.) 
window (client) 
buffer 
window 
(client) 
buffer 
compositor 
(pixman-renderer) 
framebuffer 
buffer 
buffer 
compositor (pixman-renderer) 
framebuffer 
buffer 
buffer 
copy 
copy
새로운 윈도우가 나타나거나 기존의 윈도우가 사라질 때 새로운 윈도우가 화면에 나타날 때 (왼쪽 그림) 
■새로운 윈도우가 위치한 영역 변경 기존의 윈도우가 화면에서 사라질 때 (오른쪽 그림) 
■아래 있던 윈도우에서 새롭게 보여지게 된 영역 변경 
window 
(client) 
buffer 
window 
(client) 
buffer 
compositor 
(server) 
framebuffer 
buffer 
buffer 
copy 
window 
(client) 
buffer 
compositor (server) 
framebuffer 
buffer 
copy
화면에 보여지지 않는 부분에서 일어나는 변경 무시 스크린의 영역을 벗어난 곳에 위치할 때 다른 윈도우에 가려져있을 때 투명(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
프레임버퍼를 디스플레이에 반영하는 과정 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
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
현재 디스플레이 동기화 기술의 문제점 사용자 응답성 저하 
■프레임버퍼 갱신 후 다음 VBLANK 까지 대기 
■사용자 응답성을 높이기 위한 VSYNC 오프 모드 지원 (화면 깨짐 현상 발생) 프레임버퍼 렌더링 시간이 하나의 VBLANK 를 초과 
■프레임버퍼 갱신 주기가 지연되는 현상 발생 
■실시간 3D 게임에서는 렌더링 시간 예측 불가 렌더링은 GPU 가 하고, 동기화는 디스플레이가 하는 것이 문제 
■과거 TV 에서 사용되던 동기화 기술 그대로 답습 (수동적인 2D 영상 감상 최적화) 
■NVIDIA G-SYNC 는 렌더링/동기화 모두 GPU 가 수행
윈도우 매니저 스터디: 1. 윈도우 매니저 출력

Contenu connexe

Tendances

Tegra 186のu-boot & Linux
Tegra 186のu-boot & LinuxTegra 186のu-boot & Linux
Tegra 186のu-boot & LinuxMr. Vengineer
 
The linux networking architecture
The linux networking architectureThe linux networking architecture
The linux networking architecturehugo lu
 
MediaPlayer Playing Flow
MediaPlayer Playing FlowMediaPlayer Playing Flow
MediaPlayer Playing FlowJavid Hsu
 
Terrain Rendering in Frostbite using Procedural Shader Splatting (Siggraph 2007)
Terrain Rendering in Frostbite using Procedural Shader Splatting (Siggraph 2007)Terrain Rendering in Frostbite using Procedural Shader Splatting (Siggraph 2007)
Terrain Rendering in Frostbite using Procedural Shader Splatting (Siggraph 2007)Johan Andersson
 
BPF Hardware Offload Deep Dive
BPF Hardware Offload Deep DiveBPF Hardware Offload Deep Dive
BPF Hardware Offload Deep DiveNetronome
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012devCAT Studio, NEXON
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11민웅 이
 
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveBin Chen
 
Unite2019 HLOD를 활용한 대규모 씬 제작 방법
Unite2019 HLOD를 활용한 대규모 씬 제작 방법Unite2019 HLOD를 활용한 대규모 씬 제작 방법
Unite2019 HLOD를 활용한 대규모 씬 제작 방법장규 서
 
Skia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics EssentialsSkia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics EssentialsKyungmin Lee
 
Linux MMAP & Ioremap introduction
Linux MMAP & Ioremap introductionLinux MMAP & Ioremap introduction
Linux MMAP & Ioremap introductionGene Chang
 
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth ThomasHoly smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth ThomasAMD Developer Central
 
2 D게임 프로그래밍 발표 자료
2 D게임 프로그래밍 발표 자료2 D게임 프로그래밍 발표 자료
2 D게임 프로그래밍 발표 자료Lee Jungmin
 
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...Johan Andersson
 

Tendances (20)

Tegra 186のu-boot & Linux
Tegra 186のu-boot & LinuxTegra 186のu-boot & Linux
Tegra 186のu-boot & Linux
 
The linux networking architecture
The linux networking architectureThe linux networking architecture
The linux networking architecture
 
MediaPlayer Playing Flow
MediaPlayer Playing FlowMediaPlayer Playing Flow
MediaPlayer Playing Flow
 
Terrain Rendering in Frostbite using Procedural Shader Splatting (Siggraph 2007)
Terrain Rendering in Frostbite using Procedural Shader Splatting (Siggraph 2007)Terrain Rendering in Frostbite using Procedural Shader Splatting (Siggraph 2007)
Terrain Rendering in Frostbite using Procedural Shader Splatting (Siggraph 2007)
 
Xvisor: embedded and lightweight hypervisor
Xvisor: embedded and lightweight hypervisorXvisor: embedded and lightweight hypervisor
Xvisor: embedded and lightweight hypervisor
 
BPF Hardware Offload Deep Dive
BPF Hardware Offload Deep DiveBPF Hardware Offload Deep Dive
BPF Hardware Offload Deep Dive
 
Design and Concepts of Android Graphics
Design and Concepts of Android GraphicsDesign and Concepts of Android Graphics
Design and Concepts of Android Graphics
 
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
전형규, 가성비 좋은 렌더링 테크닉 10선, NDC2012
 
Low Level View of Android System Architecture
Low Level View of Android System ArchitectureLow Level View of Android System Architecture
Low Level View of Android System Architecture
 
eBPF maps 101
eBPF maps 101eBPF maps 101
eBPF maps 101
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11
 
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspectiveAndroid graphic system (SurfaceFlinger) : Design Pattern's perspective
Android graphic system (SurfaceFlinger) : Design Pattern's perspective
 
Unite2019 HLOD를 활용한 대규모 씬 제작 방법
Unite2019 HLOD를 활용한 대규모 씬 제작 방법Unite2019 HLOD를 활용한 대규모 씬 제작 방법
Unite2019 HLOD를 활용한 대규모 씬 제작 방법
 
Skia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics EssentialsSkia & Freetype - Android 2D Graphics Essentials
Skia & Freetype - Android 2D Graphics Essentials
 
Linux MMAP & Ioremap introduction
Linux MMAP & Ioremap introductionLinux MMAP & Ioremap introduction
Linux MMAP & Ioremap introduction
 
eBPF/XDP
eBPF/XDP eBPF/XDP
eBPF/XDP
 
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth ThomasHoly smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
Holy smoke! Faster Particle Rendering using Direct Compute by Gareth Thomas
 
2 D게임 프로그래밍 발표 자료
2 D게임 프로그래밍 발표 자료2 D게임 프로그래밍 발표 자료
2 D게임 프로그래밍 발표 자료
 
Audio Drivers
Audio DriversAudio Drivers
Audio Drivers
 
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
Frostbite Rendering Architecture and Real-time Procedural Shading & Texturing...
 

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

윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화nemoux
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기Chang W. Doh
 
모바일웹Ui개발 저자세미나 1부
모바일웹Ui개발 저자세미나 1부모바일웹Ui개발 저자세미나 1부
모바일웹Ui개발 저자세미나 1부NAVER D2
 
프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer ModelHan Lee
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기Chang W. Doh
 
MGS 툴세미나
MGS 툴세미나MGS 툴세미나
MGS 툴세미나Bonex Gu
 
Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)Gamebryo
 
20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)Dongho Kim
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp진현 조
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013devCAT Studio, NEXON
 
Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blogozlael ozlael
 
Direct3d overview
Direct3d overviewDirect3d overview
Direct3d overview문익 장
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화 tartist
 
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화Jongwon Kim
 
고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화Byung Ho Lee
 
전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011devCAT Studio, NEXON
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망Sang Seok Lim
 
Flash Player 11과 AIR 3 환경에서 3D 개발
Flash Player 11과 AIR 3 환경에서 3D 개발Flash Player 11과 AIR 3 환경에서 3D 개발
Flash Player 11과 AIR 3 환경에서 3D 개발Yongho Ji
 
VMsoft clairview 제품소개서 (2014.03)
VMsoft clairview 제품소개서 (2014.03)VMsoft clairview 제품소개서 (2014.03)
VMsoft clairview 제품소개서 (2014.03)Daniel Park
 

Similaire à 윈도우 매니저 스터디: 1. 윈도우 매니저 출력 (20)

윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
윈도우 매니저 스터디: 2. 윈도우 매니저 최적화
 
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능 인자 이해하기
 
모바일웹Ui개발 저자세미나 1부
모바일웹Ui개발 저자세미나 1부모바일웹Ui개발 저자세미나 1부
모바일웹Ui개발 저자세미나 1부
 
프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model프론트엔드 개발자를 위한 Layer Model
프론트엔드 개발자를 위한 Layer Model
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
MGS 툴세미나
MGS 툴세미나MGS 툴세미나
MGS 툴세미나
 
Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)Gamebryo LightSpeed (Korean)
Gamebryo LightSpeed (Korean)
 
20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)20140514 team blender_v01 (Korean)
20140514 team blender_v01 (Korean)
 
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp
 
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
전형규, M2 클라이언트 스레딩 아키텍쳐, NDC2013
 
Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blog
 
Modern gpu optimize
Modern gpu optimizeModern gpu optimize
Modern gpu optimize
 
Direct3d overview
Direct3d overviewDirect3d overview
Direct3d overview
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
KGC 2014 프로파일러를 이용한 게임 클라이언트 최적화
 
고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화고성능 애니메이션 개발 기법 및 성능 최적화
고성능 애니메이션 개발 기법 및 성능 최적화
 
전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011전형규, Vertex Post-Processing Framework, NDC2011
전형규, Vertex Post-Processing Framework, NDC2011
 
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
HTML5 관점에서 본 2014 모바일 웹 앱 개발 동향과 사례 및 발전 방향 전망
 
Flash Player 11과 AIR 3 환경에서 3D 개발
Flash Player 11과 AIR 3 환경에서 3D 개발Flash Player 11과 AIR 3 환경에서 3D 개발
Flash Player 11과 AIR 3 환경에서 3D 개발
 
VMsoft clairview 제품소개서 (2014.03)
VMsoft clairview 제품소개서 (2014.03)VMsoft clairview 제품소개서 (2014.03)
VMsoft clairview 제품소개서 (2014.03)
 

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

  • 2. 윈도우 매니저 출력 기본 동작 과정 윈도우 버퍼 관리 (메모리 버퍼 vs DRM 버퍼) 컴포지팅/렌더링 방식 (메모리 기반 vs 하드웨어가속 기반) 윈도우 매니저 구조 (출력: 렌더러 + 백엔드) OPENGL OPENGL 동작 과정 및 소프트웨어 스택 구조 DRI & DRM 컴포지팅 디스플레이 동기화
  • 3.
  • 4. 윈도우 매니저 출력 과정 1. 윈도우 버퍼 공유 ■메모리 버퍼 기반 vs DRM 버퍼 기반 2. 컴포지팅(렌더링) ■PIXMAN 렌더러 vs OPENGL 렌더러 3. 디스플레이 동기화 ■FB 백엔드 vs DRM 백엔드 APPLICATION APPLICATION COMPOSITOR FRAMEBUFFER CRTC 1 2 3 1 2
  • 5. 렌더링 방식 메모리 기반(PIXMAN) vs 하드웨어가속 기반(OPENGL) SCREEN GPU framebuffer framebuffer GUI framework (without opengl) GUI framework (with opengl) WINDOW WINDOW CPU
  • 6. APPLICATION APPLICATION CPU memory FRAMEBUFFER CRTC copy copy APPLICATION APPLICATION GPU memory FRAMEBUFFER CRTC rendering 메모리 기반 (without OPENGL, with PIXMAN) 하드웨어가속 기반 (with OPENGL) sync
  • 7. 공유 메모리 기반 윈도우 버퍼 관리 WAYLAND 는 로컬 기반 프로토콜이므로 레퍼런스 기반 버퍼 관리 ■클라이언트는 서버에 버퍼를 복사하지 않고 공유 메모리에 대한 접근 허용 렌더러는 클라이언트와의 공유 메모리에 직접 접근하여 필요한 부분을 프레임버퍼로 복사 application (shm) buffer application (shm) buffer compositor (pixman-renderer) framebuffer buffer buffer copy copy
  • 8. 공유 메모리 기반 윈도우 버퍼 공유 과정 파일디스크립터 공유 (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
  • 9. DRM 버퍼 기반 윈도우 버퍼 관리 클라이언트가 하드웨어가속을 지원하는 경우 (drm) ■렌더러는 클라이언트가 생성한 프레임버퍼를 텍스처로 이용하여 렌더링 클라이언트가 공유 메모리를 지원하는 경우 (shm) ■렌더러는 클라이언트의 공유 메모리를 이용하여 텍스처 생성  이로 인해 경우에 따라, PIXMAN 렌더러보다 성능이 떨어질 수도 있다. application (shm) buffer application (drm) buffer (framebuffer) compositor (gl-renderer) framebuffer texture texture texture copy
  • 10. 윈도우 버퍼 반환(해제) 시점 메모리 버퍼 + 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
  • 11. 렌더러 + 백엔드 일반적인 어플리케이션은 메모리 버퍼 사용 (하드웨어가속 x) 렌더러는 PIXMAN, OPENGL 두 가지만 존재 백엔드는 FB, DRM 외에도 X11, WAYLAND 등 여러 가지 존재 ■원격 지원을 위한 RDP 백엔드도 존재 (Remote Desktop Protocol) 메모리 버퍼 DRM 버퍼 PIXMAN 렌더러 OPENGL 렌더러 FB 백엔드 DRM 백엔드 WAYLAND 백엔드
  • 12. DRM 백엔드 (≠ OPENGL) KMS (Kernel Mode Setting) ■Framebuffer/CRTC/Encoder/Connector ■장치 검색 및 해상도/재생률 관리 디스플레이 동기화 ■PAGE_FLIP  다음 VBLANK 에서 프레임버퍼 교체 ■VSYNC  다음 VSYNC 이벤트 전달 하드웨어 플레인 관리 ■마우스 커서 플레인, … 자원 관리 ■GPU 가 사용하는 시스템 메모리와 그래픽 메모리 관리 ■GPU 가 사용하는 가상 주소 공간 관리 (IOMMU) ■GPU 에 명령어 스트림 전달 및 실행 (렌더링, DMA, …)
  • 13.
  • 14. OPENGL 동작 방식 (레스터라이징 방식) 버텍스(vertex)  점 폴리곤(polygon)  면 (삼각형 기반) 텍스쳐(texture)  이미지 3D SPACE (1, 0, 0) (-1, 0, 0) (0, 1, 0) FRAMEBUFFER
  • 15. 레스터라이징 vs 레이트레이싱 Rasterization Ray tracing OpenGL, DirectX NVidia OptiX, … 기본 동작 저비용, 효과 고비용 기본 동작 고비용, 효과 저비용 실시간 게임, 모델링 등에 활용 영화, 인테리어 CG 제작 등에 활용 Real time ray tracing 그래픽장치 성능 발전 실시간 게임, 모델링 등에 활용
  • 16. 기본 동작 과정 GPU 메모리를 할당받아 필요한 데이터 전달 (텍스쳐, 버텍스, …) 명령어 버퍼에 OPENGL 명령어 순서대로 전달 지정된 명령어 버퍼를 이용하여 렌더링 요청 GPU 가 명령어 버퍼를 이용하여 프레임버퍼에 결과 이미지 렌더링 glVertex() glTexImage() GPU batch buffer texture buffer frame buffer eglSwapBuffers() CRTC vertex buffer glBufferData()
  • 17. 소프트웨어 구조 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
  • 18. 어플리케이션이 윈도우 매니저를 통하지 않고 그래픽 카드에 직접 접근하는 방식 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
  • 19. 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
  • 20. 둘 이상의 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
  • 21. 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
  • 22.
  • 23. 여러 화면을 하나의 화면으로 합쳐주는 것 SCENE GRAPH  각 화면의 위치 정보 관리 다양한 그래픽 관련 분야에서 활용 윈도우 매니저  여러 윈도우를 하나의 프레임버퍼로 합성 위젯 엔진  여러 위젯을 하나의 윈도우 화면으로 합성 … window window framebuffer widget widget widget widget window widget widget window copy copy copy copy
  • 24. 변환(transform) 관리 기본 변환 종류 ■위치(position), 회전(rotation), 크기(size/scale) 상속 관계 표현(o), 상하 관계 표현(x) 레이어(layer) 관리 대부분의 윈도우는 동일한 계층 소속 윈도우의 상하 관계를 표현 플레인(plane) 관리 윈도우가 실제로 그려질 영역 관리 소프트웨어 플레인 vs 하드웨어 플레인 node (transform) node (transform) node (transform) node (transform) node (transform)
  • 25. 현재 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
  • 26. 하드웨어 플레인 동작 원리 디스플레이에서 처리하는 일종의 컴포지팅 마우스 커서를 위한 독립된 하드웨어 플레인은 필수 사용자 시나리오에 맞는 적절한 하드웨어 플레인 활용 필요 APPLICATION WINDOW APPLICATION WINDOW APPLICATION WINDOW LAYER0 WINDOW WINDOW LAYER1 WINDOW SCREEN WINDOW WINDOW WINDOW
  • 27. 데미지(damage) 관리 목적 PIXMAN 과 GL 렌더러에서 다음 프레임버퍼를 생성하기 위한 메모리 복사 최소화 (이전 프레임버퍼 재활용) ■동영상 압축 기술에서 사용하는 기술과 유사한 목적 (I/P 프레임) 이전 프레임버퍼에서 변경이 필요한 부분만 갱신하여 다음 프레임버퍼로 재활용 ■변경이 필요한 영역을 잘 계산하는 것이 핵심!!! 화면 변경이 필요한 경우 클라이언트가 버퍼의 내용을 갱신할 때 ■클라이언트는 버퍼의 변경 범위를 서버에 전송 윈도우의 위치/크기/방향이 변경될 때 새로운 윈도우가 나타나거나 기존의 윈도우가 사라질 때 …
  • 28. 클라이언트가 버퍼의 내용을 갱신할 때 이전에 사용했던, 변경 사항이 없는 부분은 그대로 재사용 WAYLAND 의 기본 프로토콜을 이용하여 윈도우 버퍼가 변경된 범위를 전달 (wl_surface.damage) window (client) buffer window (client) buffer compositor (server) framebuffer buffer buffer buffer damage damage copy
  • 29. 윈도우의 위치/크기/방향이 변경될 때 윈도우의 위치(크기/방향)가 변경되어 아래 있던 윈도우가 화면에 보여지는 경우 발생 ■아래 있던 윈도우에서 새롭게 보여지게 된 영역 변경 ■위치가 변경된 윈도우를 새로운 위치에서 다시 그림 ※ 이러한 이유로, 레퍼런스 기반 버퍼를 사용할 때는 클라이언트가 마지막 윈도우 버퍼를 항상 유지할 필요가 있다. (마지막 윈도우 버퍼가 프레임버퍼에 한번 반영되었다고 끝이 아니다.) window (client) buffer window (client) buffer compositor (pixman-renderer) framebuffer buffer buffer compositor (pixman-renderer) framebuffer buffer buffer copy copy
  • 30. 새로운 윈도우가 나타나거나 기존의 윈도우가 사라질 때 새로운 윈도우가 화면에 나타날 때 (왼쪽 그림) ■새로운 윈도우가 위치한 영역 변경 기존의 윈도우가 화면에서 사라질 때 (오른쪽 그림) ■아래 있던 윈도우에서 새롭게 보여지게 된 영역 변경 window (client) buffer window (client) buffer compositor (server) framebuffer buffer buffer copy window (client) buffer compositor (server) framebuffer buffer copy
  • 31. 화면에 보여지지 않는 부분에서 일어나는 변경 무시 스크린의 영역을 벗어난 곳에 위치할 때 다른 윈도우에 가려져있을 때 투명(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
  • 32.
  • 33. 프레임버퍼를 디스플레이에 반영하는 과정 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
  • 34. 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
  • 35. 현재 디스플레이 동기화 기술의 문제점 사용자 응답성 저하 ■프레임버퍼 갱신 후 다음 VBLANK 까지 대기 ■사용자 응답성을 높이기 위한 VSYNC 오프 모드 지원 (화면 깨짐 현상 발생) 프레임버퍼 렌더링 시간이 하나의 VBLANK 를 초과 ■프레임버퍼 갱신 주기가 지연되는 현상 발생 ■실시간 3D 게임에서는 렌더링 시간 예측 불가 렌더링은 GPU 가 하고, 동기화는 디스플레이가 하는 것이 문제 ■과거 TV 에서 사용되던 동기화 기술 그대로 답습 (수동적인 2D 영상 감상 최적화) ■NVIDIA G-SYNC 는 렌더링/동기화 모두 GPU 가 수행