콘텐츠로 이동

40 CU 잠금 해제

BC-250은 40개 RDNA2 Compute Unit 중 24개만 활성화되어 출하됩니다. 나머지 16 CU는 물리적으로 손상된 것이 아니라 펌웨어에서 fuse off되었습니다. 커뮤니티는 영구 하드웨어 변경이나 펌웨어 수정 없이 드라이버 수준에서 다시 활성화하는 방법을 찾았습니다.

크레딧

이 작업은 모두 duggasco 및 기여자들의 것입니다. 커널 패치, 헬퍼 스크립트, 방법론, 제어된 A/B 테스트, 학술 보고서는 모두 **duggasco/bc250-40cu-unlock**에 있습니다. 유용하다면 저장소에 star를 주세요. 이 페이지는 요약과 배포판별 메모, 현장 검증 열 데이터를 추가합니다.

하는 일

Cyan Skillfish에서 CU 가용성을 제어하는 하드웨어 레지스터가 두 개이며, 둘 모두 수정해야 합니다:

레지스터 역할 스톡 잠금 해제
CC_GC_SHADER_ARRAY_CONFIG 드라이버에 CU 수 알림 0xfff80000 (24 CU) 0xffe00000 (40 CU)
SPI_PG_ENABLE_STATIC_WGP_MASK SPI 하드웨어에 wave 디스패치 위치 알림 0x07 (WGP 0-2) 0x1F (WGP 0-4)

한 레지스터만으로는 연산 스케일링이 나오지 않습니다. 둘을 함께 수정해야 합니다. 이중 레지스터 분석은 duggasco의 기술 보고서, 전체 방법론은 백서 PDF를 참고하세요.

패치된 amdgpu 모듈은 드라이버 init 중 두 레지스터를 쓰며, PCI 디바이스 ID 0x13FE(BC-250 전용)와 커널 모듈 파라미터(기본 off)로 게이트합니다.

성능

Vulkan llama-bench pp512에서 duggasco의 제어된 A/B/A 테스트:

구성 주파수 전압 pp512 tok/s 전력 온도
스톡 24 CU 1500 MHz 881 mV 230.4 95 W 79 °C
40 CU 잠금 해제 1500 MHz 874 mV 371.6 125 W 83 °C
비율 동일 동일 1.61x +30 W +4 °C

2 GHz에서는 같은 테스트가 466 tok/s까지 버스트하지만 전력과 온도가 크게 올라갑니다. **1500 MHz / 900 mV가 권장 운영점**입니다. 이론적 1.67x 스케일링을 거의 달성하면서 열 문제를 피합니다. 2 GHz에서 전력 소모는 워크로드에 크게 의존합니다:

  • duggasco의 제어된 llama-bench pp512 순간 스냅샷: ~181 W, 96 °C
  • governor가 2060–2130 MHz로 drift하는 10분 지속 llama-bench: 220–230 W 피크, 패키지가 몇 분 후 열 스로틀
  • 더 무거운 그래픽 워크로드는 더 높일 수 있음: 기존 전력 표에서 스톡 24 CU Cyberpunk 2077 235 W, Furmark OC 320 W이므로 비슷한 부하의 40 CU 보드는 그 아래가 아니라 위에 있을 것으로 예상

181 W 수치를 일반적인 지속 소모로 읽지 마세요. 단일 A/B 테스트 스냅샷입니다. PSU와 쿨링은 상한을 계획하세요(아래 열 현실 점검 참고).

그래픽 워크로드는 이득이 훨씬 적습니다(glmark2 +4.4%). 3D 렌더링은 CU-bound가 아니라 fill-rate bound입니다. 이것은 연산 잠금 해제이지 게이밍 잠금 해제가 아닙니다.

요구 사항 및 주의사항

모든 보드가 깔끔하게 잠금 해제되지는 않습니다

fuse off된 16 CU가 반드시 실리콘상 건강한 것은 아닙니다. 연속 harvest 패턴(CU 0–5 활성, CU 6–9 fuse, 4 shader array 모두 동일) 보드는 전체 40 CU 잠금 해제와 연산 정확성 테스트 통과 경향이 있습니다. 산발적 harvest 패턴 보드는 실제로 결함 CU가 있어 열거는 통과하지만 부하에서 실패할 수 있습니다. 커뮤니티가 harvest map을 수집 중이며 연속 케이스가 흔하지만 universal은 아닙니다.

modprobe 설정을 돌리기 전에: duggasco 저장소의 ./scripts/cu_map.sh로 harvest 패턴을 확인하세요. 산발적이면 선택적 CU 마스킹의 per-WGP 건강 테스트를 계획하고, 전체 40개보다 24–40 사이의 안정 CU로 끝날 수 있습니다.

활성화 전:

  • amdgpu 커널 모듈을 out-of-tree로 재빌드합니다. 커널 업데이트마다 변경이 되돌아갑니다. 업그레이드 후 재빌드하거나 커널을 고정하세요.
  • 스톡 히트싱크에서 2 GHz 지속 40 CU는 스로틀됩니다. governor 1500 MHz 상한, 더 나은 쿨링, 또는 둘 모두를 계획하세요. 아래 열 현실 점검 참고.
  • 잠금 해제가 유지되는 보드에서 연산은 매우 안정적이지만, 그래픽은 광범위하게 테스트되지 않았습니다. 게임에서 corruption이면 24 CU로 되돌리거나 의심 CU를 마스킹하세요.
  • Secure Boot는 off이거나 재빌드 모듈을 자체 서명해야 합니다.

설치

옵션 1: 빌드 스크립트(권장)

가장 깔끔한 경로. duggasco 저장소는 배포판 패밀리별 스크립트를 제공하며, 패치, 빌드, 설치, modprobe 설정, 스톡 모듈 백업을 처리합니다.

배포판 스크립트 테스트 커널
Debian / Ubuntu bc250-enable-40cu.sh Debian Forky 6.19.14
Fedora 43+ bc250-enable-40cu-fedora.sh Fedora 43 / 7.0.9-105.fc43
Arch / CachyOS bc250-enable-40cu-arch.sh Arch / CachyOS
git clone https://github.com/duggasco/bc250-40cu-unlock.git
cd bc250-40cu-unlock
# 배포판에 맞는 스크립트 선택
sudo ./scripts/bc250-enable-40cu-fedora.sh build
sudo ./scripts/bc250-enable-40cu-fedora.sh enable    # modprobe 설정 작성 후 재부팅

요구 사항: gcc, make, zstd, 커널 헤더(Debian/Ubuntu linux-headers-$(uname -r), Fedora kernel-devel, Arch linux-headers).

옵션 2: 수동 패치

수동으로 하거나 커스텀 커널 빌드에 통합할 때:

# 커널 소스 트리에서
cd /path/to/linux-source/drivers/gpu/drm/amd/amdgpu/
patch -p5 < /path/to/bc250-40cu-unlock/patch/bc250-40cu-amdgpu.patch

# amdgpu 모듈만 빌드
make -C /lib/modules/$(uname -r)/build M=$(pwd) -j$(nproc) modules

# 설치(대부분 최신 배포판은 zstd 압축)
sudo cp amdgpu.ko.zst /lib/modules/$(uname -r)/kernel/drivers/gpu/drm/amd/amdgpu/
sudo depmod -a

# 활성화
echo 'options amdgpu bc250_cc_write_mode=3' | sudo tee /etc/modprobe.d/bc250-40cu.conf
sudo reboot

옵션 3: CachyOS / Arch PKGBUILD

patch/bc250-40cu-amdgpu.patch를 커널 PKGBUILD 패치 세트에 적용, 커널 패키지 재빌드, 설치 후 modprobe 설정 추가. CachyOS 또는 Arch 커널 소스에서 빌드할 때 duggasco의 scripts/bc250-enable-40cu-arch.sh가 자동화합니다.

옵션 4: 런타임 UMR(커널 재빌드 없음)

커널 업데이트마다 amdgpu를 재빌드하지 않으려면 **WinnieLV/bc250-cu-live-manager**가 드라이버 부팅 후 umr로 userspace에서 동일한 세 레지스터(CC + SPI + RLC)를 쓰며, TUI로 routing 결정, systemd unit으로 부팅 지속성을 제공합니다.

curl -L -o bc250-cu-live-manager.sh https://raw.githubusercontent.com/WinnieLV/bc250-cu-live-manager/refs/heads/main/bc250-cu-live-manager.sh
chmod +x bc250-cu-live-manager.sh
sudo ./bc250-cu-live-manager.sh

스크립트는 umr이 없으면 자체 설치(pacman / dnf / rpm-ostree 지원) 후 대시보드를 엽니다. Full dispatch(f)로 20 WGP(40 CU) 전체 live routing, Write table(w)로 /etc/bc250-cu-live-manager.conf에 레이아웃 저장, Install service(i)로 부팅 시 저장 테이블을 재적용하는 systemd unit 활성화.

런타임 vs 커널 패치 선택:

  • 런타임 UMR: 커널 업데이트 후 amdgpu 재빌드 원치 않음, live로 다른 WGP 레이아웃 A/B, 산발적 harvest 보드에서 재부팅 없이 안전 실험.
  • 커널 패치: 부팅 0부터 드라이버 topology에 active_cu_number 40 반영, 추가 서비스 없이 표준 모듈 로딩, 배포판 이미지에 패키징.

적용 시 둘 다 동일한 하드웨어 상태에 도달합니다. 런타임 도구는 드라이버 공장 topology를 baseline으로 읽고 live에서 driver-active WGP 비활성화를 거부하여 per-board 실험이 umr -w를 수동 실행하는 것보다 안전합니다.

배포판별 메모

Fedora 43 / 44

duggasco 저장소의 scripts/bc250-enable-40cu-fedora.sh 사용. kernel-devel, gcc, make, zstd, curl 필요:

sudo dnf install kernel-devel gcc make zstd curl
sudo ./scripts/bc250-enable-40cu-fedora.sh build
sudo ./scripts/bc250-enable-40cu-fedora.sh enable

Fedora 43, 커널 7.0.9-105.fc43.x86_64에서 검증. 이 커널에서 kernel-devel은 완전하게 제공(cpufeaturemasks.awk + scripts/ 포함)하므로 소스 트리 패치 없이 표준 make -C $kbuild M=$src 경로가 동작합니다.

역사: 이전 Fedora 커널(pre-7.0)

이전 Fedora kernel-devel 패키지는 arch/x86/tools/cpufeaturemasks.awk와 scripts/ 일부가 누락되었고, 전체 source RPM은 빈 EXTRAVERSION과 오래된 include/generated/utsrelease.h로 vermagic 불일치가 발생했습니다. 오래된 커널에서 이 문제가 있으면 kernel-debuginfo-common-$(uname -r) 설치 후 /usr/src/linux-$(uname -r)에서 top-level Makefile에 EXTRAVERSION = -<your suffix> 설정하고 include/generated/utsrelease.h를 #define UTS_RELEASE "$(uname -r)"로 덮어쓰기 후 빌드. 병합된 Fedora 스크립트는 kernel-devel에 직접 빌드하여 이를 피합니다.

Ubuntu / Debian

표준 경로. apt install linux-headers-$(uname -r) build-essential zstd 후 빌드 스크립트 실행. 알려진 gotcha 없음.

CachyOS / Bazzite

커널 패치는 CachyOS/kernel-patches#159로 업스트림 추진 중. 머지 전까지 linux-cachyos PKGBUILD로 수동 패치 경로로 취급.

확인

재부팅 후 네 shader array 모두 레지스터 쓰기 로그, 커널이 40 active CU 보고, Vulkan이 일치해야 합니다.

동작 설치의 실제 출력(Fedora 43, kernel 7.0.9-105.fc43.x86_64):

$ cat /sys/module/amdgpu/parameters/bc250_cc_write_mode
3

$ sudo dmesg | grep -E 'bc250-40cu|active_cu_number'
amdgpu 0000:01:00.0: bc250-40cu-enable: mode=3 se=0 sh=0 CC=0xfff80000->0xffe00000 SPI=0x00000007->0x0000001f
amdgpu 0000:01:00.0: bc250-40cu-enable: mode=3 se=0 sh=1 CC=0xfff80000->0xffe00000 SPI=0x00000007->0x0000001f
amdgpu 0000:01:00.0: bc250-40cu-enable: mode=3 se=1 sh=0 CC=0xfff80000->0xffe00000 SPI=0x00000007->0x0000001f
amdgpu 0000:01:00.0: bc250-40cu-enable: mode=3 se=1 sh=1 CC=0xfff80000->0xffe00000 SPI=0x00000007->0x0000001f
amdgpu 0000:01:00.0: SE 2, SH per SE 2, CU per SH 10, active_cu_number 40

$ RADV_DEBUG=info vulkaninfo --summary 2>&1 | grep num_cu
    num_cu = 40
    num_cu_per_sh = 10

active_cu_number가 24이거나 num_cu가 24면 패치 모듈이 로드되지 않았습니다. /etc/modprobe.d/bc250-40cu.conf 존재, 커널 업데이트로 패치 amdgpu.ko.zst가 스톡으로 덮어쓰이지 않았는지, Secure Boot off(또는 모듈 서명)를 확인하세요.

dmesg로 확인

권위 있는 확인은 dmesg | grep active_cu_number입니다. wrapper의 status 하위 명령은 더 보수적인 휴리스틱을 사용하여 가끔 동작 설치를 과소 보고할 수 있습니다.

지속 운영용 Governor 설정

governor 기본 2 GHz의 40 CU는 스톡 쿨링에서 96–100 °C를 밀어 올립니다. 지속 llama-bench는 220–230 W 피크, 더 무거운 워크로드(게이밍, Furmark)는 더 많이 그릴 것으로 예상됩니다. 지속 워크로드를 위해 주파수를 1500 MHz로 상한하고 커뮤니티 권장 전압 곡선을 사용하세요. 지속 Vulkan 연산에서 테스트된 cyan-skillfish-governor-smu 설정 예:

# /etc/cyan-skillfish-governor-smu/config.toml

[[safe-points]]
frequency = 350
voltage = 700

[[safe-points]]
frequency = 1500
voltage = 900

[[safe-points]]
frequency = 2000
voltage = 1000

[[safe-points]]
frequency = 2200
voltage = 1000

2150–2200 MHz에서 1000 mV 상한은 스톡 쿨링에서 실질적 안정 한계입니다. 2200 MHz에서 1050 mV를 쓰던 이전 예는 과전압이므로 줄이는 것이 좋습니다. 전체 설정은 GPU Governor 참고.

열 현실 점검

스톡 히트싱크와 Arctic P12 Max 2팬 push-pull의 BC-250에서 2 GHz 40 CU, Llama-3.2-1B Q4_K_M 10분 지속 llama-bench(검증):

지표 평균 피크
GPU edge 온도 89.6 °C 107 °C
패키지 전력(PPT) 136 W 223 W
CPU 온도 96.7 °C 100 °C (TJmax)
VRM MOSFET 온도 57 °C 58.5 °C
팬 속도 ~2950 RPM 2977 RPM (상한)

10분 동안 지속 throughput이 약 10% 하락(3034 → 2835 tok/s)합니다. 패키지가 스로틀하면서입니다. 병목은 VRM 여유가 아니라 히트싱크 방열과 CPU 열입니다.

요약: 40 CU 전체에 지속 OC를 쓰려면 효과적인 쿨링이 필요합니다. 스톡 히트싱크와 입문급 듀얼 팬은 지속 부하에서 스로틀됩니다. governor 1500 MHz 상한이면 위 구성에서 열이 관리 가능하고 보드는 편안하게 동작합니다. 잠금 해제 자체는 견고합니다: 25분 looped Vulkan 연산 정확성 테스트에서 fp_errors 0, int_errors 0, amdgpu hang/reset/oops 없음. 제약은 실리콘이 아니라 열 envelope입니다.

BC-250에서 LLM / AI 워크로드?

akandr/bc250은 이 하드웨어에서 Ollama + Vulkan 추론 실행에 대한 커뮤니티 심층 가이드입니다(35B MoE 37.5 tok/s, FLUX.2 이미지 생성, 33 모델 벤치마크, GTT/TTM 메모리 튜닝, ROCm vs Vulkan 분석). 지속 AI 추론이 목적이면 이 페이지가 의도적으로 생략한 내용(모델 선택, 양자화 영향, KV cache 크기, long-context 동작)을 다룹니다.

선택적 CU 마스킹

잠금 해제된 모든 CU가 모든 보드에서 실리콘상 건강한 것은 아닙니다. 산발적 harvest 패턴 보드는 열거는 통과하지만 연산에서 실패하는 결함 CU가 있을 수 있습니다. duggasco는 각 WGP 구성을 격리로 재부팅하고 정확성 검사를 실행하는 per-WGP 건강 테스트를 제공합니다:

sudo ./scripts/bc250-cu-health-test.sh start
./scripts/bc250-cu-mask.sh --results /var/lib/bc250-cu-health-test/results.tsv --install

마스크는 WGP 단위의 표준 amdgpu.disable_cu 파라미터를 사용합니다(CU 6 비활성화 시 같은 WGP의 CU 7도 비활성화). 전체 세부사항, 예시, cu_map.sh 시각화는 duggasco README 참고.

비활성화 및 되돌리기

# modprobe 설정 제거 후 스톡 24 CU로 재부팅
sudo ./scripts/bc250-enable-40cu.sh disable

# 백업에서 원본 amdgpu 모듈 복원
sudo ./scripts/bc250-enable-40cu.sh restore

백업 모듈은 설치 시 /lib/modules/$(uname -r)/kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko.*.bc250-backup-*에 저장됩니다. 보관하세요. 커널 업데이트가 패치 모듈을 교체하면 즉시 롤백 가능합니다.

더 깊이 알아보기