Sziasztok! A címben szereplő Sapphire Radeon R9 380X Nitro kártyával rendelkezem, és szeretném *buntu 16.04 alatt használni. Egyedüli gondom, hogy a videókártya ventillátorai alapból nem akarnak működni. Alap használatnál nincs gond, de 2 perc játék után már 95 fokosan kapkod levegőért:
[21:36]:~\ > sensors | head -3
amdgpu-pci-0100
Adapter: PCI adapter
temp1: +82.0°C (crit = +0.0°C, hyst = +0.0°C)
Nekem valamiért gyanús az a két 0-ás érték.
Teljes lshw: http://pastebin.com/paprh76t
lshw idevágó része:
ioport:c0000000(size=270532608)
*-display
description: VGA compatible controller
product: Tonga XT / Amethyst XT [Radeon R9 380X / R9 M295X]
vendor: Advanced Micro Devices, Inc. [AMD/ATI]
physical id: 0
bus info: pci@0000:01:00.0
version: f1
width: 64 bits
clock: 33MHz
capabilities: vga_controller bus_master cap_list rom
configuration: driver=amdgpu latency=0
resources: irq:127 memory:c0000000-cfffffff memory:d0000000-d01fffff ioport:e000(size=256) memory:dfe00000-dfe3ffff memory:dfe40000-dfe5ffff
Amiket eddig csináltam
1. Zárt meghajtók nincsenek*, a gép nem ajánl fel. ( *erről legalul)
2. Terminálban futtattam az alábbiakat:
sudo sensors-detect # (ez hozzáadta a coretemp és nct6775 modulokat az /etc/modules file-hoz)
sudo update-usbids # infok frissítése
sudo update-pciids # infok frissítése
lsmod kimenet: http://pastebin.com/bVBMTm4w
3. Grub-ban boot opciókhoz hozzáadtam:
amdgpu.powerplay=1 # dinamikus energiagazdálkodást engedélyezi
amdgpu.dpm=1 # DPM support (akármi legyen is az, sok embernek ez segített)
Ami majdnem megoldani látszott a gondomat: (és jelenleg ezt használom)
Fancontrol service (jelenleg nem fut) és a hozzá tartozó pwmconfig.
A pwmconfig arra való, hogy érzékelje mely szenzorokhoz mely ventillátorok csatlakoznak és szükség esetén generáljon a fancontrol számára egy manuális beállítást.
Sajnos a videokártyám manuális vezérlése nem engedélyezett, így a program fel sem ajánlja hogy bármit csináljak vele:
[21:45]:~\ 61 files > sudo pwmconfig
[sudo] password for hallgat:
# pwmconfig revision 6243 (2014-03-20)
...
Found the following devices:
hwmon0 is amdgpu
hwmon1 is nct6791
hwmon2 is coretemp
Found the following PWM controls:
hwmon0/pwm1 current value: 51
hwmon0/pwm1 stuck to 137
Manual control mode not supported, skipping hwmon0/pwm1.
hwmon1/pwm1 current value: 165
hwmon1/pwm1 is currently setup for automatic speed control.
...
DE! DE! De, ha ezt a pwmconfig parancsot kiadom, akkor hirtelen a videókártya ventillátorai is maguhoz térnek, és néhány perc alatt kellemes 40-50 fok körülire hűtik a kártyát. -> Tehát a gép azt hazudja hogy nem vezérelhetem manuálisan a kártyát, de pont az az alkalmazás kapcsolja be a ventillátorokat az indulásakor, ami elvileg nem engedi a manuális vezérlést. Ez nyilvánvalóan nem egy elegáns megoldás, nem akarok egy konfiguráló alkalmazást rendszergazda módban indítani, majd kilépni minden egyes bootnál. Jelenleg nincs pwmconfig-gal generált fancontrol beállításom, mert a pwmconfig nem hajlandó a videókártyámat figyelembe venni. (ergo minden ventillátorvezérlés "gyári")
Kérdéseim:
-Van-e elegáns driver/modul megoldása a dolognak?
-Van-e valami olyan parancs ami emulálja a pwmconfig mellékhatását? (a ventillátorok bekapcsolását)
-Meggyőzhető-e a pwmconfig hogy ugyan legyen már a videókari manuálisan konfigurálható?
Ui:
*: Tudom hogy létezik egy amdgpu-pro driver, ami ezt a kártyát (is) támogatja. Az az egyszerű telepítés után teljesen kikapcsolta a kijelzőt, és még az amdgpu-pro driver uninstallálásával, blacklistelésével sem volt hajlandó többet videókártyástól indulni. Egy újratelepítés után nem szívesen próbálkoznék vele újra, hiszen a telepítése elég egyszerű és nem hiszem hogy legutóbb én rontottam el valamit.
UPDATE 1:
Közben megtaláltam hogy a videókari beállításai a következő "fájlokban" vannak:
/sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp1_crit_hyst
/sys/class/hwmon/hwmon0/device/hwmon/hwmon0/temp1_crit
/sys/class/hwmon/hwmon0/device/hwmon/hwmon0/pwm1_min
Sajnos ezeknek az értékét még root-ként sem lehet írni.
A pwmconfig pedig csak egy shellscript. Ha rájönnék, hogy mely része kapcsolja be a videókártyámat, akkor lehetne rá írni egy kis scriptet.
( cat /usr/sbin/pwmconfig )
UPDATE 2:
Rájöttem hogy eddig rossz helyen kotorásztam:
find /sys -name pwm1_enable
/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/hwmon/hwmon0/pwm1_enable
/sys/devices/platform/nct6775.656/hwmon/hwmon1/pwm1_enable
find: „/sys/kernel/debug”: Engedély megtagadva
/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/hwmon/hwmon0/ <--amdgpu
Elvileg az itt található a "fájlok" (device power pwm1_enable pwm1_min temp1_crit temp1_input name pwm1 pwm1_max subsystem temp1_crit_hyst uevent) már írhatóak, csak majd jobban körülnézek a neten mielőtt beléjük nyúlkálok.
UPDATE 3:
Magamtól nem is nyúlkálhatok bele a fájlokba :(
Ugyanakkor meg tudtam őket vizsgálni a pwmconfig indítása előtt és után. A következő értékek változtak:
pwm1: 51 -> pwm1: 137 # gondolom ez valami beállításkód
temp1_input: 40000 -> temp1_input:38000 # ez meg cszerintem csak a hőmérsékletadatok kiolvasásának gyakorisága millisecben.
ERGO: Ha találok rá módot hogy a pwm1-et már rendszerindításkor 137-re állítsam, szerintem megoldódik a túlmelegedéses gondom. Még rootként sem lehet szerkeszteni.
UPDATE 4:
Kibeleztem a pwmconfig scriptből a kód nagy részét, csak az elejét hagytam meg ami a videókártyám számára előnyös mellékhatással jár. (ergo bekapcsolja a ventit) LINK A pwmdisable függvény valahol leteszteli a kártyát hogy írható-e, és velem ellentétben neki sikerül a próbaírás, ami valamiért bekapcsolja a ventit :) A másik érdekes dolog, hogy 6 darab ventillátornak látszó tárgy van a gépemben, de mind olyan mintha processzorventi lenne. A videókártyáé nem tűnik fel külön hardverként.
UPDATE 5:
Jelenleg ezt a scriptet "fejlesztettem", ezt futtatom grafikus runlevelben a bootnál.
UPDATE 6:
Sikerült visszafejtenem a script értelmét, a számomra érdemi rész ennyi:
#!/bin/bash
if [ "`id -u`" != "0" ]
then
echo "You need to be root to run this script."
exit 1
fi
cd /sys/class/hwmon
echo 1 2>/dev/null > hwmon0/pwm1_enable # pwm bekapcsolása
echo 255 2>/dev/null > hwmon0/pwm1 # pwm értéke 137 lesz tőle (valamiért az a max)
exit 0
Utolsó UPDATE:
Összedobtam egy service-t, mert egy service kevésbé gáz mint egy sima script :)
https://github.com/hallgat89/pwmenable