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.

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

  • Be the first to comment

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

  1. 1. nemoux00@gmail.com http://nemoux00.wordpress.com
  2. 2. 컴포지팅 최적화 OPENGL 확장 인터페이스 WAYLAND 확장 프로토콜 소프트웨어 아키텍처 개선
  3. 3. 메모리 복사 최소화  메모리 사용을 최소화하고, 불필요한 메모리 전송을 줄여라! 제한된 자원의 스마트기기 활용 범위 확대 고해상도 디스플레이 등장 (레티나, 4K, …) 애니메이션 효과 일반화 지연 모드 지원  SCENE GRAPH 을 잘 관리하여 효과적인 렌더링을 하자! 윈도우 매니저는 SCENE GRAPH 관리 필수 효율적인 화면 갱신 및 불필요한 렌더링 제거 필수 하드웨어 가속 지원  CPU 대신 GPU 를 적극 활용하자! 3D 가속 지원 게임/서비스 지원 필수 컴포지팅을 위한 OpenGL 확장 기능 활용 필수 효과적인 하드웨어 플레인 활용 필수
  4. 4. ZERO-COPY  윈도우 버퍼 공유 및 복사 최소화 가장 기본적인/필수적인 컴포지팅 최적화!!! 버퍼 중복 제거  클라이언트와 서버가 하나의 버퍼 공유 ■레퍼런스 기반 버퍼 관리 (공유 메모리/DRM 기반 버퍼) 버퍼 복사 제거  화면이 변경된 부분만 갱신 ■SCENE GRAPH 을 이용한 효과적인 데미지/클리핑 관리 window (client) buffer window (client) buffer compositor (server) framebuffer buffer buffer buffer damage damage : 클라이언트 버퍼 공유 : 수정된 (damaged) 부분만 복사 copy copy copy
  5. 5. 데미지/클리핑 관리 최소 더블 버퍼링 필요  이전 프레임버퍼에서 변경된 부분만 갱신 ■현재 프레임버퍼  모니터 출력 ■이전 프레임버퍼  수정된 부분 갱신 후 다음 프레임버퍼로 사용 프레임버퍼 히스토리 관리 필수 (이전 프레임버퍼에 대한 정보 유지) 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
  6. 6. 지연 모드(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
  7. 7. 기존 하드웨어가속 컴포지팅 기본적인 데미지/클리핑 관리 불필요 텍스처 부분 갱신 미지원 프레임버퍼 부분 렌더링 미지원 향후 하드웨어가속 컴포지팅 텍스처 부분 갱신 지원 ■OpenGL 확장 인터페이스 (SUBIMAGE extension) 데미지/클리핑 관리를 통한 부분 렌더링 지원 ■프레임버퍼 히스토리 관리 ■OpenGL 확장 인터페이스 (BUFFER_AGE/SWAP_BUFFERS_WITH_DAMAGE extension)
  8. 8. 2D 기반 컴포지팅에 OpenGL 을 사용할 때의 문제점 더블 버퍼링을 지원하지만 이전 프레임버퍼에 대한 보장 없음 3D 게임을 지원하는 목적으로 개발되었기 때문에 부분 텍스처 갱신과 렌더링에 대한 지원 없음 … 2D 기반 컴포지팅을 위한 OpenGL 확장 기능 (최신) BUFFER_AGE extension  프레임버퍼 히스토리 관리 지원 SUBIMAGE extension  텍스처 부분 갱신 지원 SWAP_BUFFERS_WITH_DAMAGE extension  부분 렌더링 지원 …
  9. 9. 프레임버퍼 히스토리 관리 기능 최근에 추가된 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
  10. 10. 텍스처 부분 갱신 지원 SUBIMAGE extension 이용 GL 렌더러에서 공유 메모리 버퍼를 사용할 때 변경된 부분만 갱신 ■기존에는 텍스처를 부분적으로 업데이트하는 것이 불가능 window (client) buffer window (client) buffer compositor (server) framebuffer texture texture texture damage copy damage
  11. 11. 부분 렌더링 지원 SWAP_BUFFERS_WITH_DAMAGE extension 이용 BUFFER_AGE extension 과 같이 사용 ■이전 프레임버퍼에서 필요한 부분만 다시 렌더링 할 수 있도록 지원 ■기존에는 전체 프레임버퍼를 한번에 렌더링하는 기능만 제공 ■해당 확장 기능으로 이전 프레임버퍼를 효과적으로 사용 가능 window (client) buffer window (client) buffer compositor (server) framebuffer texture texture texture damage damage rendering
  12. 12. AMD Mantle API 공개 (& APPLE Metal API) 범용성을 중요시 하는 DirectX 와 OpenGL 대체 콘솔 게임은 범용성 보다는 성능 중시 ■특정 플랫폼에 최적화된 로우 레벨 API 사용 개별적으로 사용되던 로우 레벨 API 에 대한 표준화 시도 ■PC 뿐 아니라 다양한 콘솔도 적용 가능 DirectX 와 OpenGL 차기 버전 준비 중 MS 는 Mantle 에 대항할 수 있는 성능을 가진 DirectX 12 준비 NVIDIA, AMD, INTEL 등 다양한 회사에서 OpenGL 최적화 진행
  13. 13. wl_subsurface 프로토콜 효과적인 CSD (Client Side Decoration) 지원 클라이언트에서의 불필요한 서페이스 합성 제거 편리한 윈도우 프레임 지원 영상 재생 어플리케이션 개발 지원 … APPLICATION FRAME WINDOW APPLICATION VIDEO CONTROL
  14. 14. 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
  15. 15. 싱글 스레드 기반 윈도우 매니저/툴킷 엔진 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, …
  16. 16. 두 개 이상의 병렬 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)
  17. 17. 전체 화면 모드에서 클라이언트가 렌더링한 화면과 결과 화면이 동일 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. 마우스 커서 플레인 지원 마우스 커서가 여러 개라면?? 하드웨어 플레인 사용 윈도우 선정 같은 플레인에 존재하는 윈도우에 의해 클리핑 되지 않는 윈도우 비교적 화면 갱신이 많은 윈도우 … 현재 WESTON 동작 방식 화면 앞에서 뒤의 순서로 클리핑 되지 않는 윈도우 선정
  19. 19. 더블 버퍼링 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
  20. 20. 윈도우 매니저 기반 디스플레이 동기화 재생률 보장 (영상, …) 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 …

×