web-dev-qa-db-fra.com

Réglage d'une courbe de ventilateur GPU Nvidia

J'essayais donc de comprendre comment créer une courbe de ventilateur personnalisée pour ma carte Gigabyte GTX 960 ITX. C'est à peu près une demi-longueur (pour mon petit cas) mais cela signifie qu'il a un très petit dissipateur de chaleur, et le pilote Nvidia n'a pas compensé correctement cela.

J'ai fait un tas de recherches sur Google, et la plupart des réponses n'ont pas vraiment fonctionné pour une raison quelconque.

Comment puis-je créer une courbe de ventilateur personnalisée?

3
Ben

J'ai trouvé l'essentiel de ma réponse sur les forums Ubunt mais la commande pour définir la vitesse du ventilateur donnée était fausse. J'ai aussi écrit le script Shell moi-même (et je suis un noob), alors n'hésitez pas à dire comment j'ai tout faux, tant que vous me dites comment résoudre ce problème :) J'ai ajouté des commentaires excessifs afin que les gens qui ne comprennent pas Bash peut avoir une idée de ce que je fais. Cela ne fonctionne que pour 1 GPU et nécessitera des modifications pour plusieurs. En passant, la courbe de ventilation que j'ai définie est speed%=0.028*(degreesC^2).

Installer

  1. Exécutez le navigateur de fichiers de votre choix en tant que root (dans mon cas, Sudo konqueror).
  2. Allez à /etc/X11 et autorisez l'accès en écriture à tous les groupes (mais laissez la fenêtre ouverte).
  3. Ouvrez la fenêtre de configuration du serveur Nvidia X (nvidia-settings dans le terminal).
  4. Accédez à la configuration de nvidia-settings .
  5. Cliquez sur Enregistrer la configuration actuelle , puis cliquez sur Enregistrer dans la fenêtre contextuelle.
  6. Fermez Paramètres Nvidia et exécutez Sudo nvidia-xconfig, puis à nouveau avec --cool-bits=4.
  7. Redémarrer.

Scénario

#!/bin/bash
# Put "sleep 30" here if you run it at start-up
# to make sure this starts after the Nvidia driver does.

fan="0"
gpu="0"
echo "GPU fan controller service started."
nvidia-settings -a "[gpu:$gpu]/GPUFanControlState=1" > /dev/null
check="$(nvidia-settings -a \"[fan:$fan]/GPUTargetFanSpeed=30\" | tr -d '[[:space:]]')"
working="Attribute'GPUTargetFanSpeed'($(hostname):0fan:$fan)assignedvalue30."

if [[ "$check" != "$working" ]]; then
    echo "error on fan speed assignment: $check"
    echo "Should be: $working"
    exit 1
fi
while true
do
    degreesC="$(nvidia-smi -i $gpu | grep -owEe '[0-9]+C')"
    fanSpeed=$(($degreesC ** 2))
    fanSpeed=$(($fanSpeed / 50))
    if [[ $fanSpeed -gt 100 ]]
    then
        fanSpeed=100
    fi
    nvidia-settings -a "[fan:$fan]/GPUTargetFanSpeed=$fanSpeed" > /dev/null
    sleep 8
done

Je ne le mettrai probablement pas à jour à l'avenir, car je passerai à un RX 480.

5
Ben

J'ai fait mon propre script pour cela et c'est le meilleur que j'ai vu jusqu'à présent. J'espère que certains d'entre vous contribueront et amélioreront mon code. Mine fonctionne simplement en l'exécutant et devrait pouvoir prendre en charge les versions antérieures à 349.16. Il a également une courbe de ventilateur réglable.

Voici le lien github: https://github.com/abc123me/Nvidia-Fancontrol

2
Jeremiah

Merci pour le script. J'ai des problèmes avec l'un des contrôleurs de ventilateur, ce qui freine le contrôle du ventilateur matériel (le second ventilateur n'est pas reconnu, commence à tourner comme un fou.). Le contrôle logiciel fonctionne bien sous Windows. J'ai donc décidé de vérifier comment implémenter le contrôle logiciel avec une courbe de ventilateur sous Ubuntu.

Quoi qu'il en soit, la raison pour laquelle je tape ceci est que vous avez codé en dur le nom de votre ordinateur dans un script (Ligne 4: Bens-PC). Il serait préférable d’utiliser une variable et de commenter le script afin que les gens puissent le remarquer plus facilement.

0
Denis