web analytics

AMD Hybrid Graphics e Linux : Il punto della situazione.

Uno degli aspetti  che differenziano NVIDIA e AMD nel supporto a Linux (da intendersi qui ed in seguito come GNU/Linux ) è la possibilità che la casa di Sunnyvale offre, attraverso i propri driver, di effettuare lo switch tra le due schede video di un sistema ibrido. 

Nell’esperienza d’uso quotidiana offerta da un notebook, risulta fondamentale infatti poter attivare l’una o l’altra scheda privilegiando di volta in volta le performance o la durata della batteria con minor calore e rumore generato.

Avendo un notebook di questo tipo ( HD4000 + 7730M ), mi sono accorto che in rete c’è molta confusione a riguardo e spesso risulta difficile reperire informazioni precise.
In questo breve post cercherò di fornire le informazioni essenziali, senza entrare troppo in dettagli tecnici, mantenendo l’articolo fruibile da chiunque.


1. Introduzione: Sistemi MUXed e MUX-less

È necessario innanzitutto fare un distinguo fondamentale. Ci sono infatti 2 tipi di sistemi ibridi di casa AMD:
  • MUXed
  • MUX-less
AMD indica sotto il nome di “powerxpress” la funzionalità di switch tra le schede video sia che siano sistemi MUXed o meno.
La prima tipologia vede l’utilizzo di uno swiitch hardware per selezionare la scheda video (es. Intel HD o AMD Radeon HD ) connettendola al display.
Nella seconda tipologia, come il nome lascia intendere, non è presente nessun MUX hardware ed il display rimane sempre connesso all’integrata e la scheda video discreta effettua unicamente il rendering.
L’approccio MUX-less [1] è lo stesso adottato da NVIDIA con “optimus” che è ben supportato sotto Linux grazie agli sforzi della community tramite progetti come Bumblebee e derivati.
Questo approccio fornisce all’atto pratico diversi vantaggi:
  • Uno switch più veloce e senza flickering
  • La possibilità impostare profili di carico personalizzati (i.e. : se la GPU A ha una carico superiore al 90% passa alla GPU B)
  • Tempi di transizione istantanei
  • Complessità hardware inferiore.
Il secondo approccio è stato adottato principalmente dai modelli della serie Radeon HD6000M e della serie Radeon HD7000M. L’approccio MUX-less è quello presente nel powerxpress 4.0 o superiori.


2. Il supporto allo switch attraverso i driver open radeonhd

Attraverso l’utilizzo di vgaswitcheroo è possibile effettuare correttamente lo switch della scheda video nella maggior parte dei sistemi MUXed.

Purtroppo, come nel mio caso, se si possiede un sistema MUX-less, evitate anche solo di provare a usare switcheroo. Risulta infatti impossibile attraverso questo tool effettuare lo switch ,in quanto, molto banalmente, non c’è niente da “Switchare” 🙂 .

Inoltre lo Xorg, nel caso di sistemi MUX-less, non supporta il rendering di una scheda che non sia connessa a nessun display ( qui per maggiori dettagli ) , ciò ci impedisce di fatto di usare i driver open con la nostra radeon.

Una soluzione però c’è: attravero l’utilizzo delle librerie VirtualGL  o Simili.
Queste sono delle librerie che consentono ai “remote display” di utilizzare appieno l’accelerazione HW potendo eseguire comandi openGL e restituendo al client le immagini già renderizzate.

Se siete stati attenti, avevo citato in precedenza come lo switch MUX-less di NVIDIA sia ben supportato sotto Linux.
Infatti, applicazioni come Bumblebee e simili utilizzano proprio le VirtualGL per eseguire le istruzioni openGL.

Dal lato AMD, purtroppo, ancora non è stata sviluppata un’applicazione equivalente alla controparte NVIDIA, ma gli sviluppatori di Bumblebee stanno aggiungendo il supporto, per ora sperimentale, alle schede radeon (qui per maggiori dettagli).


3. Il supporto allo switch attraverso i driver proprietari AMD

Attraverso i driver proprietari AMD viene fornito il supporto ufficiale allo switch. Sia per i sistemi MUXed che per quelli MUX-less.
Fin qui tutto bello.
In realtà nella pratica ci sono diversi problemi che non consentono l’utilizzo dei driver proprietari.

  • Se si utilizza una distribuzione rolling-release come Arch o Gentoo, si è spesso costretti ad effettuare il downgrade dello xorg, in quanto non supportato dagli ultimi driver AMD.
    Ad esempio, vi sto giusto scrivendo da una distro ArchLinux aggiornata. Ho installato lo Xorg 1.13 (ultima versione) che non è supportato correttamente dagli ultimi driver AMD 12.11beta.
  • Il meccanismo di switch è distro-dependent. Questo vuol dire che lo script fornito con i driver AMD (per le cause più diverse) non funziona con tutte le distro linux. Lo script di Switch per Ubuntu è diverso da quello di Gentoo e così via…
    Con alcune distro (i.e.: Ubuntu) lo switch funziona a patto di generare i pacchetti distro-specific.
    Ad esempio sotto ArchLinux non c’è nessun supporto ufficiale allo switch. Infatti lo script di switch presente nei driver AMD non funziona correttamente ed i repository ufficiali di Arch non integrano alcun supporto al powerxpress.
    L’unico supporto al powerxpress è fornito, dal mantainer Vi0l0 tramite questo pacchetto che però, almeno personalmente, non ha mai portato a far funzionare correttamente lo switch in sistemi MUX-less.
  • Spesso aggiornando i driver si incappa in problemi tristemente comuni come crash ed artefatti che variano da release a release.

In conclusione, che soluzione adottare?

Purtroppo, il supporto “ufficiale” fornito da AMD ha rallentato il tempo di sviluppo di alternative libere come Bumblebee o equivalenti.

Da un punto di vista personale l’utilizzo dei driver open attraverso le librerie VirtualGL la considero come la miglior soluzione sia da un punto di vista architetturale ( semplicità e maggiore integrazione ) che da un punto di vista del mantenimento ( non serve aggiornare i driver ogni volta che si aggiorna lo Xorg, e si  ha un ciclo di feedback di sviluppo molto più veloce e funzionale).
Non ci resta quindi che incrociare le dita ed aspettare (magari dando una mano nello sviluppo o anche solo nel test) i risultati dello sforzo degli sviluppatori di progetti come Bumblebee che si stanno impegnando in maniera costante per migliorare l’esperienza di utilizzo dei nostri sistemi.