Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
nemoux00@gmail.com 
http://nemoux00.wordpress.com
윈도우 매니저 출력 기본 동작 과정 윈도우 버퍼 관리 (메모리 버퍼 vs DRM 버퍼) 컴포지팅/렌더링 방식 (메모리 기반 vs 하드웨어가속 기반) 윈도우 매니저 구조 (출력: 렌더러 + 백엔드) OPENGL OPENG...
윈도우 매니저 출력 과정 1. 윈도우 버퍼 공유 
■메모리 버퍼 기반 vs DRM 버퍼 기반 2. 컴포지팅(렌더링) 
■PIXMAN 렌더러 vs OPENGL 렌더러 3. 디스플레이 동기화 
■FB 백엔드 vs DRM 백...
렌더링 방식 메모리 기반(PIXMAN) vs 하드웨어가속 기반(OPENGL) 
SCREEN 
GPU 
framebuffer 
framebuffer 
GUI framework (without opengl) 
GUI fra...
APPLICATION 
APPLICATION 
CPU memory 
FRAMEBUFFER 
CRTC 
copy 
copy 
APPLICATION 
APPLICATION 
GPU memory 
FRAMEBUFFER 
CR...
공유 메모리 기반 윈도우 버퍼 관리 WAYLAND 는 로컬 기반 프로토콜이므로 레퍼런스 기반 버퍼 관리 
■클라이언트는 서버에 버퍼를 복사하지 않고 공유 메모리에 대한 접근 허용 렌더러는 클라이언트와의 공유 메모리에 직...
공유 메모리 기반 윈도우 버퍼 공유 과정 파일디스크립터 공유 (SCM_RIGHT 소켓 확장 기능 이용) 레퍼런스 기반 버퍼 최소한 더블 버퍼링 필요 
CLIENT 
wl_surface 
wl_shm 
wl_shm_poo...
DRM 버퍼 기반 윈도우 버퍼 관리 클라이언트가 하드웨어가속을 지원하는 경우 (drm) 
■렌더러는 클라이언트가 생성한 프레임버퍼를 텍스처로 이용하여 렌더링 클라이언트가 공유 메모리를 지원하는 경우 (shm) 
■렌더러...
윈도우 버퍼 반환(해제) 시점 메모리 버퍼 + PIXMAN 렌더러 (reference) 
■다음 윈도우 버퍼로 교체하기 전까지 유지 DRM 버퍼 + OPENGL 렌더러 (reference) 
■다음 윈도우 버퍼로 교체하...
렌더러 + 백엔드 일반적인 어플리케이션은 메모리 버퍼 사용 (하드웨어가속 x) 렌더러는 PIXMAN, OPENGL 두 가지만 존재 백엔드는 FB, DRM 외에도 X11, WAYLAND 등 여러 가지 존재 
■원격 지원을...
DRM 백엔드 (≠ OPENGL) KMS (Kernel Mode Setting) 
■Framebuffer/CRTC/Encoder/Connector 
■장치 검색 및 해상도/재생률 관리 디스플레이 동기화 
■PAGE_FL...
OPENGL 동작 방식 (레스터라이징 방식) 버텍스(vertex)  점 폴리곤(polygon)  면 (삼각형 기반) 텍스쳐(texture)  이미지 
3D SPACE 
(1, 0, 0) 
(-1, 0, 0) 
(0...
레스터라이징 vs 레이트레이싱 
Rasterization 
Ray tracing 
OpenGL, DirectX 
NVidia OptiX, … 
기본 동작 저비용, 효과 고비용 
기본 동작 고비용, 효과 저비용 
실시간 ...
기본 동작 과정 GPU 메모리를 할당받아 필요한 데이터 전달 (텍스쳐, 버텍스, …) 명령어 버퍼에 OPENGL 명령어 순서대로 전달 지정된 명령어 버퍼를 이용하여 렌더링 요청 GPU 가 명령어 버퍼를 이용하여 프레임버...
소프트웨어 구조 OPENGL 라이브러리/GPU 드라이버 플랫폼 API(GLX/WGL/EGL/…)/렌더링 API 
weston 
mesa 
gl-renderer 
EGL-api 
gallium 
GL-api 
i915-d...
어플리케이션이 윈도우 매니저를 통하지 않고 그래픽 카드에 직접 접근하는 방식 
GPU 
kernel 
X server 
OpenGL driver 
drm driver 
application 
(X11) 
applicat...
MESA/DRM 기준 동작 과정 (하나의 GPU 사용) 
WESTON 
CLIENT 
MESA client-side 
MESA server-side 
GPU 
batch buffer 
texture 
buffer 
fr...
둘 이상의 GPU 사용시 (파일디스크립터를 이용) 
GPU0 
batch 
buffer 
texture buffer 
frame buffer 
GPU1 
texture 
buffer 
batch 
buffer 
fram...
DRM 백엔드/GL 렌더러 동작 구조 
CLIENT 
wl_shm 
wl_egl_window 
wl_surface 
WAYLAND/WESTON 
gl-renderer 
texture 
shm_buffer 
egl_tex...
여러 화면을 하나의 화면으로 합쳐주는 것 SCENE GRAPH  각 화면의 위치 정보 관리 다양한 그래픽 관련 분야에서 활용 윈도우 매니저  여러 윈도우를 하나의 프레임버퍼로 합성 위젯 엔진  여러 위젯을 하나의 ...
변환(transform) 관리 기본 변환 종류 
■위치(position), 회전(rotation), 크기(size/scale) 상속 관계 표현(o), 상하 관계 표현(x) 레이어(layer) 관리 대부분의 윈도우는 동일...
현재 WESTON 에서 사용하는 레이어 구조 
weston_view (cursor sprite) 
fade_layer 
cursor_layer 
fullscreen_layer 
panel_layer 
background...
하드웨어 플레인 동작 원리 디스플레이에서 처리하는 일종의 컴포지팅 마우스 커서를 위한 독립된 하드웨어 플레인은 필수 사용자 시나리오에 맞는 적절한 하드웨어 플레인 활용 필요 
APPLICATION 
WINDOW 
APP...
데미지(damage) 관리 목적 PIXMAN 과 GL 렌더러에서 다음 프레임버퍼를 생성하기 위한 메모리 복사 최소화 (이전 프레임버퍼 재활용) 
■동영상 압축 기술에서 사용하는 기술과 유사한 목적 (I/P 프레임) 이전...
클라이언트가 버퍼의 내용을 갱신할 때 이전에 사용했던, 변경 사항이 없는 부분은 그대로 재사용 WAYLAND 의 기본 프로토콜을 이용하여 윈도우 버퍼가 변경된 범위를 전달 (wl_surface.damage) 
windo...
윈도우의 위치/크기/방향이 변경될 때 윈도우의 위치(크기/방향)가 변경되어 아래 있던 윈도우가 화면에 보여지는 경우 발생 
■아래 있던 윈도우에서 새롭게 보여지게 된 영역 변경 
■위치가 변경된 윈도우를 새로운 위치에서...
새로운 윈도우가 나타나거나 기존의 윈도우가 사라질 때 새로운 윈도우가 화면에 나타날 때 (왼쪽 그림) 
■새로운 윈도우가 위치한 영역 변경 기존의 윈도우가 화면에서 사라질 때 (오른쪽 그림) 
■아래 있던 윈도우에서 새...
화면에 보여지지 않는 부분에서 일어나는 변경 무시 스크린의 영역을 벗어난 곳에 위치할 때 다른 윈도우에 가려져있을 때 투명(blend) vs 불투명(opaque) 영역 관리 
window 
(client) 
buffer...
프레임버퍼를 디스플레이에 반영하는 과정 SCANOUT  프레임버퍼를 모니터 화면으로 전송 VBLANK(Vertical Blank)  다음 화면 갱신까지 대기 더블버퍼링  스캔아웃(front) 버퍼 + 업데이트(ba...
DRM 기반 디스플레이 동기화 (pageflip) DRM 에서 PAGE_FLIP 명령어/이벤트 제공 (모니터 ID, 프레임버퍼 ID) 다음 VBLANK 에서 프레임버퍼 갱신 
scanout 
vblank 
scanout...
현재 디스플레이 동기화 기술의 문제점 사용자 응답성 저하 
■프레임버퍼 갱신 후 다음 VBLANK 까지 대기 
■사용자 응답성을 높이기 위한 VSYNC 오프 모드 지원 (화면 깨짐 현상 발생) 프레임버퍼 렌더링 시간이 ...
윈도우 매니저 스터디: 1. 윈도우 매니저 출력
윈도우 매니저 스터디: 1. 윈도우 매니저 출력
윈도우 매니저 스터디: 1. 윈도우 매니저 출력
윈도우 매니저 스터디: 1. 윈도우 매니저 출력
윈도우 매니저 스터디: 1. 윈도우 매니저 출력
Upcoming SlideShare
Loading in …5
×

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

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

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

    Be the first to comment

    Login to see the comments

  • jenix211

    Oct. 23, 2014
  • twkwon

    Dec. 6, 2014
  • bluezery

    Jan. 28, 2015
  • JiHyeonGim

    May. 9, 2015
  • RedCarrottt

    Jun. 5, 2015
  • seok0721

    Nov. 1, 2015
  • woosokyang

    May. 20, 2016
  • younghwanjoo78

    Jan. 5, 2017
  • DaekyeongKim4

    Jan. 21, 2019
  • ksypassion

    Feb. 20, 2020

Views

Total views

2,495

On Slideshare

0

From embeds

0

Number of embeds

9

Actions

Downloads

51

Shares

0

Comments

0

Likes

10

×