Sullo scegliere, valutare e creare benchmark…

Lavorando in ambito software, sovente si ripropone il tema di valutare le prestazioni di una piattaforma e, conseguentemente, scegliere gli strumenti adatti per un tale tipo di misurazione.

Nel 99% dei casi ciò viene però ricondotto al più semplice:

“Facciamo girare qualche benchmark sintetico e vediamo come vanno le cose.”

In tutta onestà, questo modo di procedere non mi soddisfa del tutto.

Benchmark e benchmark sintetici

Quando sento qualcuno sostenere l’affidabilità e la correttezza implicita dei risultati dei cosiddetti benchmark sintetici non posso che alzare un sopracciglio in senso di perplessità.

Si tratta di un insieme di prove artefatte che tentano di “spremere” una piattaforma, valutandone i singoli componenti ed assegnando loro un giudizio numerico e poi uno complessivo (“overall”), una sorta di voto finale, che permette di confrontarla con altre piattaforme già note.

Sulla carta si tratta di un sistema tanto rapido quanto intelligente di procedere ma, alla prova dei fatti, non sempre si dimostra davvero affidabile nonostante il benchmark impiegato sia lo stesso su più piattaforme. Questo per una serie di motivi.

Attenzione ai numeri

Prima di tutto non tutti i benchamrk sintetici riflettono un workload reale o realistico: l’utente medio di norma, nel suo uso comune e quotidiano, non è in grado di spremere così a fondo certi componenti del suo computer nè probabilmente lo farà mai, se non per poter provare un qualche “giochino” recente: non a caso recensioni e benchmark hanno un grande impatto sui giovani/giovanissimi, sempre bramosi di mettere le mani su qualche gadget tecnologico nuovo e potente che consenta loro di pavoneggiarsi con gli amici.

Questo tipo di benchmark, al massimo, rappresenta quindi una sorta di upper bound d’uso e per giunta relativamente poco realistico.

In secondo luogo i benchmark sintetici tendono a essere ottimizzati in qualche modo, per non dire favorire velatamente certe configurazioni di certi produttori: non è necessariamente malafede, ma i benchmark cercano di stare al passo col mercato ed il mercato lo fanno i grossi produttori. Il colmo di tutto ciò sono i benchmark che hanno dei requisiti minimi per essere eseguiti, con tutte le conseguenze del caso.

In terzo luogo i benchmark sono relativamente facili da truffare: provate a inserire le due paroline magiche “benchmark cheating” in Google per farvi un’idea di che cosa sto parlando.

Ad esempio basta poco per un produttore inserire un piccolo controllo in un driver di una scheda grafica (GPU) che, in presenza di un certo benchmark in esecuzione, attiva o disattiva alcune funzionalità al fine di ottenere dei risultati complessivi migliori: ogni tanto qualche produttore viene scovato a “cheatare” e bacchettato a dovere dalla stampa specializzata. Tuttavia questo tipo di “lezione” non basta, visto che questo malcostume pare non essere del tutto scomparso.

Potrei andare avanti lungo questa strada, ma un benchmark in sè è e deve essere tratta come solamente come uno strumento, non come un giudizio definitivo della Cassazione.

Occhio al materiale pubblicitario

Un problema che osservo spesso, collegato ai benchmark, è l’eccesso di fiducia – chiamiamola così – di certe persone verso quello che leggono sui depliant e su altro materiale pubblicitario. Talvolta il problema è del singolo individuo: non si può pretendere che un non-tecnico sia in grado di valutare qualcosa di tecnico. Non lo dico in chiave offensiva, sia chiaro, ma è un dato di fatto: a ognuno il suo mestiere.

Fin lì nulla di male. Il problema è quando qualcuno che non ha le debite competenze e conoscenze si permette di “emettere sentenze” vincolanti. Ad esempio basta che qualcuno prometta prestazioni da urlo mostrando i risultati di qualche benchmark che per queste persone basta così: s’ha da comprare subito.

Il massimo lo si ottiene con quelli che comprano qualcosa, magari pagandolo uno sproposito, e poi si giustificano citando papali papali le cifre prese dalle brochure e dai datasheet con cui sono stati “attirati”: +30%! +50%! +70%! Verrebbe da chiedere:

“+X percento? Rispetto a chi, cosa, quando e soprattutto come?

Questo perchè la gente tende a vedere in un singolo numero il metro ultimo di paragone.

Benchmark interni e personalizzati

Nel caso sia possibile provare qualcosa prima dell’effettivo acquisto – qualcosa che non sempre è possibile -, l’unico benchmark veramente attendibile e scevro di qualsiasi illusione-illazione del marketing è il confronto alla pari con quello che è attualmente in uso.

Ad esempio, in ambito lavorativo, si può prendere qualcosa di esistente, testato, collaudato e di cui si conoscono già le prestazioni su una o più piattaforme e farlo girare sulle piattaforme in test.

Sì, sto ribadendo l’ovvio, ma evidentemente l’ovvio non è così diffuso come sembra vista l’ampia propensione a credere ai numeri “aleatori” del materiale pubblicitario. Dopotutto è la stessa cosa che capita quando si guarda troppa pubblicità in televisione…

Creare benchmark per uso interno

Per rendere le cose più significative e concrete si può procedere uno schema come il seguente, una sorta di “proposta minima“:

  • per valutare le nuove piattaforme è necessaria una suite di benchmark interni;
  • ogni benchmark è rappresentato da uno o più programmi presi da qualche progetto particolarmente significativo per l’azienda, meglio se rilasciato all’esterno (cioè testato, collaudato e venduto a terzi) e che sia in qualche modo predisposto per usare qualcosa di particolare (es: scheda grafica);
  • ogni programma deve essere reso indipendente dal resto ossia deve poter funzionare in modalità standalone (tipo una “portable app) in modo che sia possibile eseguirlo direttamente da un CD/DVD senza necessità di installazioni particolari;
  • ogni programma deve prevedere un modo per essere eseguito in modo automatico, con parametri preimpostati ed eventuali file di input che riflettano un workload realistico ed attendibile;
  • per ciascuno dei programmi-benchmark deve essere scelta e predisposta una serie ripetuta di misurazioni (5 o 10 come minimo) dalle quali poi estrarre un valore medio riassuntivo: un valore numerico banale da ottenere è il tempo richiesto per concludere una qualche operazione complessa, magari accompagnato da qualche indice numerico dell’uso delle risorse come CPU, memoria e altro;
  • nel caso sia possibile, predisporre ulteriori programmi o script per generare un grafico riassuntivo delle prestazioni del sistema in test, magari comparandolo con altri valori già noti (ad esempio basta aggiungere una nuova colonna in Excel con i vari risultati di ogni piattaforma e poi generare qualche grafico)

Il risultato di tutto ciò saranno numeri concreti, che potrete citare senza timore di smentita.

Inoltre, fatto abbastanza divertente e curioso, usando i vostri stessi programmi come benchmark, di fatto otterrete due effetti interessanti:

  1. testare il vostro codice una volta di più (con eventuale bugfixing accessorio);
  2. verificherete anticipatamente la portabilità (e l’adeguatezza) dei vostri programmi sulle nuove piattaforme prima ancora che si renda eventualmente necessaria.

Insomma il benchmark anche come strumento di bugfixing.

Che ne pensate?

Contrassegnato da tag , , , , ,

4 thoughts on “Sullo scegliere, valutare e creare benchmark…

  1. Stefano scrive:

    In passato su alcune applicazioni facevo girare i benchmark sfruttando il motore dei test automatizzati. In questo modo venivano lanciati automaticamente e i report facevano il ‘giro’ classico a cui gli sviluppatori erano ormai abituati.

    Ovviamente non si trattava di test veri e propri: i benchmark fallivano solo in caso di risultati molto ‘strani’, come prestazioni estremamente anomale.

  2. jp scrive:

    Non ho capito: in pratica facevi funzionare i test a mo’ di benchmark?

    In ogni caso mi pare una varaziazione interessante sul tema. :)

    Ciau & grazie di essere passato! ^^

  3. Stefano scrive:

    Circa, sfruttavo il motore di esecuzione dei test e di distribuzione dei report per fare girare dei benchmark e avere risultati in automatico.
    Si potevano così confrontare i risultati su diversi hardware, ma anche i risultati di diverse versioni del software per vedere se da una versione all’altra le performance miglioravano o peggioravano.

  4. jp scrive:

    Ecco, avevo inteso bene allora e confermo: ottima variazione sul tema.
    Ottimo anche poter verificare eventuali regressioni nelle prestazioni. :)

    Ciau! ^^

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Log Out / Modifica )

Foto Twitter

You are commenting using your Twitter account. Log Out / Modifica )

Foto di Facebook

You are commenting using your Facebook account. Log Out / Modifica )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 259 other followers