BC-250 GFX1013 컴퓨트 큐 수정 패치
요약
본 문서는 ASRock BC-250 GPU가 컴퓨트 큐를 활용하도록 수정하는 패치 내용을 다룹니다. 이 패치는 리눅스 커널과 Mesa/RADV 드라이버에 여러 패치를 적용하여, 그래픽 작업(렌더링)과 컴퓨트 작업(조명, 파티클 등)을 분리하고 오버랩함으로써 GPU의 성능을 향상시키는 것을 목표로 합니다.
핵심 포인트
- 컴퓨트 큐 활성화로 벤치마크에서 최대 +25.0% 성능 향상을 확인했습니다.
- 패치는 커널 및 Mesa/RADV 드라이버에 적용되어 비동기 컴퓨트를 가능하게 합니다.
- GFX1013의 경우, 기존 GCN3 시대와 동일한 임시 방편(workaround) 코드가 필요합니다.
- 사용자는 제공된 install.sh 스크립트를 통해 소스 코드 기반으로 패치를 빌드하고 설치할 수 있습니다.
BC-250 GFX1013 컴퓨트 큐 수정
ASRock BC-250의 GPU가 실제로 컴퓨트 큐를 사용하도록 만드는 패치입니다.
결과
Cyberpunk 2077 벤치마크, 1440p 미디엄, 네이티브(업스케일링 없음, 프레임 생성 없음), 40-CU 언락 활성화 기준, 각 3회 실행:
| CPU 구성 | 수정 전 | 수정 후 | 변화율 (delta) |
|---|---|---|---|
| 6 코어 | 46.4 | 58.0 | +25.0% |
| 8 코어 | 47.8 | 57.7 | +20.8% |
Vulkan CTS:
전체 dEQP-VK.synchronization2.* 그룹(81,617 테스트)에서 기본 버전 대비 회귀 현상 제로를 보였으며, 기본 버전으로는 실행조차 불가능했던 7,384개의 컴퓨트 큐 케이스가 모두 통과했습니다. 이는 전체 컨포먼스(conformance) 실행이 아닌 하나의 CTS 그룹입니다.
문제점
BC-250의 GPU는 전용 컴퓨트 큐(ACE)를 가지고 있으며, 이는 *비동기 컴퓨트 (async compute)*의 하드웨어 기반입니다. 게임들은 프레임을 그래픽 작업(렌더링)과 컴퓨트 작업(조명, 파티클, 후처리, 업스케일링)으로 분할하며, 별도의 큐를 사용하면 컴퓨트 부분이 그래픽 부분을 오버랩하여, 그렇지 않으면 유휴 상태였을 셰이더 코어를 사용할 수 있게 합니다.
리눅스는 이 큐들을 하드웨어적으로 비활성화합니다. 컴퓨트 큐는
- 커널 (3개 패치): compute-queue 라이프사이클을 수정하여 ACE가 작동하도록 합니다.
- Mesa/RADV (3개 패치): compute 큐를 활성화하고 디스패치 손상(dispatch corruption)을 수정하며, GFX10.1 감지 또한 올바르게 처리합니다. Mesh/task 셰이더 패치는 비활성화된 상태로 제공됩니다 (아래 참조).
손상 수정은 한 줄의 코드로 이루어집니다. RADV는 GCN3 시대(Iceland 및 Tonga, 2015년)부터 이 정확한 디스패치 클래스에 대한 임시 방편을 유지해 왔습니다: 비동기 compute 디스패치를 스레드 차원 모드(thread-dimension mode)로 전환하는 것입니다. GFX1013 역시 동일한 임시 방편이 필요하며, 이는 목록에 추가된 적이 없습니다:
info->has_async_compute_threadgroup_bug = info->family == CHIP_ICELAND ||
info->family == CHIP_TONGA ||
info->family == CHIP_GFX1013;
나머지 패치들은 compute 큐를 사용 후에도 생존하게 하는 커널과 이를 노출하는 드라이버로 구성되어 있습니다.
Mesa 측은 제거할 수 있는 일련의 패치들입니다. patches/mesa/series:
| patch | 내용 | 선택 사항? |
|---|---|---|
| 0001 | compute 큐 수정 (동일성 + 노출 + 디스패치 임시 방편) | 필수 |
| ... |
빠른 시작
옵션 1: install.sh (Fedora 43)
모든 것은 사용자의 시스템에서 소스 코드로 빌드되며, 바이너리 블롭(binary blobs)은 없습니다.
sudo ./install.sh deps # 의존성 패키지 빌드 (dnf)
./install.sh build # 커널 모듈 + Mesa, 패치로부터 빌드
sudo ./install.sh install
...
첫 번째 패치가 적용된 부팅은 일회성이며, 기본 항목은 활성화할 때까지 유지됩니다:
sudo ./install.sh activate
패치가 적용된 모듈은 자체 initramfs에 존재하며 자체 부팅 항목을 가지고 있고, 패치가 적용된 Mesa는 /opt/bc250-gfx1013/ 아래에 존재하여 패치된 부팅 시에만 선택됩니다. 사용자의 기본 커널 모듈과 initramfs는 절대 건드리지 않습니다.
옵션 2: 패치를 수동으로 적용하기 (모든 배포판)
먼저 커널을 패치해야 합니다. Mesa 부분은 패치가 적용되지 않은 커널 위에서 실행해서는 안 됩니다. 시스템이 멈출 것입니다.
# 실행 중인 커널과 일치하는 커널 소스 트리에서:
for p in /path/to/repo/patches/kernel/v33/*.patch; do patch -p1 < "$p"; done
make -C /lib/modules/$(uname -r)/build M=$PWD/drivers/gpu/drm/amd/amdgpu -j$(nproc) modules
...
다음으로, patches/mesa/series에 따라 깨끗한 mesa-26.2.0-rc3 트리에 적용합니다:
tar xf mesa-26.2.0-rc3.tar.xz && cd mesa-26.2.0-rc3
for p in $(grep -v '^#' /path/to/repo/patches/mesa/series); do
patch -p1 < /path/to/repo/patches/mesa/"$p"
...
애플리케이션에서 다음 경로를 지정합니다:
VK_DRIVER_FILES=/opt/bc250-gfx1013/share/vulkan/icd.d/radeon_icd.x86_64.json
(시스템 전체는 /etc/environment를 통해, 또는 개별 앱별로). Vulkan 로더는 ICD를 중복 제거하지 않으므로, 이 경로 지정 없이는 애플리케이션이 기본 드라이버를 사용할 수 있습니다.
옵션 3: Arch / CachyOS
옵션 2와 동일하며, 두 가지 대체 사항이 있습니다 (테스트되지 않았으며 보고 환영):
- 커널 소스: kernel.org에서 기본 버전에 맞는 tarball을 가져오거나 (
linux-$(uname -r | cut -d- -f1)), 직접 빌드하는 경우(CachyOS 사용자 정의 커널) 패치를 커널 PKGBUILD의 패치 세트에 넣습니다. Arch 계열 커널은 amdgpu를 거의 패치하지 않으므로, 해당 패치는 메인라인 tarball에 적용되어야 합니다. - Initramfs: dracut 대신
mkinitcpio -P을 사용합니다.
그 외 모든 것은 동일합니다: /lib/modules/$(uname -r)/build를 대상으로 빌드하고, updates/에 설치한 후, depmod 및 재생성, 재부팅을 수행한 다음 Mesa 절차를 따릅니다.
Bazzite
아직 아닙니다. 이 모듈은 사용자 정의 이미지에 포함되어야 하며, 기본 커널에만 Mesa 절차를 단독으로 실행하는 것은 문제가 됩니다. 적절한 이미지 기반 경로는 며칠 내로 나올 예정이므로, 그때까지 기다려 주십시오.
검증 (Verification)
./install.sh status
vulkaninfo --summary # driverInfo: Mesa 26.2.0-rc3 (the /opt build)
vulkaninfo | grep -c 'QUEUE_COMPUTE_BIT' # 전용 컴퓨트 패밀리 존재 여부 확인
손상 검사: 렌더링과 함께 지속적인 컴퓨트 워크로드(비동기 컴퓨트를 사용하는 게임 등)를 실행할 때 누락된 지오메트리, 밴딩 또는 검은 프레임이 나타나지 않아야 합니다.
40 CU
BC-250은 40개의 Compute Unit(CU) 중 24개가 활성화된 상태로 출하됩니다. 이 잠금 해제는 duggasco/bc250-40cu-unlock에서 제공하며 (이 패치는 patches/kernel/40cu-bc250-unlock.patch로 포함되어 있습니다), 위에 제시된 벤치마크 수치는 이를 적용하여 측정되었습니다. 칩마다 차이가 있고 발열이 더 심할 수 있으니 참고하십시오:
./install.sh build --40cu
sudo ./install.sh install --40cu
다만, 이 설치 프로그램은 건너뛰십시오. 이는 기본 모듈을 대상으로 하며, 현재 설정으로는 부팅되지 않습니다.
복구 (Reverting)
sudo ./install.sh boot-stock && sudo reboot
sudo ./install.sh uninstall
수동 설치의 경우: /lib/modules/$(uname -r)/updates/amdgpu.ko를 제거하고, depmod -a를 실행한 후 initramfs를 재생성하며, /opt/bc250-gfx1013을 삭제하고, VK_DRIVER_FILES 핀을 해제하십시오.
세부 사항 (Fine print)
Fedora 43의 커널 7.1.5-101.fc43.x86_64에서 빌드 및 테스트되었습니다. 커널 모듈은 ABI(Application Binary Interface)로 고정되어 있으므로, 커널 업데이트 후에는 재빌드 및 재설치해야 합니다.
패치 자체는 Fedora에 국한된 것이 아니며, install.sh 스크립트만 (dnf, BLS 부팅 항목, dracut, grub2-editenv)입니다. 다른 배포판에서는 patches/ 폴더를 직접 적용하고 initramfs 및 부트로더 관련 작업은 직접 처리하십시오. 보고서는 환영합니다.
Mesa 절반만 설치하지 마십시오. 커널 절반과 함께 설치해야 합니다. 그렇지 않으면 멈춥니다(hang).
이 하드웨어에서는 패치를 했든 안 했든 Suspend 기능이 작동하지 않습니다. 이 기능을 비활성화하는 것을 권장합니다.
버그 / 결과 (Bugs / results)
이슈를 열어주십시오. 사용 중인 배포판 + 커널, 24 CU 또는 40 CU 여부, 실행한 내용, 그리고 ./install.sh status 결과를 포함해 주십시오.
감사 (Thanks)
duggasco, vogar345, lonewolf0622, akandr, anrp, ahorek에게 감사합니다.
커널 패치는 GPL-2.0(amdgpu 기반)이며, 나머지 모든 것은 MIT 라이선스입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub ML Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기