버추얼GL

VirtualGL
버추얼GL
안정적 해제
2.6.5 / 2020년 11월 18일; 16개월(2020-11-18)
릴리스 미리 보기
2.6.90 (3.0 베타1) / 2021년 6월 16일; 9개월(2021-06-16)
기록 위치C, C++, Unix Shell
면허증GNU GPL(General Public License), wxWindows Library License
웹사이트www.virtualgl.org

VirtualGL유닉스리눅스 OpenGL 애플리케이션에서 전용 서버의 3D 가속기 하드웨어로 3D 렌더링 명령을 리디렉션하고 렌더링된 출력을 네트워크의 다른 곳에 위치한 () 클라이언트로 전송하는 오픈 소스 소프트웨어 패키지다.[1]서버측에서 VirtualGL은 리디렉션을 처리하는 라이브러리와 응용프로그램에 이 라이브러리를 사용하도록 지시하는 래퍼 프로그램으로 구성된다.클라이언트는 원격 X11 연결을 사용하거나 VNC 서버와 같은 X11 프록시를 사용하여 서버에 연결할 수 있다.X11 연결의 경우 일부 클라이언트측 VirtualGL 소프트웨어도 X11 스트림과 별도로 렌더링된 그래픽 출력을 수신하기 위해 필요하다.VNC 연결의 경우 VNC 클라이언트 자체 외에 특정 클라이언트 측 소프트웨어가 필요하지 않다.

문제

일반적으로 GPU에 존재하는 전용 하드웨어 가속기에 그래픽을 렌더링함으로써 OpenGL 애플리케이션의 성능을 크게 향상시킬 수 있다. GPU는 애플리케이션이 허용 가능한 성능에 의존하게 될 정도로 보편화되었다.그러나 VNC와 유닉스 및 리눅스용 기타 씬 클라이언트 환경은 서버 측에서 이러한 하드웨어에 액세스할 수 없다.따라서 그들은 OpenGL 애플리케이션을 전혀 지원하지 않거나 클라이언트나 서버의 소프트웨어 렌더링과 같은 느린 방법을 사용한다.

하드웨어 가속화와 함께 3D 애플리케이션을 원격으로 표시하기 위해서는 전통적으로 "간접 렌더링"을 사용해야 했다.간접 렌더링은 X 윈도우 시스템("X11" 또는 "X")에 대한 GLX 확장을 사용하여 X11 프로토콜 스트림 내부에 OpenGL 명령을 캡슐화하여 응용 프로그램에서 X 디스플레이로 전송한다.전통적으로 애플리케이션은 원격으로 위치한 애플리케이션 서버에서 실행되며 X 디스플레이는 사용자의 데스크톱에서 실행된다.이 시나리오에서, 모든 OpenGL 명령은 사용자의 데스크탑 컴퓨터에 의해 실행되므로, 그 기계는 빠른 3D 그래픽 가속기를 가지고 있어야 한다.이것은 이 방법을 사용하여 원격으로 3D 응용 프로그램을 표시할 수 있는 기계의 종류를 제한한다.

간접 렌더링은 네트워크가 충분히 빠른 경우(예: 기가비트 이더넷), 애플리케이션이 렌더링되는 객체의 지오메트리를 동적으로 수정하지 않는 경우, 응용 프로그램이 디스플레이 목록을 사용하는 경우, 그리고 응용 프로그램이 많은 질감 매핑을 사용하지 않는 경우 잘 수행될 수 있다.그러나 많은 OpenGL 애플리케이션은 이러한 기준을 충족하지 못한다.문제를 더욱 복잡하게 하기 위해 일부 OpenGL 확장은 간접 렌더링 환경에서 작동하지 않는다.이러한 확장 중 일부는 3D 그래픽 하드웨어에 직접 액세스할 수 있는 기능을 필요로 하므로 결코 간접적으로 작동하도록 만들 수 없다.다른 경우, 사용자의 X 표시장치는 필요한 OpenGL 확장에 대한 명시적인 지원을 제공하지 않거나, 확장은 사용자의 데스크탑 컴퓨터에 없는 특정 하드웨어 구성에 의존할 수 있다.

응용프로그램 서버에서 OpenGL 렌더링을 수행하면 응용프로그램이 3D 렌더링 하드웨어에 대한 빠르고 직접적인 경로를 갖기 때문에 간접 렌더링에 의해 도입된 문제를 피할 수 있다.애플리케이션 서버에서 3D 렌더링이 발생하는 경우, 결과 2D 영상만 클라이언트로 전송해야 한다.영상은 3D 데이터를 생성하기 위해 사용된 3D 데이터의 크기에 상관없이 동일한 프레임 속도로 전달될 수 있으므로 애플리케이션 서버에서 3D 렌더링을 수행하면 3D 성능 문제가 2D 성능 문제로 효과적으로 전환된다.그 후 문제는 어떻게 1-2 메가픽셀의 이미지 데이터를 네트워크 상에서 대화형 프레임 속도로 스트리밍하는가가 되겠지만, 상품 기술(HDTV, 이름 1개)은 이미 이 문제를 다루고 있다.

VirtualGL의 솔루션

VirtualGL은 애플리케이션 서버에서 OpenGL 렌더링을 수행하기 위해 "GLX forking"을 사용한다.유닉스 및 리눅스 OpenGL 애플리케이션은 일반적으로 GLX 명령과 일반 X11 명령을 모두 동일한 X 디스플레이로 전송한다.GLX 명령은 OpenGL 렌더링 컨텍스트를 특정 X 창에 바인딩하고 X 디스플레이가 지원하는 픽셀 형식 목록을 얻는 데 사용된다.VirtualGL은 유닉스 및 리눅스 기능을 활용하여 라이브러리를 애플리케이션에 "사전 로드"할 수 있는 기능을 활용, 애플리케이션이 링크되는 공유 라이브러리에 일반적으로 걸리게 되는 특정 기능 호출을 효과적으로 차단(AKA "인터포싱")한다.VirtualGL이 Unix 또는 Linux OpenGL 애플리케이션에 사전 로드되면 애플리케이션에서 GLX 함수 호출을 가로채 해당 GLX 명령이 애플리케이션 서버의 X 디스플레이("3D X 서버")로 전송되도록 다시 쓰기 때문에 3D 하드웨어 가속기가 연결된 것으로 추정된다.따라서 VirtualGL은 GLX 명령이 네트워크를 통해 사용자의 X 디스플레이 또는 VNC와 같은 가상 X 디스플레이("X 프록시")로 전송되는 것을 방지한다.VirtualGL은 GLX 호출을 재작성하는 과정에서 OpenGL 렌더링을 화면 밖 픽셀 버퍼("Pbuffers")로 리디렉션하기도 한다. 한편, 애플리케이션의 사용자 인터페이스를 그리는 데 사용되는 일반 X11 명령을 포함하여 애플리케이션으로부터의 나머지 함수 호출은 수정 없이 VirtualGL을 통과할 수 있다.

내부적으로 VirtualGL의 인터포저 엔진도 Pbuffer에 대한 창 맵을 유지하고, 대상 X 디스플레이(2D X 서버)와 3D X 서버 사이의 시각적 속성을 일치시키며, GLX 리디렉션이 원활히 이루어지도록 다양한 해싱 기능을 수행한다.그러나 본질적으로 OpenGL 컨텍스트가 애플리케이션 서버의 X 디스플레이에 설정되면 VirtualGL은 방해가 되지 않고 모든 후속 OpenGL 명령을 애플리케이션 서버의 3D 하드웨어로 전달할 수 있다.그러므로 애플리케이션은 애플리케이션 서버의 하드웨어와 드라이버가 제공하는 OpenGL 기능과 확장 기능을 자동으로 사용할 수 있다.

VirtualGL은 GLX 명령어 저장 및 Pbuffer 관리 외에도 적절한 시간에 렌더링된 픽셀을 다시 읽는다(일반적으로 모니터링을 통해).glXSwapBuffers()또는glFinish()그런 다음 표준 X 이미지 그리기 명령을 사용하여 해당 픽셀을 응용 프로그램의 X 창에 끌어다 놓으십시오.VirtualGL은 2D X Server에서 GLX 명령을 리디렉션하고 있으므로, 원격 X 디스플레이를 사용할 때 간접 OpenGL 렌더링이 발생하지 않도록 할 뿐만 아니라 가속화된 3D 지원을 X 프록시(VNC 등)에 추가하는 데 사용할 수 있다.

X 프록시와 함께 X11 Transport를 사용할 경우 애플리케이션 서버에서 3D 및 2D 렌더링이 모두 발생한다.VirtualGL은 애플리케이션에서 3D 가속기 하드웨어로 3D 명령을 재라우팅하고 렌더링된 이미지를 다시 읽어 X 프록시(VNC 또는 유사한 시스템)로 압축되지 않은 비트맵의 시리즈로 그린다.한편 애플리케이션의 2D 도면 명령어(X11 명령어)는 X 프록시로 직접 전송된다.X 프록시는 이미지를 압축하여 원격 클라이언트로 전송하는 전적으로 책임이 있다.

VNC 또는 다른 X 프록시와 협력하여 VirtualGL을 사용하면 여러 사용자가 단일 애플리케이션 서버에서 3D 애플리케이션을 동시에 실행하고 여러 클라이언트가 각 세션을 공유할 수 있다.단, VNC와 ilk는 솔리드 컬러의 넓은 영역, 컬러가 적고 프레임 간 차이가 적은 2D 어플리케이션을 처리하도록 튜닝되어 있다. 반면에 3D 어플리케이션은 미세하고 복잡한 컬러 패턴과 후속 프레임 간의 상관관계가 훨씬 적은 이미지를 생성한다.OpenGL 애플리케이션에서 렌더링된 이미지를 X 창으로 끌어들이면서 발생하는 작업량은 기본적으로 비디오 플레이어와 동일한 작업량이며, 기성품 씬 클라이언트 소프트웨어에는 일반적으로 대화형 프레임률로 이 작업량을 처리할 수 있을 만큼 빠른 이미지 코덱이 부족하다.

VirtualGL은 두 가지 방법으로 이 문제를 해결한다.

  1. 터보VNC
  2. VGL 트랜스포트

TurboVNC 및 TigerVNC

TurboVNC와 TigerVNC는 부분적으로 SIMD 가속 버전의 libjpeg-turbo를 사용하여 Tighth 및 JPEG 인코딩을 가속화하는 TightweVNC의 오프샷이다.두 프로젝트 모두 클라이언트 애플리케이션뿐만 아니라 VNC 서버도 제공한다.

TurboVNC는 VirtualGL과 같은 팀이 개발했다.100메가비트 이더넷 네트워크에서는 초당 50메가픽셀 이상의 영상 화질을 손실 없이 표시할 수 있다.TurboVNC는 5메가비트 광대역 링크에 10–12메가픽셀/초를 표시할 수 있는 추가 최적화를 포함하며, 눈에 띄게 낮지만 사용 가능한 화질을 가지고 있다.TurboVNC는 또한 TightVNC를 확장하여 클라이언트측 이중 버퍼링과 비활동 기간 동안 화면 이미지의 무손실 사본을 전송할 수 있는 기능 등 3D 애플리케이션을 대상으로 하는 기타 기능을 포함한다.[2]TurboVNC와 VirtualGL은 TeraGrid 사용자가 스탬프[3] 시각화 클러스터의 3D 렌더링 기능에 원격으로 액세스할 수 있도록 하기 위해 오스틴 소재 텍사스 대학교Texas Advanced Computing Center에서 사용한다.

TigerVNC는 TurboVNC와 동일한 성능을 제공하지만 다른 측면에서는 더 나은 성능을 제공하는 TightweVNC의 최신 포크다.[4]


VGL 트랜스포트

VGL Transport를 사용하면 애플리케이션 서버에서 3D 렌더링이 발생하지만 클라이언트 시스템에서 2D 렌더링이 발생한다.VirtualGL은 3D 애플리케이션에서 렌더링된 영상을 압축해 클라이언트에게 동영상 스트림으로 전송해 비디오 스트림을 실시간으로 압축해 표시한다.

VGL Transport를 사용할 때 VirtualGL은 TurboVNC가 사용하는 최적화된 JPEG 코덱을 사용하여 프로세스 중에 렌더링된 3D 영상을 압축한다.그런 다음 VirtualGL은 전용 TCP 소켓을 통해 압축된 이미지를 클라이언트 시스템에서 실행 중인 VirtualGL Client 애플리케이션으로 전송한다.VirtualGL Client는 이미지를 압축 해제하고 적절한 X 창에 픽셀을 그리는 역할을 한다.한편, 애플리케이션 디스플레이의 비 OpenGL 요소는 표준 원격 X11 프로토콜을 사용하여 네트워크를 통해 전송되고 클라이언트 컴퓨터에 렌더링된다.

이 접근방식은 클라이언트 시스템에 X 디스플레이가 있어야 하며, 2D 렌더링 수행을 위한 원격 X11 프로토콜에 의존한다는 것은 많은 애플리케이션이 대기 시간이 긴 네트워크에서 VGL Transport를 사용할 때 성능이 저하된다는 것을 의미한다.또한 VGL Transport는 이미지가 당겨지기보다는 사용자의 기계에 밀리고 있기 때문에 본질적으로 협업(세션당 다중 클라이언트)을 지원하지 않는다.그러나 VGL Transport의 사용은 모든 애플리케이션 창이 단일 데스크톱 창에 해당하는 완벽한 애플리케이션 환경을 제공한다.VGL Transport는 또한 클라이언트에서 2D 렌더링이 발생하기 때문에 서버 CPU 로드를 감소시키고 VGL Transport는 4중 버퍼가 달린 스테레오 같은 고급 OpenGL 기능을 사용할 수 있게 해준다.

VirtualGL의 개발자들은 VGL Transport의 주요 사용자가 802.11g 무선 또는 애플리케이션 서버에 대한 고속 이더넷 연결을 가진 랩톱 사용자일 것으로 예상한다.

가상 제품을 사용하는 상용 제품GL

VirtualGL과 TurboVNC는 2009년 4월 단종된 Sun MicrosystemsSun Visualization System 제품의 핵심 부품이었다.두 개의 오픈 소스 패키지는 VirtualGL이 Sun Ray Thin Client에 압축 이미지를 전송할 수 있는 폐쇄 소스 플러그인과 VirtualGL을 Sun Grid Engine과 통합하여 원격 3D 작업에 대한 리소스 관리 및 스케줄링을 제공하는 또 다른 폐쇄 소스 패키지가 결합되었다."Sun Shared Visualization"이라고 불리는 이 패키지들의 조합은 무료로 다운로드 받을 수 있었다.선이는 지원금을 청구했다.

NoMachine의 v4.x.x는 VirtualGL을 지원하여 사용자가 NoMachine 데스크톱 세션에서 3D 애플리케이션을 실행할 수 있도록 한다.[5]

HP의 확장 가능한 시각화 어레이 소프트웨어의 v2.1에는 VirtualGL 및 TurboVNC와 통합되는 구성 요소가 포함되어 있어 시각화 클러스터에서 3D 작업을 예약하고 원격으로 표시할 수 있다.[6]

ThinLinc의 v3.0.0은 VirtualGL과 함께 작동하도록 설계되었다.[7]

v2010의 EnginFrame Views는 원격 프로토콜 옵션 중 하나로 VirtualGL을 지원한다.[8]

OpenText의 주문형 초과 및 자유 초과 제품은 VirtualGL의 코드를 사용하여 서버 측 렌더링을 구현한다.[9]

참고 항목

참조

각주

  1. ^ "A Brief Introduction to VirtualGL". VirtualGL.org. Retrieved 20 February 2016.
  2. ^ "A Brief Introduction to TurboVNC". TurboVNC.org. Retrieved 20 February 2016.
  3. ^ "Stampede User Guide". Texas Advanced Computing Center (TACC). Retrieved 29 February 2016.
  4. ^ "VirtualGL". ArchLinux.org. Retrieved 25 June 2021.
  5. ^ "Enabling VirtualGL support in NoMachine 4 or later". NoMachine.com. Retrieved 20 February 2016.
  6. ^ "High Performance Computing (HPC)". Hp.com. Archived from the original on 9 August 2014. Retrieved 17 February 2015.
  7. ^ "ThinLinc Administrator's Guide for ThinLinc 4.5.0". ThinLinc.com. Retrieved 20 February 2016.
  8. ^ "Remote Visualization". Nice-software.com. Retrieved 17 February 2015.
  9. ^ "Open Text Exceed User's Guide, Version 14" (PDF). Kb.berkeley.edu. June 12, 2012.

일반참조

외부 링크