Elaborato impianti di elaborazione
Anno 2022-2024
Facoltà di Ingegneria Informatica - Federico II di Napoli
Giuseppe Laterza - M63001411
PCA e clustering
Lo scopo di questo esercizio è quello di effettuare una workload characterization, ovvero la caratterizzazione del carico di lavoro su un sistema di elaborazione. L’obiettivo è identificare parametri significativi che descrivano in maniera sintetica e completa il comportamento delle risorse di calcolo, così da comprendere meglio come un determinato software impatti sulle prestazioni globali del sistema. A questo scopo si ricorre a tecniche di analisi statistica come la Principal Component Analysis (PCA) e il clustering.
La PCA è una metodologia di riduzione dimensionale che consente di trasformare variabili correlate in un insieme di componenti principali, non correlate tra loro, in modo da evidenziare le direzioni di maggiore variabilità nei dati. Questo riduce la complessità del dataset originario.
Il clustering, invece, permette di raggruppare campioni simili tra loro sulla base delle caratteristiche misurate. Applicato ai dati del workload, consente di individuare profili di utilizzo simili e di classificare i diversi tipi di carico.
Raccolta dati
La fase di raccolta dati per la caratterizzazione del workload è stata condotta attraverso l’utilizzo dello strumento Performance Monitor di Windows, configurato per effettuare un monitoraggio delle metriche di uno specifico processo. L’obiettivo era ottenere una misurazione precisa e mirata dei contatori di utilizzo delle risorse associati esclusivamente a un singolo processo di interesse, evitando metriche di sistema generiche che avrebbero introdotto fattori di disturbo non pertinenti.
Elaborato impianti di elaborazione 1
Dal Performance Monitor sono stati scelti i seguenti contatori:
% Tempo processore
Indica la percentuale di tempo in cui i thread del processo sono stati eseguiti effettivamente sul processore, rispetto al tempo totale disponibile, rappresentando così l’utilizzo complessivo della CPU.
% Tempo utente
Misura la percentuale di tempo in cui la CPU è stata utilizzata dal processo in modalità utente, ovvero per l’esecuzione del proprio codice applicativo.
% Tempo privilegiato
Percentuale di tempo in cui la CPU è stata utilizzata in modalità kernel, per l’esecuzione di funzioni del sistema operativo o driver invocati dal processo.
Massimo valore byte virtuali
Rappresenta il valore massimo di memoria virtuale che il processo ha riservato durante tutta la sua vita.
Byte virtuali
Indica la quantità di memoria virtuale impegnata dal processo nel momento della rilevazione.
Errori di pagina/sec
Conta i page fault al secondo, ovvero quante volte il processo ha richiesto pagine non presenti in RAM e che il sistema operativo ha dovuto recuperare dalla memoria secondaria.
Max working set
Valore massimo del working set, cioè la più grande quantità di memoria fisica utilizzata contemporaneamente dal processo.
Working set
Quantità attuale di memoria fisica utilizzata dal processo, comprensiva di eventuali aree condivise con altri processi.
Byte massimi file di paging
Dimensione massima dello spazio riservato dal processo nel file di paging su disco.
Byte del file di paging
Elaborato impianti di elaborazione 2
Quantità di spazio di paging attualmente utilizzata dal processo su disco.
Byte privati
Quantità di memoria virtuale riservata in modo esclusivo dal processo, non condivisa con altri.
Conteggio thread
Numero di thread attivi associati al processo nel momento della misurazione.
Priorità base
Priorità iniziale assegnata dal sistema operativo al processo per determinare l’ordine di scheduling dei suoi thread.
Tempo trascorso
Durata di esecuzione del processo dall’avvio, espressa in secondi.
ID processo
Identificativo numerico univoco (PID) assegnato dal sistema operativo al processo.
Creazione ID processo
Timestamp di creazione del processo, utile a distinguere istanze con stesso nome ma avviate in momenti diversi.
Byte del pool di paging
Quantità di memoria allocata nel pool di paging del kernel per risorse associate al processo.
Byte del pool non di paging
Quantità di memoria del kernel non paginabile, riservata dal processo per gestire proprie strutture.
Conteggio degli handle
Numero totale di handle aperti dal processo (file, socket, eventi di sincronizzazione, oggetti di sistema, ecc.).
Operazioni lettura IO/sec
Numero di operazioni di lettura I/O eseguite dal processo ogni secondo.
Operazioni scrittura IO/sec
Numero di operazioni di scrittura I/O eseguite dal processo ogni secondo.
Operazioni dati IO/sec
Somma complessiva delle operazioni di lettura e scrittura effettuate dal processo ogni secondo.
Altre operazioni IO/sec
Numero di operazioni I/O diverse da letture/scritture, ad esempio query di controllo o accessi su pipe.
Byte letti IO/sec
Quantità di dati letti dal processo in byte ogni secondo.
Byte scritti IO/sec
Quantità di dati scritti dal processo in byte ogni secondo.
Byte dati IO/sec
Somma del traffico in byte generato da letture e scritture ogni secondo.
Altri byte IO/sec
Quantità di byte trasferiti in operazioni I/O non classiche ogni secondo (es. named pipe).
Working set - Privato
Indica la memoria fisica privata effettivamente occupata dal processo e non condivisa con altri.
Elaborato impianti di elaborazione 3
Il processo utilizzato per la raccolta dei dati è stato un gioco, monitorato al fine di misurare in modo preciso le risorse effettivamente consumate durante una sessione reale di utilizzo. L’acquisizione, effettuata con un intervallo di campionamento pari a 1 secondo, ha prodotto un workload costituito da 2166 righe e 28 colonne.
Pre-filtering
Il preprocessing dei dati è importante nel workload characterization perché consente di rimuovere i dati non necessari, di trasformare i dati in un formato utilizzabile per gli strumenti di analisi e di correggere eventuali errori o incongruenze nei dati. Ciò permette di ottenere una rappresentazione precisa e completa del workload, facilitando l'identificazione delle caratteristiche chiave e l'ottimizzazione delle prestazioni del sistema.
In primo luogo sono state rimosse la prima riga e le ultime due che corrispondono ad un campionamento parziale.
Sono state poi eliminate le colonne che presentavano valori costanti, MaxWorkingSet, Priorità base, ID Processo. Sono poi state escluse dalle analisi le colonne relative ai timestamp ed alle iterazioni, Creazione ID processo.
Guardando le distribuzioni nelle principali colonne sono stati notati alcuni outlier in corrispondenza delle prime righe del dataset e delle ultime tre righe.
Analizzando la colonna relativa al working set è stato osservato che i valori delle prime 65 righe e delle ultime 4 presentavano outlier. In corrispondenza di queste righe, infatti, anche altre metriche evidenziavano valori fuori scala, suggerendo la presenza di outlier legati a fenomeni transitori. Considerata la natura del processo monitorato, tali anomalie sono state interpretate come riconducibili alle fasi di avvio (startup) e di terminazione (shutdown) del processo stesso, dove quindi la memoria si inizia a riempire e poi a svuotare. Per concentrare l’analisi esclusivamente sul comportamento a regime, queste righe iniziali e finali sono state rimosse dal dataset.
Elaborato impianti di elaborazione 4
Outlier corrispondenti
Elaborato impianti di elaborazione 5
Outlier corrispondenti
Una volta valutati gli outlier è stata effettuata un’analisi della correlazione delle colonne. Utilizzando la matrice di correlazione di JMP emerge che Working Set e Working Set Privato e Byte del file di paging e Byte privati sono perfettamente correlate. Per tale motivo è possibile eliminare una delle due colonne che risultano correlate, quindi si è deciso di eliminare Working Set e Byte del file di paging.
Analizzando poi le colonne relative alle operazioni I/O, si osserva che Byte dati IO/sec è spesso la somma di Byte letti IO/sec e Byte scritti IO/sec, rendendola una combinazione lineare diretta delle altre due. In questo caso, mantenere tutte e tre le colonne introduce ridondanza e per questo motivo si è scelto di conservare solo due delle tre variabili, in particolare Byte letti IO/sec e Byte scritti IO/sec.
Elaborato impianti di elaborazione 6
Stesso discorso si applica alle colonne relative alle operazioni I/O, i grafici e le correlazioni evidenziano che Operazioni dati IO/sec è fortemente correlata con Operazioni lettura IO/sec, infatti Operazioni dati IO/sec è combinazione lineare delle due colonne componenti: Operazioni dati IO/sec = Operazioni lettura IO/sec + Operazioni scrittura IO/sec. Questo significa che la colonna aggregata non aggiunge nuova informazione rispetto alle altre due, ma introduce ridondanza nel dataset. Per questo motivo, si è scelto di escludere la colonna Operazioni dati IO/sec, mantenendo solo le operazioni di lettura e scrittura, che garantiscono una rappresentazione più dettagliata ed efficace del comportamento del sistema.
Elaborato impianti di elaborazione 7
La colonna % Tempo processore è risultata essere la somma esatta di % Tempo utente e % Tempo privilegiato, rendendola una combinazione lineare delle due. Per evitare ridondanza e semplificare l’analisi, è stata quindi rimossa, mantenendo le altre due componenti.
Analizzando poi gli outlier sulla colonna Byte scritti IO/sec, la riga 275 risulta fuori ampiamente fuori media, a seguito di un’analisi dei valori corrispondenti nelle altre colonne, si è notato che questi non sono valori rilevanti all’interno dell’intero record, per cui si è deciso di eliminare questa riga.
Normalizzazione
Prima di procedere con l’analisi tramite PCA, sarebbe opportuno normalizzare le variabili, al fine di riportarle su scale confrontabili ed evitare che quelle con valori numerici maggiori influenzino in modo sproporzionato la definizione delle componenti principali. La normalizzazione consiste generalmente nello standardizzare ciascuna colonna (ad esempio sottraendo la media e dividendo per la deviazione standard), così che tutte le variabili presentino media zero e varianza unitaria. x − μi z =i σ
In JMP si utilizza la PCA calcolata sulle correlazioni, tale normalizzazione dei dati viene effettuata automaticamente dal tool.
PCA e clustering
In seguito alla pulizia del dataset è stata effettuata l’analisi degli autovalori della matrice di covarianza, e tramite il test di Bartlett sono state estratte le componenti principali con le relative percentuali cumulative.
Elaborato impianti di elaborazione 8
Come visto dal diagramma sono state scelte come componenti principali per condurre l’analisi 7, 8 e 9 componenti.
È possibile ridurre il numero di osservazioni del dataset applicando anche tecniche di clustering. In particolare, nel caso analizzato si è adottato un clustering gerarchico agglomerativo basato sul metodo di Ward, scelto perché mira a minimizzare l’aumento della varianza totale all’interno dei cluster a ogni passo di unione. Questo approccio sfrutta la devianza intracluster come criterio principale di aggregazione, favorendo una struttura compatta e ben separata tra i gruppi. Tuttavia, il metodo è sensibile alla presenza di outlier e alla distribuzione iniziale delle osservazioni, motivo per cui è fondamentale identificare e analizzare eventuali anomalie nei dati prima dell’applicazione. L’obiettivo è duplice: minimizzare la variabilità interna ai cluster e massimizzare quella tra cluster (devianza intercluster). A supporto dell’analisi, viene utilizzato il dendrogramma, uno strumento visivo che consente di comprendere come le osservazioni vengono raggruppate e aiuta nella scelta del numero ottimale di cluster. Dendogramma per 7 componenti principali.
Elaborato impianti di elaborazione 9
Elaborato impianti di elaborazione 10
Analisi di sensitività
Per scegliere la configurazione che offra il miglior compromesso tra semplicità e capacità esplicativa, è utile effettuare un’analisi di sensitività basata sulla varianza che si desidera conservare. Assumendo di voler mantenere almeno x% della varianza totale, si selezionano tutte le configurazioni (combinazioni di numero di componenti principali e cluster) per cui la devianza persa risulta minore o uguale a (100 − x)%.
Nel nostro caso si è scelto di conservare circa il 70% della varianza.
Elaborato impianti di elaborazione 11
Si può notare che, al fine di caratterizzare un workload sintetico, un buon numero di cluster che funziona su tutti i numeri di PC è 35 cluster; in particolare, si potrebbe scegliere in questo caso di prendere 5 o 4 componenti principali, si è scelto quindi di utilizzare 7 componenti e 35 cluster.
Otteniamo quindi attraverso lo script “deviance.m” i seguenti valori:
Per la caratterizzazione del workload sintetico è stato scelto il punto del workload reale più vicino al centroide di ogni cluster. Tramite una funzione di distanza euclidea abbiamo, quindi, calcolato il punto più vicino al centroide. Di seguito, dunque, si riporta il workload sintetico così realizzato:
Elaborato impianti di elaborazione 12
Elaborato impianti di elaborazione 13
Quindi da un workload di 2094 righe si è passato ad un workload sintetico di 35 punti perdendo il 30% della devianza totale.
Benchmark
L’obiettivo di questa analisi è quello di progettare un benchmark tra due sistemi laptop dotati rispettivamente di processori Intel Core i7-10750H e Intel Core i3-1005G1, al fine di rilevare statisticamente una differenza di performance tra le due macchine. Di seguito le caratteristiche:
| Caratteristica | Laptop con Intel Core i7 | Laptop con Intel Core i3 |
|---|---|---|
| Modello CPU | Intel Core i7-10750H | Intel Core i3-1005G1 |
| Architettura | Comet Lake (10ª generazione) | Ice Lake (10° generazione) |
| Core / Thread | 6 core / 12 thread | 2 core/ 6 thread |
| Frequenza base | 2.60 GHz | 1.20 GHz |
| Frequenza Turbo | max 5.00 GHz | max 3.40 GHz |
| Anno di rilascio | 2020 | 2019 |
Come strumento di misura è stato impiegato il benchmark nbody, che simula l'interazione gravitazionale tra N corpi in uno spazio tridimensionale, che permette di stressare il processore ed in particolare la floating-point unit e misurarne le prestazioni.
Raccolta dei dati
Per garantire la correttezza statistica è stato eseguito n-body su entrambi i processori con stessi parametri di avvio. In particolare sono state effettuate 5 ripetizioni per ogni test e sono stati raccolti 35 campioni per ogni dimensione dei corpi. Tale valore è stato scelto in modo da superare la soglia convenzionale di n=30, al di sopra della quale si può applicare il Teorema del Limite Centrale, che assicura che la distribuzione della media campionaria tenda alla normalità, anche in presenza di distribuzioni non perfettamente gaussiane nei dati grezzi. Inoltre per assicurare l’indipendenza dei campioni raccolti i sistemi sono stati riavviati ad ogni esperimento.
Elaborato impianti di elaborazione 14
Per la misurazione dei tempi di esecuzione del benchmark su entrambe le macchine, è stato realizzato uno script bash per l’automatizzazione del processo:
#!/bin/bash
SESSION_FILE="session_counter_50k.txt"
LOG="output_n50k.log"
TOTAL=35
N=50000
R=5
# Se non esiste il file, inizia da 1
if [ ! -f "$SESSION_FILE" ]; then
echo 1 > "$SESSION_FILE"
fi
SESSION=$(cat "$SESSION_FILE")
if [ "$SESSION" -le "$TOTAL" ]; then
echo "==> Sessione $SESSION / $TOTAL"
bash ./launch_nbody.sh -r "$R" -n "$N" | grep "Time:" | sed 's/Time: //; s/ ms//' >> "$LOG"
NEXT=$((SESSION + 1))
echo "$NEXT" > "$SESSION_FILE"
/mnt/c/Windows/System32/shutdown.exe /r /t 5
else
echo "Tutte le $TOTAL sessioni completate."
fi
Lo script non è solo di scopo pratico, ma anche per garantire l’effettiva indipendenza delle misurazioni, in quanto viene eseguito senza l’intervento di un utente e garantisce un riavvio della macchina per ogni misurazione, quindi le misurazioni risultano indipendenti e identicamente distribuite.
Una volta raccolti i campioni sono stati utilizzati come pre-campioni per valutare l’effettiva dimensione campionaria per approssimare media e varianza del campione con quelli della popolazione a un certo intervallo di confidenza (e quindi a una certa percentuale di errore massimo), avendo più di 30 campioni possiamo approssimare utilizzando la distribuzione z.
In particolare è stata applicata la formula:
z2 · σ α/2 n = [( ) ] E
Tale formula consente di ottenere un intervallo di confidenza del 100(1 − α)% ed E rappresenta la soglia massima desiderata per l’errore.
In particolare, si è scelto di ottenere un intervallo di confidenza al 95% con α = 0.05 e quindi si è preso il quantile della distribuzione normale pari ad 1,96. Sono stati poi valutate diverse percentuali di errori rispetto alla media, 5%, 8% e 10% per entrambi i processori.
Processore i3
| N° corpi | n (5%) | n (8%) | n (10%) |
|---|---|---|---|
| 10.000 | 85 | 34 | 22 |
| 50.000 | 56 | 22 | 14 |
| 100.000 | 27 | 11 | 7 |
| 1.000.000 | 3 | 2 | 1 |
Elaborato impianti di elaborazione 15
Processore i7
| N° corpi | n (5%) | n (8%) | n (10%) |
|---|---|---|---|
| 10.000 | 7 | 3 | 2 |
| 50.000 | 3 | 1 | 1 |
| 100.000 | 5 | 2 | 2 |
| 1.000.000 | 2 | 1 | 1 |
È stata scelta quindi la percentuale di errore sulla media del 10%, quindi il numero di campioni raccolti sono più che sufficienti.
Una volta calcolata la dimensione campionaria necessaria per garantire una stima affidabile della media, si è passati alla valutazione degli
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.