คู่มือและระบบจำลองสถาปัตยกรรม GPU-UNLOCK ครบวงจร
เจาะลึกกระบวนการปลดล็อกความเร็ว Tensor Core (FP16 / BF16 / TF32) จาก Half-Rate 50% สู่ Full-Rate 100% สำหรับงาน Local AI โดยจำลองการทำงานระดับฮาร์ดแวร์ 4 ช่วง 9 ขั้นตอน พร้อมวิเคราะห์สถาปัตยกรรม Linux Kernel เทียบกับ Windows UEFI
แผนผังภาพรวมการทำงาน 4 ช่วง (Process Lifecycle)
คลิกที่ช่วงการทำงานเพื่อกระโดดไปยังขั้นตอนจำลองระดับเคอร์เนลและฮาร์ดแวร์ได้ทันที (รองรับปุ่มลูกศรซ้าย/ขวาบนคีย์บอร์ด)
main.c / unlock_610.c
เก็บเฟิร์มแวร์ FWSEC-FRTS และฟิวส์ (0x824140)
รัน FWSEC-FRTS โหมด L3 เพื่อเปิดตู้เซฟ WPR2 บน VRAM
รับ WprMeta ผ่าน Mailbox โดน V67 Overflow แล้วรัน ROP ปลดล็อก PLM
ตำแหน่ง: ท้ายสุด 256 MB ของ VRAM
ผ่าโครงสร้างหน่วยความจำ SEC2: ทำไมส่งลายเซ็น 64,000 ไบต์ แล้วปลดล็อกการ์ดจอได้?
กดเลือกจังหวะการทำงานทั้ง 3 ระยะ เพื่อดูการล้นของข้อมูลในหน่วยความจำ DMEM และการกระโดดรันชุดคำสั่งใน IMEM
0xf93c – 0xf9f4 (สร้างโดย gu_payload_build() แบบ 6-Write Chain):
1. สภาวะปกติ: SEC2 Booter โหลดลายเซ็นมาตรวจสอบ
ทำไมเฟิร์มแวร์ที่เข้ารหัสไว้ ถึงถูกนักวิจัยแกะได้?
- ความพลาดที่ 1 (แนบอิมเมจดีบักติดมา): ในซอร์สโค้ดไดรเวอร์ NVIDIA ยุคแรก นอกจากก้อนเฟิร์มแวร์ใช้งานจริง (
IMAGE_PROD) แล้ว ยังเผลอแนบก้อนเฟิร์มแวร์สำหรับดีบัก (BINDATA_LABEL_IMAGE_DBG_data[]) ติดมาด้วย - ความพลาดที่ 2 (ล็อกด้วยกุญแจสาธารณะ): ไฟล์
IMAGE_DBGถูกเข้ารหัสด้วย Test Key Index 37 ที่ทราบวิธีถอดรหัส นักวิจัยจึงแกะดูโค้ดข้างในได้ทุกบรรทัดเพื่อค้นหา ROP Gadgets - จังหวะทำงานจริง: เวลาชิปยาม
SEC2โหลดไฟล์จริง (IMAGE_PROD) ตัวการ์ดจอจะถอดรหัสโค้ดออกมาวางในIMEMก่อนเริ่มรัน ดังนั้นเมื่อเกิด Stack Overflow โค้ดข้างในจึงถูกถอดรหัสพร้อมให้กระโดดไปรันตามออฟเซ็ตได้ทันที
จำลองความเร็ว Tensor Core: ทำไมสาย Local AI ถึงปลดล็อกเรจิสเตอร์ SS0 & SS1?
กดสลับโหมดเพื่อเปรียบเทียบความเร็วการคูณเมทริกซ์หนาแน่น (Dense GEMM with FP32 Accumulation)
ความลับของตัวเลข 0x88888888 ในเรจิสเตอร์ SS0
เรจิสเตอร์ FEAT_OVR_SM_SPD (0x0082381c) ขนาด 32 บิต แบ่งเป็น 8 ช่อง (ช่องละ 4 บิต) คุมอัตราการยิงคำสั่ง DP, FFMA, FMLA16, FMLA32 และ IMLA0–3:
0x88888888 ลง SS0 และ 0x8 ลง SS1 (IMLA4) จึงปลดล็อกทุกช่องคำนวณพร้อมกันโดยผลลัพธ์ตรงระดับบิต (Bit-Identical) 100%
ผลทดสอบ BF16 (FP32 Accumulation) จากผู้ใช้จริงตามสเปกไฟเดิมโรงงาน
อ้างอิงจากรายงานผลการทดสอบในโปรเจกต์ gpu-unlock (Stock Power Limits)
| รุ่นการ์ดจอ (GeForce RTX) | ก่อนปลดล็อก (BF16 Stock) | หลังปลดล็อก (BF16 Unlocked) | อัตราที่เพิ่มขึ้น |
|---|---|---|---|
| RTX 3060 12 GB | 27 TFLOPS | 51 TFLOPS | +87% |
| RTX 3060 Ti / RTX 3070 | 37 / 40 TFLOPS | 68 / 72 TFLOPS | +81% – +82% |
| RTX 3080 10 GB / RTX 3090 | 65 / 75 TFLOPS | 113 / 125 TFLOPS | +65% – +73% |
| RTX 3090 Ti (450 W) | 88 TFLOPS | 157 TFLOPS | +80% |
| RTX 4070 Ti / RTX 4080 | 81 / 104 TFLOPS | 150 / 193 TFLOPS | +84% – +87% |
| RTX 4090 (Peak MMA Rate) | 165 TFLOPS | 329 TFLOPS | +100% (ติดเพดาน Power Limit เมื่อ GEMM ใหญ่) |
- LLM Prompt Prefill / TTFT บน vLLM, PyTorch (+25–55%)
- LoRA & Full Fine-tuning ใน BF16 / FP16 (+25–50%)
- FlashAttention / SDPA Kernels (+50–60%)
- Image Gen: SDXL, SD 1.5, Krea, DiT (เช่น Flux) ใน ComfyUI (+30–55%)
- Video Gen: Wan 2.2 BF16 Compute (+15–20%)
- LLM Token Decode (คอขวดอยู่ที่ VRAM Bandwidth ไม่ใช่ Tensor Core)
- การรัน Quantized GGUF บน llama.cpp / Ollama (เห็นผลเฉพาะ Long Context)
- โมเดล Quantization ระดับต่ำ (INT8, FP8, INT4)
- การเล่นเกมทั่วไป (ใช้ FP32 Shader / RT Core / Rasterization)
- การเข้ารหัสและตัดต่อวิดีโอทั่วไป (ใช้ NVENC / NVDEC)
- งานคำนวณ CUDA FP32 มาตรฐานที่ไม่ได้เรียก Tensor Core
เปรียบเทียบสถาปัตยกรรม: gpu-unlock (Linux) vs Windows-GPU-UNLOCK
ทั้งสองโปรเจกต์ใช้เทคนิค V67 ROP เจาะ SEC2 เหมือนกัน แต่ Linux รันเป็น Kernel Module ใน initramfs ส่วน Windows ต้องถอยไปรันในชั้น UEFI Pre-Boot
4 สาเหตุเชิงวิศวกรรม: ทำไมบน Linux ถึงง่ายและเสถียรกว่าบน Windows อย่างมหาศาล?
สาเหตุที่ 1 การตรวจสอบลายเซ็นไดรเวอร์ (WDDM & WHQL vs Open Kernel)
บน Linux คุณสามารถบรรจุโมดูล gpu_unlock.ko ลงใน initramfs ให้ทำงานก่อน nvidia.ko ได้โดยตรง ส่วนบน Windows ติดระบบบังคับลายเซ็นไดรเวอร์ WHQL ของ Microsoft และโครงสร้าง WDDM จึงแทรกตัดหน้า nvlddmkm.sys ไม่ได้ ต้องถอยออกไปรันเป็นไฟล์ .efi ก่อนบูตเข้า Windows
สาเหตุที่ 2 วิกฤตสัญญาณภาพหลุดเมื่อรีเซ็ตการ์ดจอ (UEFI GOP Destruction)
ทันทีที่สั่ง PCIe FLR โปรโตคอลแสดงผลภาพของไบออส (GOP — Graphics Output Protocol) จะพังทันที! Linux Framebuffer รับมือการส่งต่อไดรเวอร์ได้ราบรื่นจอไม่ดับ แต่ Windows Boot Manager ต้องการ GOP ตลอดเวลา จึงเสี่ยงเกิดจอดำหรือค้าง ต้องพึ่งโหมด Headless หรือต่อสายจอผ่าน iGPU
สาเหตุที่ 3 การตื่นจากโหมดประหยัดพลังงาน (Sleep / Suspend / D3cold)
เมื่อเครื่องเข้าโหมด Sleep ไฟเลี้ยงการ์ดจอจะถูกตัด ทำให้เรจิสเตอร์ SS0/SS1 ถูกรีเซ็ตกลับเป็น 50% บน Linux โมดูลลงทะเบียน PM_POST_SUSPEND คอยยิงปลดล็อกซ้ำอัตโนมัติทันทีที่ตื่น แต่บน Windows แอป UEFI รันได้แค่ตอนเปิดเครื่อง หากเผลอ Sleep ความเร็วจะหลุดทันทีจนกว่าจะรีบูตใหม่
สาเหตุที่ 4 ความยืดหยุ่นฮาร์ดแวร์ vs การล็อก Machine Profile ตายตัว
บน Linux สแกน PCI Device ID แบบไดนามิก ใช้ได้กับทุกเมนบอร์ดด้วยคำสั่ง make install ส่วน Windows UEFI ต้องผูก Machine Profile ตายตัว (รุ่นเมนบอร์ด + เวอร์ชันไบออส + รุ่นย่อยการ์ดจอ) ต้องแบ่งพาร์ติชัน ESP แยก ปิด Secure Boot และปิด BitLocker
ตารางเปรียบเทียบเชิงสถาปัตยกรรม (Linux vs Windows)
| มิติการเปรียบเทียบ | gpu-unlock (Linux) | Windows-GPU-UNLOCK |
|---|---|---|
| ตำแหน่งที่โค้ดทำงาน | Linux Kernel Module (gpu_unlock.ko) ใน initramfs |
UEFI Application (.efi) ในพาร์ติชัน ESP แยก |
| ช่วงเวลาที่เริ่มทำงาน | Early OS Boot ก่อนโมดูล nvidia.ko โหลด |
Pre-Boot Firmware Stage ก่อนเข้า bootmgfw.efi |
| ความยากในการติดตั้ง | ง่าย: make install + เพิ่มพารามิเตอร์เคอร์เนล |
ซับซ้อนสูง: แบ่ง ESP, ปิด BitLocker, คอมไพล์โปรไฟล์เฉพาะเครื่อง |
| การจัดการสัญญาณภาพ (GOP) | ราบรื่น สลับไดรเวอร์ได้โดยจอไม่ดับ | GOP พังหลัง FLR ต้องใช้โหมด Headless หรือต่อ iGPU |
| การรองรับโหมด Sleep | รองรับอัตโนมัติผ่าน PM_POST_SUSPEND |
ไม่รองรับ ตื่นมาความเร็วลดเหลือ 50% ต้องรีบูตเครื่อง |
| ความเร็ว AI หลังปลดล็อก | Full-Rate 100% (สูงสุด 2× TFLOPS) | Full-Rate 100% (สูงสุด 2× TFLOPS เท่ากัน) |
สถานะการรองรับแต่ละสถาปัตยกรรมการ์ดจอ NVIDIA
เปรียบเทียบโครงสร้างบูตของเฟิร์มแวร์ตั้งแต่ยุค Turing จนถึงการรื้อระบบใหม่เป็น RISC-V FSP ใน Blackwell
สถานะ: Experimental
ปลดล็อก FP16 (FP32 accumulate) บน RTX 2060–2080 Ti และ Titan RTX เร็วขึ้น 2 เท่า (เรจิสเตอร์ FEAT ที่ 0x409650) ใช้ชุด gsp_tu10x.bin, booter_load_tu102.bin และ sec2_bl_tu102.bin
สถานะ: Stable (100+ Reports)
รองรับสมบูรณ์ทั้ง RTX 3050 ถึง 3090 Ti และ RTX 3070/3080 Laptop ปลดล็อกทั้ง FP16, BF16 และ TF32 เต็มสปีดด้วย booter_load_ga102.bin โดยไม่ต้องแฟลช VBIOS
สถานะ: Experimental
ใช้ชุด booter_load_ad102.bin ปลดล็อกอัตราคำสั่ง MMA ของ RTX 4060–4090 / 4090 D และ RTX 4050/4060/4090 Laptop เทียบเท่าการ์ดตระกูล RTX Ada Workstation
สถานะ: ไม่รองรับ
ยกเลิกระบบ booter_load เดิม เปลี่ยนเป็นสถาปัตยกรรม FMC + FSP (RISC-V) ที่มีฮาร์ดแวร์กั้นหน่วยความจำและไม่มีไฟล์ IMAGE_DBG หลุดออกมา
มุมมองด้าน Cybersecurity: การยกระดับสิทธิ์สู่ Level 3 (Threat Model & Mitigations)
วิเคราะห์ความเสี่ยงเชิงรุกหากผู้โจมตีได้สิทธิ์ Ring 0 / Root บนเครื่องโฮสต์ และกลไกป้องกันระดับฮาร์ดแวร์ยุคใหม่
ความเสี่ยงเชิงรุก (เมื่อผู้โจมตียึดสิทธิ์ Ring 0 บนเครื่องได้ก่อน)
- 1. GPU-Assisted Rootkit ในเขต WPR2: หากใช้ ROP ปลดล็อก
GU_WPR_PLM_OFFSET (0x001fa7c4)ผู้โจมตีอาจแก้ไขโค้ดGSP-RMในเขตหวงห้ามWPR2แล้วล็อก PLM กลับ ทำให้ EDR หรือเครื่องมือสแกนฝั่ง Host CPU (Level 0) อ่านหน่วยความจำส่วนนั้นไม่ได้ (ได้ค่า0xbadf0000) - 2. Cloud Multi-Tenant Isolation Risk: ในสภาพแวดล้อม GPU Passthrough ที่แชร์ฮาร์ดแวร์โดยไม่ตัดไฟรีเซ็ตเต็มรูปแบบ การแก้ค่า
WPR_PLMหรือFBPA_PLMจึงเป็นเหตุผลว่าทำไมผู้ให้บริการ Cloud ต้องบังคับแยกกั้นหน่วยความจำ (Hardware Isolation) ด้วย IOMMU และรีเซ็ตการ์ดจอระดับบอร์ด - 3. คำเตือนด้าน Supply Chain: โปรเจกต์ต้นฉบับบน Linux แจกเป็นซอร์สโค้ดเปิด (GPL-2.0) เท่านั้น ไม่มีไฟล์
.exeสำเร็จรูป การดาวน์โหลดตัวติดตั้งไม่ทราบแหล่งที่มาบน Windows มีความเสี่ยงสูงต่อมัลแวร์ระดับ Bootkit
กำแพงป้องกันของฮาร์ดแวร์และระบบปฏิบัติการ (Defense-in-Depth)
- 1. กำแพง IOMMU (Intel VT-d / AMD-Vi / Kernel DMA Protection): บล็อกไม่ให้เอนจิน Falcon บนการ์ดจอใช้ท่อ DMA อ่านหรือเขียน System RAM ของเครื่องโฮสต์ได้ตามใจชอบ (เข้าถึงได้เฉพาะเพจที่เคอร์เนลเปิดให้ผ่าน
dma_alloc_coherentเท่านั้น) - 2. ฮาร์ดแวร์ฟิวส์ป้องกันการถอยเวอร์ชัน (Anti-Rollback Fuse @ 0x00824140): เรจิสเตอร์
GU_FUSE_SEC2_UCODE1ตรวจเลขเวอร์ชันขั้นต่ำของไมโครโค้ดในซิลิคอน หากฟิวส์ถูกเผายกระดับเวอร์ชันแล้ว ชิปจะปฏิเสธ Booter รุ่นเก่าที่มีช่องโหว่ทันที - 3. Secure Boot & Kernel Lockdown: การเปิด UEFI Secure Boot ร่วมกับ Kernel Lockdown ป้องกันไม่ให้ผู้ไม่ได้รับอนุญาตโหลดโมดูลเคอร์เนลที่ไม่ได้เซ็นรับรอง (Unsigned Module) เข้าสู่ Ring 0
พจนานุกรมคำศัพท์เทคนิคสำคัญ
ค้นหาคำศัพท์เรจิสเตอร์และสถาปัตยกรรมภายในตัวการ์ดจอ
0x409664, 0x40966c) เปลี่ยนจาก 0x1 (ครึ่งสปีด) เป็น 0x88888888 และ 0x8 (เต็มสปีด 100%)
0xffffffff เพื่อให้ Host เขียนค่าลง SS0/SS1 ได้
GSP ดูแลการจัดการระบบ และ SEC2 ทำงานที่สิทธิ์สูงสุด Level 3 เพื่อตรวจลายเซ็นเฟิร์มแวร์
IMEM เก็บชุดคำสั่ง และ DMEM เก็บข้อมูลรวมถึง Call Stack ในพื้นที่ 64 KB เดียวกัน
FWSEC-FRTS เพื่อเก็บเฟิร์มแวร์และป้องกันไม่ให้ CPU ฝั่งโฮสต์แอบแก้ไข
GSP, SEC2 และ WPR2 ให้สะอาดก่อนส่งให้ nvidia.ko โดยค่า SS0/SS1 ยังคงอยู่ครบ
สารบัญไฟล์ซอร์สโค้ดหลักในโปรเจกต์
โครงสร้างโมดูลเคอร์เนลและเฟิร์มแวร์ที่ใช้ทำงานจริง
gpu_unlock_init() สั่งปลดล็อกการ์ดจอทุกใบแบบขนาน และลงทะเบียน pm_nb ดักปลดล็อกซ้ำหลังตื่นจาก Sleepgpu_unlock_610_unlock() ควบคุมครบทั้ง 9 ขั้นตอน: _claim, _layout, _dma, _fwsec, run_privileged_writes, run_host_writes, _reset, _unwindga102_words, ad102_v67_words, tu102_words), เรจิสเตอร์ PLM, ค่า SS0/SS1 และตัวสร้างบัฟเฟอร์ 0xfa00 ไบต์GSP และ SEC2, แกะ FWSEC จาก VBIOS ROM, สร้างตารางเพจ Radix3 และแพ็ก GspFwWprMetaตัวอย่างคำสั่งติดตั้งบน Linux (อ้างอิงเอกสารต้นฉบับ)
รองรับตระกูล Debian/Ubuntu, Arch/CachyOS และ Fedora/RHEL