NVIDIA Hybrid + การ์ดหลับ (Runtime D3)
ติดตั้งไดรเวอร์ T2000 และทำให้การ์ด “หลับ” เมื่อไม่ใช้ (ประหยัด ~17W)
NVIDIA open kernel module on hybrid graphics with fine-grained RTD3
ใช้ทำอะไร (Purpose)
Hybrid = WAN สองเส้น
Intel (เส้นเล็ก ประหยัด) ──► ใช้เป็นหลัก ขับจอในเครื่อง
NVIDIA (เส้นใหญ่ แรง) ──► ตื่นเมื่อมีงาน (Ollama, prime-run) แล้วหลับ
prime-run = policy-based routing ส่ง traffic ที่เลือกไปเส้นใหญ่ตัวเลขจริงที่พิสูจน์ความสำคัญ: การ์ดตื่นแต่ว่าง = 17W → แบต 94Wh หมดใน ~5–6 ชม. จากการ์ดอย่างเดียว
ขั้นตอน (Setup)
1. ดูฮาร์ดแวร์ก่อนลง
lspci -k | grep -EA3 'VGA|3D'| ผล | อ่านว่า |
|---|---|
NVIDIA = VGA compatible controller (ไม่ใช่ 3D controller) | การ์ดมีช่องต่อจอของตัวเอง → HDMI ต่อตรงเข้า NVIDIA (ไดรเวอร์ไม่ทำงาน = จอนอกไม่มีภาพ) |
Kernel driver in use: nouveau | udev โหลด nouveau จาก SSD หลังบูต (แม้ลบ kms ใน initramfs แล้ว) |
2. ติดตั้ง (ต้องมี headers ก่อน)
sudo pacman -S nvidia-open-dkms nvidia-utils nvidia-prime
dkms status # installed ทั้ง 2 kernel
sudo reboot
lspci -k | grep -EA3 'VGA|3D' # Kernel driver in use: nvidia| แพ็กเกจ | หน้าที่ |
|---|---|
| nvidia-open-dkms | ไดรเวอร์ใน kernel, คอมไพล์ให้ทุก kernel อัตโนมัติ |
| nvidia-utils | OpenGL/Vulkan/CUDA lib, nvidia-smi, blacklist nouveau |
| nvidia-prime | คำสั่ง prime-run |
3. ตรวจว่าการ์ดหลับไหม (ห้ามรัน nvidia-smi ก่อน = ปลุกการ์ด)
cat /sys/bus/pci/devices/0000:01:00.0/power/{control,runtime_status}ผลแรก: on / active → Turing ไม่ได้เปิดให้เอง (ไดรเวอร์เปิดอัตโนมัติเฉพาะ Ampere ขึ้นไป)
4. แก้ 2 จุด (เปิดทั้งสองฝั่ง เหมือน EEE ต้องเปิดทั้ง NIC และ switch)
อ่านค่าจริงจากเครื่องก่อน:
lspci -s 01:00
cat /sys/bus/pci/devices/0000:01:00.{0,1}/class| function | class | ความหมาย |
|---|---|---|
| 01:00.0 | 0x030000 | Display / VGA |
| 01:00.1 | 0x040300 | HD Audio (HDMI) |
จุดที่ 1 — ไดรเวอร์:
echo 'options nvidia "NVreg_DynamicPowerManagement=0x02"' | sudo tee /etc/modprobe.d/nvidia-pm.confจุดที่ 2 — kernel (udev):
sudo tee /etc/udev/rules.d/80-nvidia-pm.rules <<'EOF'
# P15 Gen 1: NVIDIA เป็น VGA (0x030000) ไม่ใช่ 3D (0x030200) ตามคู่มือทั่วไป
ACTION=="bind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030000", TEST=="power/control", ATTR{power/control}="auto"
ACTION=="bind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", TEST=="power/control", ATTR{power/control}="auto"
ACTION=="unbind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x030000", TEST=="power/control", ATTR{power/control}="on"
ACTION=="unbind", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", TEST=="power/control", ATTR{power/control}="on"
EOF
sudo reboot==เปรียบเทียบ (เงื่อนไข) /=กำหนดค่า (การกระทำ) — อ่านเหมือน ACL<<'EOF'มีเครื่องหมายคำพูด = shell ไม่แทนค่า (ต่างจากตอนเขียน boot entry)- ไม่ต้อง mkinitcpio เพราะ nvidia ไม่ได้อยู่ใน initramfs (ถ้าย้ายเข้าไปวันหน้า ต้องสร้างใหม่ทุกครั้งที่แก้ modprobe.d)
ทดสอบว่าใช้ได้ (Verification)
cat /sys/bus/pci/devices/0000:01:00.0/power/{control,runtime_status}; grep -i 'runtime d3' /proc/driver/nvidia/gpus/0000:01:00.0/powerต้องได้ auto / suspended / Runtime D3 status: Enabled (fine-grained)
ทดสอบครบวงจร: nvidia-smi (ปลุก) → รอ 15–20 วินาที → runtime_status กลับเป็น suspended
ทดสอบตอนมี Xorg (i3): ยัง suspended ✓ ไม่ต้องตั้งค่า Xorg เพิ่ม
แล้วถ่าย snapshot ด้วยมือ (แก้ไฟล์เองนอก pacman)
ปัญหาที่เคยเจอ & สิ่งที่ทายผิด (Troubleshooting)
| เหตุการณ์ | บทเรียน |
|---|---|
| ทายว่า NVIDIA เป็น 3D controller | เป็น VGA → ลอก udev rule จากเน็ตที่ใช้ 0x030200 จะไม่ match เงียบๆ อ่านค่าจากเครื่องจริงเสมอ |
sudo echo ... > /etc/... | ไม่ได้: redirect ทำโดย shell ของ user → ใช้ | sudo tee |
| หัวตาราง nvidia-smi ต่างจากที่ทาย | รุ่นใหม่ใช้ KMD Version / CUDA UMD Version |
| สถานะแรก on/active | Turing ต้องเปิดเอง (Ampere+ เปิดอัตโนมัติ) |
Ollama ในรายการเครื่องหลักคือ ollama | รันบน CPU อย่างเดียว ต้องใช้ ollama-cuda |
คำถามชวนคิด
- ถ้าเสียบจอนอกผ่าน HDMI ค้างไว้ การ์ดจะยังหลับได้ไหม เพราะอะไร (เบาะแส: ใครขับช่องนั้น)
- ถ้าในอนาคตเปลี่ยนเครื่องเป็นรุ่นที่ NVIDIA เป็น “3D controller” ไฟล์ udev ต้องแก้ตรงไหนบ้าง และคุณจะตรวจอย่างไรก่อนแก้
- ทำไมการวัด
runtime_statusต้องทำ ก่อน รัน nvidia-smi — หลักนี้ใช้กับการเก็บหลักฐานดิจิทัลอย่างไร