4. Test delle memorie - un pò di teoria

Ormai è noto che con la nuova architettura Nehalem o Core i7 all'interno del processore coesistono due frequenze operative:

  • la frequenza operativa dei core della CPU

  • la frequenza operativa dell'uncore, dove per uncore si intende tutto ciò che non è core ovvero il memory controller, la cache L3 del processore, il circuito di terminazione del bus QPI, e del PWR clock.

Le performance delle RAM sono fortemente influenzate dalla frequenza operativa dell'uncore sia in termini di banda che di latenza molto più di quanto siano influenzate dalla frequenza operativa stessa delle memorie.

Proviamo a fare due conti e qualche ragionamento. La tabella seguente riporta la banda teorica massima raggiungibile con le memorie configurate in modalità dual channel e triple channel in funzione della frequenza di funzionamento.


Corsair XMS3 3x2GB TR3X6G1600C7 4. Test delle memorie - un pò di teoria 1


Come si può facilmente notare la banda che le memorie mettono a disposizione è veramente tanta a partire da frequenze di funzionamento delle memorie che sono considerate “basse”.

Ovviamente sono molti i fattori che influiscono sulla banda reale messa dalle RAM a disposizione del sistema, questi fattori possono essere suddivisi sinteticamente in due gruppi:

  1. Fattori architetturali non controllabili:

  • gli algoritmi di schedulazione dei thread concorrenti che girano sui core della CPU;

  • gli algoritmi di caricamento e svuotamento della memoria cache del processore;

  • architettura del chipset;

  • problemi legati all'elettronica dei circuiti che compongono la motherboard.

  1. Fattori controllabili da bios

  • la frequenza di funzionamento del memory controller, la frequenza di funzionamento della cache del processore, ovvero la frequenza di funzionamento dell'uncore;

  • la frequenza di funzionamento dei core del processore;

  • la frequenza di funzionamento delle memorie e i timings delle stesse.


Per i motivi detti prima non si riesce a sfruttare tutta la banda teorica messa a disposizione dalle memorie.

Per eseguire i test di performance ci affidiamo a Sandra e Lavalys Everest.

Everest misura le seguenti grandezze:

  • la larghezza di banda di picco in lettura della memoria. Il benchmark viene fatto leggendo un buffer di 16 MB organizzato in blocchi di 1 MB dalla memoria di sistema verso la CPU. La memoria è letta in avanti (dall'indirizzo più basso a quello più alto), in modo continuo senza interruzioni.

  • la larghezza di banda di picco in scrittura della memoria. Il benchmark viene fatto leggendo un buffer di 16 MB organizzato in blocchi di 1 MB dalla CPU verso la memoria di sistema. La memoria è scritta in avanti (dall'indirizzo più basso a quello più alto), in modo continuo senza interruzioni.

  • la larghezza di banda di picco in copia della memoria. Il benchmark viene fatto leggendo un buffer di 8 MB (metà dei 16 MB di lettura e scrittura) organizzato in blocchi di 1 MB dalla memoria di sistema verso la CPU. La memoria è letta e scritta in avanti (dall'indirizzo più basso a quello più alto), in modo continuo senza interruzioni.

Al fine di evitare rallentamenti dovuti a thread concorrenti sulle stesse locazioni di memoria, Everest utilizza un solo core del processore su cui gira un unico thread che si occupa di eseguire il test.


Il Memory Benchmark di Sandra utilizza come base l'agoritmo STREAM 2.0, che è un popolare benchmark della larghezza di banda di memoria che è stato utilizzato il personal computer ai super computer, il quale misura la banda di memoria sostenuta e quindi non è nè una misura di picco e nè legata ad un burst di dati. In teoria il risultato ottenuto con STREAM dovrebbe essere più basso di quelli ottenuti con applicativi che misurano grandezze di picco (come Everest che misura la banda di picco).

L'algoritmo STREAM implementato in SANDRA è riveduto e corretto nel senso che impiega una quantità di dati dinamici (circa il 40%-60% della RAM fisica di sistema invece dell'algoritmo classico che si basa su una quantità di dati statici pari a 12 MB), e sfrutta al massimo il parallelismo del processore allocando un thread su ogni core e utilizza una politica di scheduling dei thread molto performante che riduce al minimo la concorrenza degli stessi e massimizza il throughput del sistema.


A questo punto vi chiederete, ma com’è che Everest che misura la banda di picco legge un valore più basso di quello che legge Sandra? La spiegazione è semplice Sandra è ottimizzato al massimo perché utilizza 8 thread che lavorano in parallelo e con una bassa concorrenza esaltando al massimo le caratteristiche architetturali del processore. Invece la scelta di Lavalys d'utilizzare un solo thread che gira su un core della CPU non permette d'esprimere il massimo della banda di memoria da questo punto di vista.

Si potrebbe dire che la misurazione fatta con Sandra rende conto delle performance che la memoria mette a disposizione alle applicazioni che nascono multi threading, mentre la misurazione fatta con Everest è indicativa delle prestazioni che la memoria mette a disposizione delle applicazioni mono thread.


Mettendo assieme i concetti precedentemente riportati per misurare le performance delle RAM utilizzeremo Everest e Sandra, e proveremo a vedere come si comportano le memorie al variare della frequenza dell'uncore in termini di performance.