Cette page n'a pas encore d'étiquettes.
Apportez votre aide…

Ceci est une ancienne révision du document !


vga_switcheroo

vga_switcheroo est un outil inclus dans le noyau Linux qui permet de switcher entre les différentes cartes graphiques d'un ordinateur. Cet outil est particulièrement utile si vous posséder un ordinateur portable avec plusieurs GPU, ce qui est de plus en plus répandu.

Pour plus d'informations, je vous renvoi à la news publié sur linuxfr.org lors de la sortie de Linux 2.6.34 :

http://linuxfr.org/news/nouvelle-version-2634-du-noyau-linux#switcheroo

vga_switcheroo n'est pas compatible avec la technologie Nvidia Optimus, si vous l'utiliser, merci de vous référez à la page suivant : nvidia_optimus

De base, il faut savoir que les deux cartes graphiques tournent à fond, et une seule est utilisée, voyez par vous-même la conséquence :

minishooter:/sys/kernel/debug/vgaswitcheroo $ acpi             
Battery 0: Discharging, 88%, 04:55:28 remaining
minishooter:/sys/kernel/debug/vgaswitcheroo $ echo ON > switch ; sleep 30 ; acpi
Battery 0: Discharging, 88%, 02:36:56 remaining

Pour ceux qui ne sont pas à l'aise en ligne de commande, j'ai une autonomie anoncée de 4h55 avec 88% de batterie, j'active la carte graphique (ATI) inutilisée, et 30 secondes plus tard, on m'annonce une autonomie de 2h36.

vga_switcheroo est-il dispo dans mon noyau ?

Tout d'abord, on va vérifier que vga_switcheroo est disponible dans le noyau que vous utilisez actuellement, pour cela, tapez la commande suivante dans votre terminal

$ grep -i switcheroo /boot/config-`uname -r`

Si vga_switcheroo est disponible, ça vous renverra cette ligne :

CONFIG_VGA_SWITCHEROO=y

Si vous avez bien cette ligne, vous pouvez continuer sans problème, dans le cas contraire, vérifier avec la commande uname -r que votre noyau est au moins à la version 2.6.34. Dans Ubuntu 10.04 la version de base du noyau 2.6.32, et vga_switcheroo n'est donc pas disponible, vous pouvez soit mettre à jour votre distribution, soit vous diriger vers la page consacrée au kernel sur le wiki pour trouver une autre solution.

/sys/kernel/debug est-il bien monté ?

Maintenant que nous savons que le noyau inclus vga_switcheroo, il reste à vérifier que /sys/kernel/debug est bien monté (en principe sur Ubuntu, aucun problème), pour ça, tapez la commande suivante :

mount | grep /sys/kernel/debug

Qui doit vous renvoyer :

none on /sys/kernel/debug type debugfs (rw)

Si cette ligne s'affiche tout va bien, vous pouvez passer à la partie suivante ! :) Si ce n'est pas le cas (ça ne renvoie rien), ajouter cette ligne à votre fichier /etc/fstab (vous aurez besoin d'utiliser sudo pour éditer ce fichier) :

none /sys/kernel/debug debugfs defaults 0 0

Ensuite, redémarrez votre ordinateur, ou tapez sudo mount -a dans votre terminal pour que le montage soit effectué.

Un peu de vocabulaire

Pour comprendre ce que nous allons faire, un peu de vocabulaire utilisé de vga_switcheroo :

La carte intégrée correspond à votre chipset graphique (souvent un Intel), peu puissant mais très peu gourmand en énergie.

La carte discrète correspond à votre carte graphique, plus puissante que le chipset (utile pour jouer, décoder des vidéos HD, faire de l'infographie 3D,…), cette carte consomme beaucoup de ressources, et réduit donc l'autonomie de votre ordinateur.

Le fichier switch

Pour switcher entre les cartes graphiques, vga_switcheroo utilise un simple fichier que vous pouvez retrouver ici : /sys/kernel/debug/vgaswitcheroo/switch

Pour l'utiliser plus simplement, on va faire pour que ce fichier nous appartienne dès le démarrage, ça facilitera les modifications.

Ceci n'est pas obligatoire, si vous ne le faites pas, vous devrez utilisez sudo pour modifier le fichier, ça peut être gênant si vous souhaitez développer vos propres scripts par exemple.

Pour faire cela, il suffit de rajouter cette ligne dans le fichier /etc/rc.local (juste avant le exit 0) qui est exécuté au démarrage :

chown nom_utilisateur:nom_utilisateur /sys/kernel/debug/vgaswitcheroo/switch

Vous pouvez en même temps ajoutez "une règle par défaut" qui sera exécuté à chaque lancement, personnellement, je désactive directement ma carte graphique inutilisée avec la commande suivante (toujours dans le fichier /etc/rc.local) :

echo OFF > /sys/kernel/debug/vgaswitcheroo/switch

Les commandes dispo

Éteindre la carte graphique non utilisé :

echo OFF > /sys/kernel/debug/vgaswitcheroo/switch

Allumer la carte graphique non utilisé :

echo ON > /sys/kernel/debug/vgaswitcheroo/switch

Active la carte graphique intégrée : (aucun effet si X est démarré)

echo IGD > /sys/kernel/debug/vgaswitcheroo/switch

Active la carte graphique discrète : (aucun effet si X est démarré)

echo DIS > /sys/kernel/debug/vgaswitcheroo/switch

Malheureusement, le serveur X ne gère pas la changement de carte graphique "à chaud", il faut le redémarrer pour pouvoir changer de carte graphique, les commandes suivantes permettent de le forcer à redémarrer sur une ou l'autre des cartes :

Active la carte graphique intégrée au prochain démarrage de X :

echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch

Active la carte graphique discrète au prochain démarrage de X :

echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch
  • vga_switcheroo.1309938904.txt.gz
  • Dernière modification: Le 15/12/2011, 15:21
  • (modification externe)