2. Confronto delle prestazioni dell’
Algoritmo di Dijkstra su Sistema
Operativo Linux in modalità
utente e modalità kernel
3. Modalità Utente e
Modalità Kernel
• I processori moderni operano in due distinte
modalità
• Modalità utente
• Modalità kernel
• Implementazione dell’algoritmo di Dijkstra nelle due
modalità
4. Algoritmo di Dijkstra
• Trova il percorso minimo in un grafo orientato
avente pesi non negativi
• Implementazione nella sua versione “elementare”
• No multithreading
5. Linux e Linguaggio C
• Sistema Operativo Linux
• Open Source
• Conoscenza pregressa
• Linguaggio di programmazione C
• Conoscenza pregressa
• Kernel linux scritto in C
6. Lato Utente
• Implementazione modalità utente
• Scrittura di un unico programma
• Lavoro suddiviso in tre processi che interoperano tramite pipe:
• Processo 1: Lettura grafo
• Processo 2: Esecuzione Dijkstra
• Processo 3: Scrivi risultati
7. Modulo Kernel Linux
• Implementazione Modalità kernel
• Porzioni di codice che aumentano le funzionalità del kernel
• aggiunti a runtime
• no ricompilazione dell’intero kernel Linux
• no riavvio del sistema
• aumentano funzionalità del kernel Linux
8. Lettura grafo in kernel mode
• In kernel mode non si legge mai direttamente da file
• Scrittura di un programma utente
• Legge i dati e li passa al modulo kernel
• Interfaccia character device driver
9. Progettazione
Benchmark – I
• Grafo implementato in file di testo
• In formato leggibile dai programmi
• Tre grafi per eseguire i benchmark
• 1000 nodi
• 10000 nodi
• 100000 nodi
• Grafi completamente connessi
10. Progettazione Benchmark – II
• Benchmark eseguito su due macchine diverse
• Modulo Kernel compilato da GCC
• Programma Utente compilato da Clang e GCC
11. Prima Macchina – grafo 1.000 nodi
1
1,1
1,2
1,3
1,4
1,5
1,6
1,7
1,8
1,9
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
TempoEsecuzione(ms)
Numero Test
CPU Intel(R) Xeon(R) CPU E5-2640 0 @ 2.50GHz
Kernel Mode GCC User Mode GCC User Mode Clang
12. Prima Macchina – grafo 10.000 nodi
90
100
110
120
130
140
150
160
170
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
TempoEsecuzione(ms)
Numero Test
CPU Intel(R) Xeon(R) CPU E5-2640 0 @ 2.50GHz
Modulo Kernel User Space GCC User Space Clang
17. Conclusioni
• Nessun miglioramento in kernel mode
• Prestazioni dipendono da molti fattori
• Processore
• Condizioni interne della macchina (clock dinamico, temperatura)
• Compilatore utilizzato e livello di ottimizzazione del codice prodotto