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.
- MUXed
- MUX-less
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.
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).
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.