Linux Benchmarks
by admin on Mar.01, 2009, under Linux
Avendo a disposizione una macchina dotata di CPU AMD64 sulla quale sono installate diverse distribuzioni Linux, ho voluto effettuare una prova comparativa delle performances tra codice a 32 e 64 bit, utilizzando una serie di test ad alto grado di number crunching. I tools utilizzati per effettuare la prova sono stati
- Un semplice crivello di Eratostene per la ricerca dei numeri primi, in range ad ampiezza differente
- Una codifica in mp3 con differenti livelli di applicazione di parametri di qualità attraverso Lame.
- Il set di test che costituiscono il benchmark Scimark Scimark consiste in una serie di benchmarks computazionali in virgola mobile, dal National Institute of Standards and Technology. I valori restituiti sono espressi in MFLOPs (milioni di operazioni in virgola mobile al secondo).
La CPU della macchina utilizzata per i benchmarks è costituita da un processore AMD Athlon 64 3200+ a 2GHz (2003.512 MHz) ed ha una cache di secondo livello di 512 KB, mentre la RAM è di 256 Mb. Inizialmente era dotata di una RAM di dimensioni doppie (512 MB), ma ho dovuto eliminare il secondo banco perchè difettoso, rinunciando così alla modalità dual-channel. Sospetto che in qualche modo ciò possa essere andato a discapito del codice a 64bit, ma non mi sento di azzardare alcuna precisa spiegazione, riservando la verifica di ciò ad una eventuale successiva serie di test con due banchi di memoria).
Lo scopo del test, ripeto, era quello di effettuare una comparazione fra i risultati ottenuti usando due diverse distribuzioni Linux, diversamente ottimizzate, sulla stessa piattaforma.
Le due distribuzioni utilizzate sono state:
- Slackware 9.1, con kernel 2.6.11.11 ricompilato per i686
- Gentoo stage 1, con kernel 2.6.11-gentoo-r7, nativamente “patchato” per AMD64 (Rappresenta attualmente l’unica alternativa, insieme a Ubuntu, alle distribuzioni commerciali come Suse o RedHat per avere un Linux “a 64 bit”)
Per la compilazione dei tools di benchmarks sono state utililizzate purtroppo due versioni differenti del compilatore GCC:
- GCC 3.3.5 per la Slackware
- GCC 3.4.3 per la Gentoo
Occorre però precisare che ad oggi è disponibile per la Slackware “current” solamente un compilatore al limite con versione 3.3.6.
Test I - Crivello di Eratostene
Il test è consistito nel far estrarre ad entrambe le configurazioni, i numeri primi in 3 range diversi:
- 0 - 999.990.000
- 0 - 1.999.990.000
- 0 - 2.146.990.000
Il sorgente in C (sieve.c) è stato compilato con:
# gcc -march=i686 -O6 -o sieve sieve.c (su Slackware)
# gcc -march=k8 -O6 -o sieve sieve.c (su Gentoo)
I risultati sono schematizzati nella seguente tabella:
| Slackware | Gentoo | |||
| RANGE | NUMERI PRIMI | TEMPO | NUMERI PRIMI | TEMPO |
| 0 - 999.990.000 | 50.847.059 | 47 secs | 50.847.059 | 46 secs |
| 0 - 1.999.990.000 | 98.221.846 | 97 secs | 98.221.846 | 98 secs |
| 0 - 2.146.990.000 | 105.074.642 | 122 secs | 105.074.642 | 106 secs |
I risultati denotano una sostanziale equivalenza prestazionale, ma una notevole differenza si nota via via che ci si avvicina al limite massimo nel range di ricerca concesso all’architettura a 32bit
Lo stesso programma sull’architettura a 64 bit può estendere la ricerca dei numeri primi in un range più vasto, come testimonia il seguente risultato
Searching prime numbers to : 2999990000
144449072 prime numbers found in 153 secs.
Il grafico seguente rappresenta in altra maniera i risultati di tale test:

Test II - Codifica mp3
Il test è consistito nella codifica in formato mp3 di un file in formato wav lungo 43711964 bytes, utilizzando il software Lame (versione 3.96.1). In entrambi i casi il pacchetto è stato compilato tramite il relativo configure, senza opzioni aggiuntive.
Il test è stato effettuato in tre modalità diverse per piattaforma:
- # lame -f filename.wav /dev/null
# lame -h filename.wav /dev/null
# lame -q0 filename.wav /dev/null
La prima forma utilizza la più lenta ma migliore versione di tutti gli algoritmi di psicoacustica implementati. La seconda è comunque una codifica di alta qualità. L’ultima è una codifica molto veloce, che applica comunque ancora alcuni criteri di psicoacustica.
I risultati sono schematizzati nella seguente tabella:
| Slackware | Gentoo | |
| Test 1 | 11 secs | 13 secs |
| Test 2 | 22 secs | 22 secs |
| Test 3 | 341 secs | 226 secs |
I risultati paradossalmente indicano come leggermente più veloce il codice a 32 bit nel primo test, denotano totale equivalenza per quanto riguarda la forma intermedia, mentre la differenza prestazionale si fa notevolissima a favore del codice a 64 bit nella forma pi impegnativa di test.
Per inciso, nell’operazione inversa (decodifica) il codice a 64 bit impiega poco pi di 3 secondi, mentre quello a 32 un secondo abbondante in più.
Il grafico seguente rappresenta in altra maniera i risultati ottenuti:


