FOSS가 레드와 그린을 하나로 만듭니다.

놀랍게도 엔비디아(Nvidia) 엔지니어 한 명이 리눅스 커널에 패치를 적용하면서, AMD 통합 및 전용 GPU 하드웨어에서 관찰되던 성능 저하 문제를 해결했습니다(Phoronix 보도). 알고 보니 문제는 같은 엔지니어가 지난주 PCI BAR 공간을 10TiB 이상으로 확장하려던 커널 변경 세트를 통해 우발적으로 발생시킨 것이었습니다. 이로 인해 GPU가 비정상적으로 제한된 상태로 인식되어 성능 저하를 야기했지만, 다행히도 이 문제가 신속하게 파악되어 수정되었습니다.
오픈 소스 패러다임에서는 발견된 오류는 수정하는 것이 기본적인 원칙으로 여겨집니다. 리눅스 커널은 오픈 소스로 누구나 기여할 수 있으며, 이 기여는 검토 과정을 거칩니다. 책임감 있는 기여자들은 자신의 변경사항으로 인해 발생한 문제점을 수정하는 데 도움을 줄 것이라는 기대가 존재합니다. 따라서 GPU 시장에서 기술적 경쟁 관계를 유지함에도 불구하고, FOSS(Free Open Source Software)는 AMD와 Nvidia 사이의 협력적인 가교 역할을 합니다.
이번 성능 저하의 원인은 PCI BAR 공간을 10TiB 이상으로 늘리려던 특정 커밋에서 기인했습니다. 이 변경은 대용량 메모리 공간을 가진 시스템을 겨냥한 것으로 보입니다. 이 과정에서 보안 목적으로 커널 데이터가 부팅 시마다 메모리에 로드되는 무작위성을 결정하는 KASLR 엔트로피 값이 간접적으로 낮아졌고, 동시에 커널의 접근 가능 메모리 범위(direct_map_physmem_end)가 통상적인 수준을 벗어나 64TiB까지 인위적으로 부풀려졌습니다.
엔비디아는 심각한 팬 제어 버그를 수정하기 위해 GeForce 595.71 드라이버를 새롭게 출시했습니다.

리눅스에서 메모리는 여러 구역(zone)으로 나뉘며, 그중 하나가 GPU와 연결되는 'zone device' 영역입니다. 여기서 문제가 발생했는데, 커널이 Radeon GPU의 zone device 메모리를 초기화하는 과정에서, 커널이 주소 지정 가능한 총 RAM을 나타내는 변수(max_pfn)가 인위적으로 64TiB까지 증가한 것이 원인이었습니다.
실제 GPU는 전체 64TiB 범위를 모두 사용할 수 없었기 때문에, 시스템은 dma_addressing_limited()가 True로 설정되었습니다. 이 변수는 GPU 사용을 DMA32 구역으로 강제 제한하는 역할을 하는데, 이 구역은 4GB의 메모리만 제공하여 성능 저하를 초래했습니다.
다행히도 이 수정 사항은 오늘 리눅스 6.15-rc1 병합 창이 닫히기 직전 풀 리퀘스트(pull request)가 도착하는 즉시 구현될 예정입니다. 일반적인 리눅스 커널 출시 주기를 감안할 때(6~8주), 안정화된 6.15 버전은 5월 말이나 6월 초경에 배포될 것으로 예상됩니다.