Nuove funzioni di Solaris 10

Miglioramenti alle prestazioni del sistema

In Solaris 10 8/07 sono state aggiunte le seguenti funzioni relative alle prestazioni e i seguenti miglioramenti.

SPARC: Contatore di prestazioni per unità di interfaccia PCI Express su sistemi UltraSPARC-T2

Le unità di interfaccia PCI Express (PIU) utilizzate sui sistemi UltraSPARC T2 sono dotate di contatori di prestazioni che possono essere salvati usando busstat. L'output del comando busstat -l visualizza i seguenti dispositivi per questi sistemi:

dove # indica un numero di istanza.

I dati raccolti da questi contatori di prestazioni integrati sono destinati principalmente al personale di assistenza Sun.

Supporto della modalità Hashed Cache Index

La modalità Hashed Cache Index è una nuova funzionalità hardware disponibile sui processori UltraSPARC T2. L'hardware utilizza molti più bit di indirizzo per calcolare un indice della cache L2. Come risultato, sono disponibili più colori di pagina per le pagine di grandi dimensioni.

Per ottenere il massimo livello di prestazioni, il kernel di Solaris deve aumentare il più possibile il numero di colori di pagina usati da tutti i thread che condividono la cache. Il sottosistema di memoria virtuale di Solaris è stato esteso per supportare questa nuova funzione hardware. Il calcolo corretto dei colori migliora la stabilità delle prestazioni e del throughput dei programmi applicativi sui sistemi UltraSPARC T2.

Ottimizzazione dello scheduling CMT multilivello

La funzione di ottimizzazione dello scheduling CMT multilivello fornisce al kernel di Solaris un meccanismo indipendente dalla piattaforma. Questo meccanismo abilita la rilevazione e l'ottimizzazione di varie relazioni di condivisione hardware che hanno effetto sulle prestazioni e sono presenti tra le CPU nelle architetture di processori CMT attuali e in corso di sviluppo, incluso Niagara II.

Questa funzione migliora anche lo scheduler o il dispatcher dei thread del kernel offrendo un criterio di bilanciamento dei carichi CMT multilivello che migliora le prestazioni di vari sistemi con processori multithreaded, multicore e multisocket.

Per maggiori informazioni su questa funzione, vedere il sito della comunità sulle prestazioni di OpenSolaris, http://www.opensolaris.org/os/community/performance.

Scalabilità del numero dei processi

La funzione di scalabilità del numero dei processi migliora la scalabilità di questo aspetto del sistema operativo Solaris. Attualmente, tutti i sistemi UltraSPARC supportano un massimo di 8192 contesti. Quando i processi sono più di 8192, il kernel “sottrae” i contesti per mantenere i processi in esecuzione. La sottrazione di un contesto da un processo comporta le seguenti operazioni:

Questa procedura richiede molte risorse e diventa sempre più complessa man mano che il numero di processi supera gli 8192. La funzione di scalabilità del numero di processi riprogetta completamente la gestione dei contesti. I contesti vengono gestiti per MMU anziché su base globale, consentendo una più efficiente cancellazione della TLB e migliorando la scalabilità della gestione dei contesti.

La scalabilità del numero dei processi migliora anche il throughput sui carichi di lavoro che comportano più di 8192 processi attivi, o creano e distruggono i processi molto velocemente, e offre i maggiori vantaggi sui sistemi con molte CPU.

MPSS esteso alla memoria condivisa

La funzione di supporto delle pagine di più dimensioni (MPSS) per la memoria condivisa aggiunge il supporto per le pagine di grandi dimensioni per la mappatura della memoria condivisa e fornisce un criterio OOB (Out-Of-Box) per l'utilizzo delle pagine di grandi dimensioni con la memoria condivisa. Il supporto MPSS è attivo per la memoria condivisa creata da mmap(1) di /dev/zero, con l'opzione MAP_ANON e per la memoria condivisa System V. Questa funzione aggiunge anche il supporto per la modifica della dimensione dei segmenti della memoria condivisa da parte di memcntl(2).

Il supporto MPSS si estende anche all'utilizzo delle pagine di grandi dimensioni per la memoria creata da mmap(1), mmap(MAP_PRIVATE ) di /dev/zero.