OS X Yosemite e VMware: prestazioni scadenti? Come risolvere

La possibilità di dotarsi di una versione virtualizzata di OS X grazie a VMware è una risorsa imprescindibile per moltissime figure professionali che lavorano in ambito IT, tra cui:

  • Sviluppatori software interessati a realizzare applicazioni per iPhone, iPad e Mac con XCode in Objective-C o con il più recente Swift senza essere costretti ad acquistare un Mac.
  • Amministratori di sistema intenzionati a testare configurazioni alternative di uno o più Mac simulando i cambiamenti in un ambiente protetto prima di portare le modifiche in produzione.

Senza contare poi tutti gli appassionati di informatica abituati a lavorare in ambiente Windows e interessati a dare un’occhiata alle ultime versioni del Sistema Operativo di casa Apple risparmiandosi un acquisto da diverse migliaia di euro.

Se non sapete cosa sia VMware o non avete mai sentito parlare di virtualizzazione vi consiglio di colmare le vostre lacune consultando l’apposita voce su Wikipedia e, soprattutto, il sito ufficiale di VMware. In questa sede mi limiterò a dire che si tratta di un software di virtualizzazione che consente di eseguire su una piattaforma con un dato sistema operativo – Windows, Linux o altri supportati – un numero n di macchine virtuali, ciascuna con un sistema operativo diverso. Nel caso trattato dal presente articolo parlerò di una problematica specifica legata all’installazione, su una piattaforma VMware Fusion o VMware Workstation in ambiente Windows o Linux, di una macchina virtuale dotata di sistema operativo OS X Yosemite o superiori.

Il problema

Se vi siete imbattuti in questo articolo è probabile che vi siate trovati di fronte a un problema comune di questa configurazione: la drastica riduzione delle performance di OS X a seguito dell’upgrade da Maverick a Yosemite. Un problema non da poco, se si considera che nella maggior parte dei casi si passa da 40-50 a 2-3 FPS (frame-per-second, prendendo come benchmark un PC di media potenza): una frequenza di aggiornamento talmente bassa da rendere il sistema pressoché inutilizzabile, tanto a livello di navigazione desktop quanto nell’utilizzo di applicazioni complesse come XCode.

A una prima occhiata il problema sembra essere legato a un utilizzo meno efficiente delle risorse assegnate alla macchina virtuale: purtroppo, qualsiasi tentativo di assegnare più RAM o processori alla VM in questione non sembra sortire alcun effetto: il sistema sembra essere del tutto incapace di disegnare le finestre della GUI in modo efficiente, confondendosi continuamente tra elementi in foreground e programmi in background.

Contrariamente alle apparenze il problema non è legato a un mancato utilizzo delle risorse allocate alla VM bensì ad alcuni cambiamenti effettuati da Apple al Beam Sync (o Beam Synchronization), una funzionalità introdotta originariamente in OS X 10.4.x per gestire in modo efficiente gli aggiornamenti della GUI e la gestione delle finestre sul desktop. Sfortunatamente per noi, a quanto pare il rinnovato Beam Sync di Yosemite funziona perfettamente su un PC Apple vero e proprio ma provoca degli scompensi notevoli se eseguito all’interno di una macchina virtuale. Ovviamente, trattandosi di una funzionalità nativa, viene attivata automaticamente all’avvio del sistema.

La soluzione

Una volta identificato il problema, la soluzione è piuttosto semplice: è sufficiente disabilitare il Beam Sync e le prestazioni del sistema aumenteranno drasticamente, tornando agli stessi livelli a cui ci aveva abituati Maverick. Sfortunatamente non esiste una funzionalità nativa per disabilitare il Beam Sync: per farlo dobbiamo ricorrere a software appositi, come il Quartz Debug developer tool di Apple, oppure a script di terze parti.

Se volete avere la conferma che disabilitare il Beam Sync sia la chiave per risolvere il vostro problema, scaricate il Quartz Debug developer tool da questo indirizzo, installatelo, eseguitelo e disabilitate la funzionalità come illustrato dalla schermata seguente:

quartzdebug_beam_sync_off_yosemite

La brutta notizia è che, trattandosi di una funzionalità avviata automaticamente dal sistema operativo, è necessario ripetere questa operazione ad ogni Login.

Fortunatamente per noi, un utente del sito insanelymac.com (JasF per gli amici)  ha sviluppato una applicazione chiamata BeamOff che consente di disabilitare il Beam Sync con un semplice click: è possibile scaricare il codice sorgente su GitHub oppure una versione compilata a questo indirizzo, pubblicata dall’autore nel corso di un thread apposito su insanelymac.com. Il vantaggio di BeamOff non è soltanto quello di essere molto più pratico rispetto al Quartz Debug developer tool ma anche e soprattutto che, trattandosi di una singola istruzione, rende possibile automatizzare il processo.

Per assolvere a tale scopo il blog derflounder ha messo a punto un apposito LaunchAgent che, se installato insieme a BeamOff, consente di disabilitare automaticamente il Beam Sync al termine di ogni avvio del sistema: una soluzione praticamente perfetta per i nostri scopi. Per implementarla non dobbiamo far altro che scaricare l’apposito installer in formato .zip, scompattarlo ed eseguirlo sul nostro sistema: penserà lui ad aggiungere la versione più recente di BeamOff nella cartella /Applications e ad installare il LaunchAgent nella cartella /Library/LaunchAgents.

Per chi fosse interessato a compilare una versione personalizzata dell’installer, l’autore ha messo a disposizione l’intero progetto su GitHub, includendo anche – nella directory /Resources/ – sia la versione compilata di BeamOff che i file di progetto utilizzati per compilare l’installer.

Un grazie all’autore rtrouton e al blog derflounder.wordpress.com per aver risolto il problema!

RELATED POSTS

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane.

View all posts by Ryan