Il “Boxing”, questo sconosciuto…

Salve a tutti!

Oggi volevo parlare di una feature che ha fatto la sua comparsa in Vista e che in Windows 7 è già stata disabilitata per default.. diciamo che ha avuto vita breve.
Intensa, ma breve..Cool

Tutti vi ricordate com’era noioso attendere l’avvio del Computer. Tutte le volte che si avviava Windows, si faceva logon e poi lì ad attendere, minuti a volte, che le applicazioni configurate per l’avvio automatico fossero tutte quante avviate, prima di poter avere il controllo del mouse e poter avviare le applicazioni che realmente ci interessavano.. era frustrante a volte.. anche perchè molti hanno l’abitudine di installare tutto il possibile su un PC e queste applicazioni configurate per l’autorun, alla partenza, di solito non si comportano molto bene, pensando di essere ognuna la più importante di tutte.. quindi magari queste finivano con l’aumentarsi anche la priorità di esecuzione, causando una grandissima contention, col risultato pessimo che noi poveri utenti, finivamo con l’attendere minuti che la clessidra lasciasse li posto al puntatore del mouse..

Bene, in Vista per porre rimedio a questa situazione e creare una migliore esperienza all’avvio del PC per l’utente finale, è stata introdotta una feature che va sotto il nome di “boxing”. Praticamente, per un minuto intero, tutte le applicazioni che vengono avviate automaticamente dal sistema, sono avviate con una ThreadPriority ridotta (“Very Low Priority”)e non possono fare nulla per aumentarsela, creando praticamente i presupposti per cui il sistema operativo stesso, in particolare Explorer, possa eseguire velocemente la sua inizializzazione, senza dover contendere a nessuna applicazione il tempo della CPU, potendo dare così molto velocemente il controllo del desktop all’utente. Questo si è dimostrato veramente efficace, ed in effetti, se avete una macchina Vista a portata di mano e ci fate caso, dopo che avete digitato la password per fare logon, passa veramente molto poco tempo prima che abbiate li controllo di Explorer e siate in grado di andare a lanciare Outlook o IE o qualche altro vostro programma di lavoro. Questo ha migliorato moltissimo l’esperienza al logon.

Purtroppo, questa feature non ha tenuto conto di una cosa: l’avvento del .Net Framework.

Col diffondersi del .Net Framework e con gl isviluppatori sempre più orientati a quello, è diventato comune avere molte applicazioni configurate per l’avvio automatico realizzate col .Net Framework. Queste applicazioni, purtroppo, hanno il difetto che alla prima esecuzione vanno ricompilate. L’applicazione risiede sul disco in una forma chiamata IL (Intermediate Language), che è “agnostica” in riferimento alla bitness del sistema operativo, e quindi può girare indipendentemente su sistemi a 32 e 64 bit. Ma proprio per questo, alla prima esecuzione (a meno di espedienti particolari, quali l’NGEN), viene ricompilata nella bitness del sistema operativo in uso. Questa compilazione, se eseguita durante il periodo di boxing, quindi a priorità ridotta, impiega decisamente moltissimo tempo.. troppo tempo.. tant’è che in Windows 7, questa feature è stata disabilitata per default. In Windows 7 sono state migliorate tantissimo altre tecnologie legate a migliorare i tempi di avvio, tipo la cache di Fusion e l’hybernation, cosicchè il boxing è diventato ininfluente ed è quindi stato disabilitato.

Il boxing è controllato dalla seguente chiave di registry: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\Advanced\DelayedApps.

Esattamente dal valore Delay_Sec. Su Vista questo era di default a 60 (Decimal) 0 0x3c (esadecimale).

In Windows 7 appare così:

disable

Come vedete il valore di default è 0 che sta ad indicare che è disabilitato.

Perchè vi ho raccontato tutto ciò? Perchè come dicevo prima, su Vista, è accaduto che una applicazione .Net caricata all’avvio, avesse tempi di caricamento di circa 120 secondi col boxing e 30 senza. Il tutto dovuto al fatto che quando il boxing è abilitato, una applicazione .Net avviata con “very low priority” caricherà tutti file necessari alla compilazione e al jitting della stessa, con quella priorità, anche dopo che il tempo di boxing è terminato, perchè il .Net Framework, essendo un “cittadino onesto” del mondo dei computer, non cerca di migliorare le proprie perfomance a scapito degli altri.. quindi anche passato il minuto di “quarantena”, continua ad eseguire i proprio thread con la priorità impostata all’origine, quindi “very low”, senza aumentarsela dopo che il periodo di purgatorio è terminato. Questo purtroppo, causa delle degradazioni di performance inaccettabili per certi tipi di applicazioni.

In Windows 7, i miglioramenti apportati all’engine della cache, e alle tecnologie di hybernation, hanno fatto in modo che fosse possibile disabilitare il boxing, pur mantenendo una ottima, dal punto di vista dell’utente, esperienza di avvio di Windows.

Una cosa in meno di cui preoccuparsi se siete già passati a Windows 7 Happy

Alla prossima!

Mario Raccagni
Senior Support Engineer
Platform Development Support Team