|
Performance | |
|---|---|---|
|
|
|
|
La cura delle performance è andata calando negli ultimi decenni, mentre attorno agli anni 70 ed 80 c'era un'estrema attenzione all'ottimizzazione dei sistemi, a partire dagli anni 90 la disponibilità di hardware sempre più performante ha mitigato l'esigenza di attenzioni alle prestazioni del software. Si è erroneamente ritenuto che la potenza hardware avrebbe compensato i difetti del software ma, purtroppo, questo non può avvenire.
Progettare e costruire hardware sempre più performanti era piuttosto semplice, quindi lo si è fatto con grandi risultati. La crescita di potenza era dovuta essenzialmente alla tecnica costruttiva dei processori(le CPU), dove un rimpicciolimento dei transistorche le compongono portava ad immediati guadagni sul fronte delle frequenze di funzionamento. Sostanzialmente era sufficiente studiare un nuovo modo per produrre dei transistorpiù piccoli per ottenere un aumento delle frequenze di funzionamento e quindi delle prestazioni.
Quest'idea di base ha trovato i suoi limiti negli anni 2000, dove i transistornon potevano più venire rimpiccioliti in maniera semplice, ma occorreva per forza individuare nuove strade per il progresso dei processori. La via del rimpicciolimento si scontrò contro le leggi della fisica, oramai i transistornon potevano più venire fortemente rimpiccioliti, tutto era diventato estremamente complesso, occorreva perseguire un'altra idea.
Nacquero così i processori dual core, che prevedevano la collaborazione di due unità simili in un solo processore. In realtà non si trattava di una novità, ma semplicemente dell'unica possibilità rimasta da sfruttare. Esistevano già i sistemi multiprocessore, ma richiedevano un software troppo complesso per poter consentire ulteriori sviluppi, quindi in precedenza era più fattibile tentare di aumentare la frequenza operativa dei transistor.
Ma una volta arrivati a limiti fisici insormontabili, si è tornati alle soluzioni multi core, con più processori accoppiati a basso livello, in modo da interagire tra loro nella maniera più ottimale possibile. Questo tipo di CPUnon produce miglioramenti lineari all'aumentare del numero di core, ovvero un dual corenon può essere veloce il doppio di un corrispondente single core. Il guadagno in prestazioni è limitato, e peggiora decisamente all'aumentare del numero di core, un octa corenon arriva nemmeno lontanamente a raggiungere otto volte le performance si un single core.
Con l'evoluzione di queste CPUl'hardware è migliorato, ma è stata clamorosamente riportata in auge l'importanza del software. Un software commerciale, semplice e poco ottimizzato, non era più in grado di sfruttare le nuove CPU, e si è dovuto ritornare a progettare con cura i nuovi software, al fine di non deludere le aspettative degli utilizzatori.
Nel decennio a partire dal 2010 l'attenzione alle strutture del software sta aumentando gradualmente di importanza, niente più software semplici e tirati via, l'unica maniera per ottenere dei buoni risultati è quello di ripensare profondamente il software, e senza una pesante riprogettazione le nuove CPUnon porteranno a nessun passo avanti significativo.
Il CLnet è stato progettato sin dall'inizio per funzionare in maniera adeguata alle caratteristiche delle CPU multi core, del resto non sarebbe stato possibile fare altrimenti. Le logiche interne del CLnet favoriscono la suddivisione dei compiti sui diversi coredisponibili e, sebbene non sia indispensabile, il CLnet è utilizzabile in maniera pienamente efficiente anche su CPU multi corecome le octa coree superiori.
L'architettura scelta è quella che prevede una grande suddivisione e distribuzione delle singole elaborazioni su moduli sufficientemente indipendenti da consentire al sistema operativo di ripartirli su tutti i coredisponibili. Questa esigenza di forte modularità è indispensabile per poter continuare nel tempo ad usufruire di performance adeguate. I moduli software devono poter operare in parallelo, ed è proprio questa la peculiarità, e l'esigenza, delle nuove CPU. Solo un software con un elevato grado di parallelismo può portare a buone prestazioni.
Progettare software parallelo ( multi task) è molto complesso, ed è decisamente molto più difficile che produrre software single task, questo crea grandi difficoltà in fase progettuale, ma essendo l'unica possibilità realmente percorribile, si è ritenuto inevitabile affrontare la problematica sin da subito. Il risultato è un software dotato di grandi facoltà di parallelizzazione, ogni singola operazione del CLnet può venire agevolmente ripartita su diversi core, e le caratteristiche tecniche del CLnet ne consentono la distribuzione automatica, da parte del sistema operativo, con ampie possibilità di parallelizzare le single elaborazioni.
Il CLnet può girare agevolmente sui sistemi moderni, usufruendo di performance sempre all'altezza delle aspettative, anche su processoridi fascia bassa. E' ovvio che l'impiego di hardware più performanti porti ad un diretto vantaggio nei tempi di risposta del CLnet ma, questi hardware di fascia alta, non risultano "indispensabili".
Un'altra caratteristica del CLnet è la fortissima scalabilità, ovvero la capacità di funzionare egregiamente anche su sistemi di grande potenza hardware, in particolare utilizzare hardware di fascia alta consente di ottenere performance direttamente proporzionali all'aumento di potenza dell'hardware stesso. Può sembrare un fatto banale, ma in realtà gran parte dei software in commercio non sono in grado di sfruttare le performance offerte dalle nuove CPU, così non è affatto scontato che un sistema di potenza doppia consenta un raddoppio delle performance rilevate dagli utilizzatori, di solito il risultato è piuttosto deludente. Questa facoltà si definisce per l'appunto scalabilità, sostanzialmente il CLnet si comporta confortevolmente su sistemi di fascia medio-bassa, ed in maniera eccellente su sistemi di fascia alta.
Le caratteristiche prestazionali del CLnet sono basate sull'impiego di componenti software molto attente al parallelismo, e sia il web server, che l' application server, che il database sono ad elevato parallelismo. Il sistema operativo Linuxpuò confortevolmente ottimizzare il codice su tutti i corepresenti, e far girare i vari componenti in maniera sempre ottimale. Le comunicazioni interprocessosono il punto chiave per ottenere buone prestazioni, i software devono poter operare indipendentemente uno dall'altro, ed interagire solo quando necessario attraverso le comunicazione interprocesso, che devono risultare le più semplici e dirette possibile.
La scelta di utilizzare software come la bashe l' awk, che tutti gli sviluppatori con esperienza Unix/Linuxconoscono, deriva proprio dalla straordinaria compattezza di questi software rispetto ai prodotti più moderni, ed alla grandissima affinità con i processi paralleli, in particolare la bashopera in parallelo con una semplicità ed un'eleganza disarmante. L'impiego di software con origini molto lontane nel tempo (anni 70 ed 80) porta ad una incredibile efficienza di utilizzo sui processorimoderni, rappresentando una scelta ottimale per le performance complessive. Si riscontra quindi una sorta di paradosso, alcuni dei componenti software più vecchi girano in maniera decisamente ottimale sugli hardware moderni, molto meglio di quanto non farebbe un componente sviluppato durante gli anni 90 o successivi.
Inoltre si possono facilmente riscontrare numerosi elementi di controintuitivitànell'impiego di tecniche apparentemente datate (ma non obsolete) al fine di ottenere un'elevata efficienza sugli hardware recenti. Negli ultimi anni si sta assistendo ad uno spostamento degli equilibri nei rapporti tra velocità delle CPU, delle RAM, dei dischi, e degli elementi di contorno (reti etc..), così tanto che questi spostamenti favoriscono software diversi da quelli utilizzati a partire dagli anni 90, ci si sta gradualmente allontanando delle logiche più semplici e scontate di quegli anni, per tornare alle tecniche molto più attente e sofisticate dei decenni precedenti.
Ovviamente queste tecniche datate non possono venire utilizzate così com'erano all'epoca, ma risulta sufficiente rivederle in chiave moderna per accorgersi dei risultati eccezionali ottenibili. Il CLnet riconsidera i componenti software e le logiche di quegli anni, dando una nuova connotazione ai singoli componenti, in modo da tornare a risultati finali notevoli. Rimane ovvio che queste tecniche datate sono state adattate alle caratteristiche più moderne, ciò che si è realmente conservato è la logica di fondo e le idee che avevano portato a determinate scelte, mentre si sono sfruttate tutte le più moderne logiche disponibili per arrivare ad un efficiente mix perfettamente sfruttabile da hardware di ultima generazione.
Per citare una caratteristica decisamente particolare, apparentemente fantascientifica ed impressionante, il CLnet opera largamente con codice auto-prodottodurante il proprio stesso funzionamento. Ciò significa che parecchi componenti software del CLnet vengono predisposti al volo durante le varie fasi di funzionamento, in maniera totalmente automatizzata, dal CLnet stesso. Questo porta ad un'ottimizzazione totale del codice che viene fatto girare per ogni singola operazione.
Il codice del CLnet è quindi assolutamente dinamico, cambia a seconda di ciò che si sta facendo, adattandosi con cura maniacale alla specifica circostanza (e solo una macchina può essere così maniacale), andando così ad ottenere un livello di efficienza totalmente fuori portata da parte di software più semplici e "preconfezionati" (sul mercato lo sono praticamente tutti).
Il livello di performance ottenute è tale da condurre alla totale inutilità di qualsiasi tipo di "clessidra rotante". La maggior parte dei software in commercio presenta i cosiddetti splash screen, ovvero delle immagini di intrattenimento per gli utenti, dato che le performance sono scarse agli utenti va dato qualcosa di divertente da guardare durante le pause di attesa. Inoltre nelle pause più brevi si sono introdotti oggetti ruotanti di arte varia che intrattengono l'occhio per evitare un eccessiva stanchezza da noia, con abbondanza diffusa di "attendere prego...". Il CLnet presenta sempre tempi di risposta adeguati, quindi non è stato necessario ricorrere a nessuna animazione di "intrattenimento". Si tratta chiaramente di una grande sfida, che però il CLnet ha raccolto volentieri, un software che non presenta mai degli "attendere prego..." agli utilizzatori sarebbe un risultato più unico che raro.
Un altro fronte dove si è compiuto uno sforzo notevole è quello dell'affinità con le logiche interne dei database. Queste logiche sono tutt'altro che intuitive, e richiedono notevoli ripensamenti delle funzionalità del software visto dalla parte degli utilizzatori finali. In ogni singola occasione si è esaminato come predisporre le richieste al database ( query) in modo da agevolare la produzione delle risposte. Si è notevolmente accondiscesa la logica di funzionamento interna di Postgresal fine di renderne efficiente l'operatività. Modificare le logiche del CLnet in chiave confortevole da parte del database non è stato semplice, molte tecniche usuali andavano totalmente rovesciate, ma i risultati sono sempre valsi la candela.
Uno sforzo di comprensione nei colloqui tra application servere database ha portato a tempi di risposta sempre ottimali, ma la cosa ha richiesto una profonda rivisitazione delle logiche applicative. Sostanzialmente un qualsiasi applicativo scritto negli ultimi decenni non opera nella maniera migliore possibile, ma solo in maniera "usuale", cioè secondo logiche molto diffuse, ma molto più adatte ad un'operatività decisamente manuale, e ben poco automatizzabile.
La scarsa automazione disponibile con i software, anche quelli più moderni ed efficienti, è dovuta allo scarso "coraggio" con cui si va ad incidere sulle logiche profonde di funzionamento. Senza una decisa ingegnerizzazionedel database, ed un conseguente pesante riadattamento dell'applicativo, non si possono ottenere funzionalità di livello elevato. Senza un software diverso dal solito, non si ottengono funzionalità diverse dal solito, ma sempre e solo la solita minestra riscaldata.
E' chiaro che questi ripensamenti portano il CLnet ad evidenziare delle tecniche di funzionamento decisamente "inusuali", ma ciò è puramente conseguente al desiderio di offrire un prodotto che crei un autentico salto di qualità nelle funzionalità disponibili.
A volte l'adattamento degli utilizzatori alle logiche applicative del CLnet può apparire difficoltoso, occorre cambiare un attimo le solite "prassi" operative per ottenere dei reali miglioramenti. Se esiste la volontà di ottenere un vero salto nei risultati aziendali, occorre anche andare ad incidere sulle "consuetudini" per sostituirle con logiche più avanzate ed ottimali.
Il CLnet si propone anche di aiutare le aziende a comprendere che solo un cambio nelle "abitudini" può portare a risultati significativi, senza cambiamenti non si può migliorare nulla.