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-*에 저장됩니다. 보관하세요. 커널 업데이트가 패치 모듈을 교체하면 즉시 롤백 가능합니다.
더 깊이 알아보기¶
- duggasco/bc250-40cu-unlock: 스크립트, 패치, 기술 보고서, 백서 전체 저장소
- 기술 보고서: 레지스터 맵, 4-state 제어 테스트, 이중 레지스터 아키텍처 분석
- 백서 PDF: n=58 커뮤니티 harvest map 설문 포함 8페이지 학술 보고서
- CachyOS/kernel-patches#159: 업스트림 패치 제출
- GPU Governor: 전압/주파수 곡선 설정
- 센서 및 모니터링: 온도, 전력, 팬 속도 읽기