Tesi di Laurea
Triennale
Laureando:
Massimo Palmisano
Relatore:
Prof. Marco Tessarotto
Confronto delle prestazioni dell’
Algoritmo di Dijkstra su Sistema
Operativo Linux in modalità
utente e modalità kernel
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à
Algoritmo di Dijkstra
• Trova il percorso minimo in un grafo orientato
avente pesi non negativi
• Implementazione nella sua versione “elementare”
• No multithreading
Linux e Linguaggio C
• Sistema Operativo Linux
• Open Source
• Conoscenza pregressa
• Linguaggio di programmazione C
• Conoscenza pregressa
• Kernel linux scritto in C
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
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
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
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
Progettazione Benchmark – II
• Benchmark eseguito su due macchine diverse
• Modulo Kernel compilato da GCC
• Programma Utente compilato da Clang e GCC
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
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
Prima Macchina – grafo 100.000 nodi
15000
15500
16000
16500
17000
17500
18000
18500
19000
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 Userspace GCC Userspace Clang
Seconda Macchina – grafo 1.000 nodi
7,5
8,5
9,5
10,5
11,5
12,5
13,5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
TempoEsecuzione(ms)
Numero Test
Raspberry PI 3 model B+
Kernel module Userspace GCC Userspace CLANG
Seconda Macchina – grafo 10.000 nodi
610
612
614
616
618
620
622
624
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
TempoEsecuzione(ms)
Numero Test
Raspberry PI 3 model B+
Kernel module Userspace GCC Userspace CLANG
Seconda Macchina – grafo 100.000 nodi
86000
87000
88000
89000
90000
91000
92000
93000
94000
95000
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
TempoEsecuzione(ms)
Numero Test
Raspberry PI 3 model B+
Kernel module Userspace GCC Userspace CLANG
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

Presentazione - Algoritmo di Dijkstra

  • 1.
    Tesi di Laurea Triennale Laureando: MassimoPalmisano Relatore: Prof. Marco Tessarotto
  • 2.
    Confronto delle prestazionidell’ 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 LinguaggioC • Sistema Operativo Linux • Open Source • Conoscenza pregressa • Linguaggio di programmazione C • Conoscenza pregressa • Kernel linux scritto in C
  • 6.
    Lato Utente • Implementazionemodalità 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 inkernel 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
  • 13.
    Prima Macchina –grafo 100.000 nodi 15000 15500 16000 16500 17000 17500 18000 18500 19000 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 Userspace GCC Userspace Clang
  • 14.
    Seconda Macchina –grafo 1.000 nodi 7,5 8,5 9,5 10,5 11,5 12,5 13,5 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 TempoEsecuzione(ms) Numero Test Raspberry PI 3 model B+ Kernel module Userspace GCC Userspace CLANG
  • 15.
    Seconda Macchina –grafo 10.000 nodi 610 612 614 616 618 620 622 624 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 TempoEsecuzione(ms) Numero Test Raspberry PI 3 model B+ Kernel module Userspace GCC Userspace CLANG
  • 16.
    Seconda Macchina –grafo 100.000 nodi 86000 87000 88000 89000 90000 91000 92000 93000 94000 95000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 TempoEsecuzione(ms) Numero Test Raspberry PI 3 model B+ Kernel module Userspace GCC Userspace CLANG
  • 17.
    Conclusioni • Nessun miglioramentoin kernel mode • Prestazioni dipendono da molti fattori • Processore • Condizioni interne della macchina (clock dinamico, temperatura) • Compilatore utilizzato e livello di ottimizzazione del codice prodotto