누보 (소프트웨어)

섬네일|가운데: DRM & KMS 드라이버, libDRM 및 메사 3D로 구성된 FOSS 스택. 오른쪽: 독점 드라이버: 커널 BLOB 및 사용자 공간 구성 요소.

누보(nouveau, )는 엔비디아 그래픽 카드 및 테그라 계열의 시스템 온 칩을 위한 자유-오픈 소스 그래픽 장치 드라이버로, 엔비디아 직원들의 약간의 도움을 받아 독립적인 소프트웨어 엔지니어들이 작성하였다.

이 프로젝트의 목표는 엔비디아의 독점 리눅스 드라이버를 역공학하여 오픈 소스 드라이버를 만드는 것이다. X.Org 재단에서 관리하며, Freedesktop.org에서 호스팅하고, 메사 3D의 일부로 배포된다. 이 프로젝트는 처음에는 2D 전용의 자유-오픈 소스 "nv" 드라이버를 기반으로 했으며, 레드햇 개발자인 매튜 개럿 등이 난독화되었다고 주장했다. 누보는 MIT 허가서에 따라 라이선스되었다.

프로젝트의 이름은 프랑스어로 '새로운'을 의미하는 'nouveau'에서 유래했다. 원래 작성자인 스테판 마르셰신(Stéphane Marchesin)이 자신의 IRC 클라이언트의 프랑스어 자동 교정 시스템이 'nv'라는 글자에 대해 'nouveau'라는 단어를 제안한 후 이를 제안했다.

소프트웨어 아키텍처
섬네일|누보는 Gallium3D 스타일의 그래픽 장치 드라이버로 재작성되었다.

누보는 Gallium3D 스타일의 장치 드라이버이며 다이렉트 렌더링 인프라스트럭처 (DRI) 상에서 작동한다. 두 가지 커널 구성 요소인 DRM & KMS 드라이버와 사용자 공간 구성 요소인 libDRM 및 메사 3D로 구성된다.

누보는 모든 엔비디아 마이크로아키텍처를 지원할 예정이다: 버전 1.0.13에서는 테슬라, 페르미, 케플러, 맥스웰, 파스칼을 지원하고, 버전 1.0.15에서는 볼타를 지원한다. 버전 1.0.16에서는 튜링 지원이 추가되었다.

재클럭킹
기술적인 이유로 엔비디아 GPU는 모두 낮은 주파수("클럭"이라고 함)로 부팅된다. 장치 드라이버는 부팅 후 더 높은 주파수를 설정해야 한다. GPU 문서가 부족하여 누보는 처음부터 이 기능이 없었다. 그 결과 엔비디아 독점 장치 드라이버와 누보의 성능을 비교한 벤치마크에서 입증된 바와 같이 성능이 크게 저하되었다. 2014년 6월, 마침내 돌파구가 마련되었고 누보에 초기 재클럭킹 지원이 추가되었다. 버전 1.0.14에서는 파스칼 지원이 맥스웰 2 수준이다. 버전 1.0.15에는 4GB GTX 970용 패치와 파스칼의 맥스웰 2 수준 가속이 포함되어 있다.

도구
left|200px|섬네일|REnouveau의 작동 모습 (스크린샷. RE누보는 왼쪽 상단 모서리에 있는 파란색 창이다.)

AMD와 달리 엔비디아는 GPU에 대한 문서를 제공하지 않는다. 누보 개발자들은 누보를 작성하는 데 필요한 데이터를 얻기 위해 클린룸 역공학을 사용할 수밖에 없었다. 이 프로젝트는 MmioTrace (메모리 맵 I/O 추적), REnouveau, Valgrind MMT와 같은 여러 맞춤형 프로그램을 역공학에 사용한다.

REnouveau
REnouveau(누보 리엔지니어링)는 GNU GPL ( SDL 사용)에 따라 라이선스된 프로그램으로, 누보의 리엔지니어링 작업 대부분에 필요한 데이터를 수집한다. 독점 엔비디아 드라이버를 사용하는 사용자들은 REnouveau를 통해 엔비디아 카드 하드웨어에 대한 정보를 제공하여 누보 개발에 기여할 수 있다. RE누보는 현재 그래픽 카드 MMIO 레지스터 공간을 복사하고, 일부 그래픽을 그린 다음 MMIO의 다른 복사본을 찍고, 그 차이를 텍스트 파일로 출력하는 방식으로 작동한다. 이 프로그램은 약 60가지의 다른 테스트를 실행하며, 사용자는 그 결과물을 tar.bz2 아카이브로 만들고 이메일로 제출하면, 프로젝트의 FTP 서버로 자동으로 전송되어 개발자들이 분석할 수 있게 된다.
현재 RE누보는 Valgrind-MMT로 대부분 대체되었다.

지원 인터페이스
커널만이 그래픽 카드를 포함한 하드웨어에 직접 접근할 수 있다. 최종 사용자 소프트웨어는 작업별로 특화된 다양한 인터페이스를 통해 접근한다. 누보는 Gallium3D 유형의 장치 드라이버로 작성되고 있는데, 이는 다른 Gallium3D 드라이버와 많은 양의 코드를 공유한다는 의미이다. 이 공유되는 핵심 부분은 대부분 메사 3D에서 메인라인으로 관리되며, 이후 다양한 리눅스 배포판에 의해 배포된다.

렌더링 API
메사 3D 및 포함된 드라이버는 여러 렌더링 인터페이스를 지원하며, 이들 모두는 비디오 게임 또는 CAD 소프트웨어와 같은 사용자 공간 프로그램이 해당 SIP 블록에 접근할 수 있도록 설계되었다.

Direct3D
Direct3D 버전 9의 자유-오픈 소스 구현이 메사 3D에 메인라인으로 통합되었다. 이는 누보와 함께 사용할 수 있지만, Direct3D를 사용하는 모든 소프트웨어는 윈도우용으로 프로그래밍되었기 때문에, 이 소프트웨어는 와인과 함께 리눅스에서만 사용할 수 있다.

 OpenGL 
섬네일|300px|데이터와 명령은 처리하기 위해 GPU로 전송된다. 렌더링된 결과는 주 메모리로 다시 전송되지 않는다. 대신 프레임버퍼에 저장된다. 프레임버퍼의 내용은 이후 디스플레이 컨트롤러로 전송된다.

OpenGL 렌더링 인터페이스는 크로노스 그룹에서 개발하고 있다. 이 API의 구현은 엔비디아의 드라이버와 AMD의 독점 "카탈리스트"에 포함되어 있다. 또 다른 구현은 브라이언 폴이나 인텔과 같은 자유 소프트웨어 애호가들이 작성하고 메사 3D에서 조율하고 있다. 누보는 Gallium3D 유형의 드라이버이므로 이 구현과 함께 작동하기 위해 사소한 조정만 필요하다.

 Vulkan 

, 누보는 실험적인 NVK 드라이버를 통해 일부 Vulkan API를 지원한다.

비디오 가속
메사 3D는 여러 인터페이스를 지원하며, 이들 모두는 GStreamer 또는 HandBrake와 같은 사용자 공간 프로그램이 해당 SIP 블록에 접근할 수 있도록 설계되었다. 렌더링 계산을 위해 설계된 IC를 이 목적으로 사용하는 것도 가능하지만, 이 방법은 퓨어비디오 SIP 블록을 활용하는 것보다 훨씬 더 많은 전력을 소모한다.

누보는 퓨어비디오를 지원하며 VDPAU를 통해, 그리고 부분적으로 XvMC를 통해 접근을 제공한다.

누보는 엔비디아 NVENC를 지원하지 않는다.

컴퓨팅 API

OpenCL
메사 갈륨컴퓨트(GalliumCompute)는 엔비디아를 위한 주요 프로젝트이기도 하지만, AMD 부분만 OpenCL 1.0, 1.1, 1.2의 베타 버전에 가깝다.

CUDA
누보는 CUDA를 지원하지 않는다.

코리앤더(Coriander) 프로젝트를 통해 CUDA 코드를 OpenCL 1.2로 변환할 수 있다.

 GPU 시스템 프로세서 
Nvidia FALCON
2006년경 엔비디아는 FALCON(FAst Logic CONtroller)을 GPU에 도입했다.

 NV-RISCV 
2016년 7월 제4차 RISC-V 워크숍에서 엔비디아 직원들은 FALCON을 RISC-V 명령어 세트 기반의 새로운 독점 커스텀 디자인으로 대체할 계획을 발표했다.

역사
섬네일|왼쪽: 고전적인 스타일의 그래픽 장치 드라이버; 오른쪽: Gallium3D 스타일의 그래픽 장치 드라이버. 두 가지 유형 모두 많은 자유-오픈 소스 코드를 공유한다.

누보는 2005년 스테판 마르셰신(Stéphane Marchesin)이 "nv" 드라이버에 대한 일련의 패치로 시작했으며, 2006년 2월 FOSDEM 행사에서 공식적으로 발표되었다. nouveau의 첫 라이브 데모는 Linux.conf.au 2007에서 진행되었다. 2010년 누보는 리눅스 커널 2.6.33 버전에 실험적 드라이버로 채택되었다. 2012년 3월 26일, nouveau 드라이버는 안정적인 것으로 표시되었고 리눅스 3.4의 스테이징 영역에서 승격되었다. 누보는 리눅스 3.7에서 주요 내부 아키텍처 개편을 겪었다.

누보는 원래 3D 컴퓨터 그래픽스 렌더링을 위해 메사 3D의 다이렉트 렌더링 인프라스트럭처 (DRI)를 사용했는데, 이는 3D 애플리케이션에서 직접 GPU를 사용하여 3D 드로잉을 가속화할 수 있게 한다. 그러나 2008년 2월, DRI 지원 작업이 중단되고 새로운 Gallium3D로 넘어갔다.

2013년 9월 23일, 엔비디아는 nouveau와 함께 엔비디아 GPU의 즉시 사용성(out-of-the-box usability)에 영향을 미치는 영역을 다루기 위해 GPU에 대한 일부 문서를 공개할 것이라고 발표했다.

2014년 1월 31일, 엔비디아의 알렉상드르 쿠르보(Alexandre Courbot)는 nouveau에 GK20A (테그라 K1)에 대한 초기 지원을 추가하는 광범위한 패치 세트를 커밋했다.

2016년 7월 9일, 레드햇 직원 벤 스케그스(Ben Skeggs)는 GeForce GTX 1070 및 GeForce GTX 1080 브랜드 그래픽 카드에서 발견되는 파스칼 기반 GP104 칩에 대한 지원을 리눅스 커널에 추가하는 패치를 커밋했다.

2016년 현재 상태 및 향후 작업은 XDC2016에서 소개되었다. OpenCL의 새로운 노력 현황은 FOSDEM에서 공개되었다.

2019년 엔비디아는 케플러, 맥스웰, 파스칼, 볼타 칩셋에 대한 일부 문서를 공개했다. 2024년, 수석 엔지니어 벤 스케그스(Ben Skeggs)는 오픈 소스 드라이버 작업을 계속하기 위해 엔비디아에 고용되었다.

채택
섬네일|리눅스 그래픽스 스택의 그림: DRM, KMS 드라이버, & libDRM, 메사 3D. 디스플레이 서버는 윈도잉 시스템의 구성 요소이며 비디오 게임을 하는 데 필요하지 않다.

nouveau 드라이버와 메사의 3D 드라이버는 페도라 11, 오픈수세 11.3, 우분투 10.04, 그리고 데비안을 포함한 많은 리눅스 배포판에서 엔비디아 카드용 기본 오픈 소스 드라이버로 사용되었다.

컴피즈는 2010년에 엔비디아 독점 드라이버보다 nouveau를 추천했다.

2014년 6월, 코드씽크(Codethink)는 리눅스 커널 3.15를 사용하여 웨이랜드 기반 웨스턴 컴포지터를 실행했으며, EGL과 "100% 오픈 소스 그래픽 드라이버 스택"을 테그라 K1에서 활용했다고 보고했다.

2016년 10월, NetBSD는 NetBSD 7에 실험적인 nouveau 지원을 추가했다.

 같이 보기 

 자유-오픈 소스 그래픽 장치 드라이버
 엔비디아 그래픽 처리 장치 비교
 Fastra II
 VESA 바이오스 확장

 각주 

 외부 링크 
 Official website

분류:3차원 그래픽 소프트웨어
분류:Freedesktop.org
분류:C로 작성된 자유 소프트웨어
분류:MIT 라이선스 소프트웨어
분류:엔비디아 소프트웨어