SlideShare a Scribd company logo
1 of 20
Download to read offline
Tesi di Laurea
Triennale
Laureando:
Massimo Palmisano
Relatore:
Prof. Marco Tessarotto
Titolo Tesi:
Confronto delle prestazioni
dell’algoritmo di Dijkstra su
Sistema Operativo Linux in
modalità utente e
modalità kernel
Modalità Utente e
Modalità Kernel
• Progettazione driver del kernel di Linux che necessiti di
fare una ricerca su un grafo con l’algoritmo di Dijkstra.
• Allo scopo si è realizzata una architettura dove il grafo
viene letto e preparato in user space e poi trasmesso al
driver in kernel space per l’elaborazione.
• 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
Progettazione 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
• 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
Modulo Kernel Linux
• In kernel mode è buona norma non leggere direttamente da file
• Scrittura di un programma utente
• Legge i dati e li passa al modulo kernel
• Interfaccia character device driver
• System call ioctl
Lettura Grafo in Kernel Mode
• Grafo implementato in file di testo
• In formato leggibile dai programmi
• Tre grafi per eseguire i benchmark
• 1.000 nodi
• 10.000 nodi
• 100.000 nodi
• Grafi completamente connessi
Benchmark – I
• Benchmark eseguito su due macchine diverse
• Modulo Kernel compilato da GCC
• Programma Utente compilato da Clang e GCC
Benchmark – II
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
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 10.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
Prima Macchina – grafo 100.000 nodi
Risultati Benchmark in percentuale
Differenza in percentuale tra il
tempo medio di esecuzione in
user space (GCC 9) e il tempo
medio di esecuzione in Kernel
Space
Differenza in percentuale tra il
tempo medio di esecuzione in
user space (Clang 9) e il tempo
medio di esecuzione in Kernel
Space
Grafo 1.000 nodi 48,37% 55.59%
Grafo 10.000 nodi -7,70% 17,01%
Grafo 100.000 nodi -0,23% 16,88%
Commento
Risultati
• Clang 9 produce un codice macchina con
tempi di esecuzione migliori di GCC 9 su CPU
Intel(R) Xeon(R) CPU E5-2640 0 @ 2.50GHz
• Ipotesi della differenza di prestazioni nel
caso del grafo di 1.000 nodi è il diverso modo
di allocare la memoria in modalità kernel
(kvmalloc_node e kvfree) e in modalità
utente (malloc free)
Differenza in percen-
tuale tra il tempo me-
dio di esecuzione in
user space (GCC 9) e il
tempo medio di ese-
cuzione in Kernel
Space
Differenza in percentuale
tra il tempo medio di
ese-cuzione in user
space (Clang 9) e il
tempo medio di
esecuzione in Kernel
Space
1.000 nodi 48,37% 55,59%
10.000 nodi -7,70% 17,01%
100.000 nodi -0,23% 16,88%
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+, ARM Cortex-A53, 1.2 GHz
Kernel module Userspace GCC Userspace CLANG
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+, ARM Cortex-A53, 1.2 GHz
Kernel module Userspace GCC Userspace CLANG
Seconda Macchina – grafo 10.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+, ARM Cortex-A53, 1.2 GHz
Kernel module Userspace GCC Userspace CLANG
Seconda Macchina – grafo 100.000 nodi
Risultati Benchmark in percentuale
Differenza in percentuale tra il
tempo medio di esecuzione in
user space (GCC 9) e il tempo
medio di esecuzione in Kernel
Space
Differenza in percentuale tra il
tempo medio di esecuzione in
user space (Clang 9) e il tempo
medio di esecuzione in Kernel
Space
Grafo 1.000 nodi 13,33% 4,89%
Grafo 10.000 nodi 1,78% 1,63%
Grafo 100.000 nodi 1,54% 1,36%
Commento
Risultati
- Compilatori differenti producono codice
macchina aventi tempi di esecuzione simili a
parità di CPU ARM Cortex-A53, 1.2 GHz
- La differenza di prestazioni nel caso del
grafo 1.000 nodi potrebbe essere dovuta al
diverso modo di allocare la memoria in
modalità kernel e in modalità utente
Differenza in percen-
tuale tra il tempo me-
dio di esecuzione in
user space (GCC 6) e il
tempo medio di ese-
cuzione in Kernel
Space
Differenza in percentuale
tra il tempo medio di
ese-cuzione in user
space (Clang 6) e il
tempo medio di
esecuzione in Kernel
Space
1.000 nodi 13,33% 4,89%
10.000 nodi 1,78% 1,63%
100.000 nodi 1,54% 1,36%
Conclusioni
• È possibile implementare un device driver che esegua l’algoritmo di Dijkstra, sebbene
le prestazioni in modalità kernel sono in generale non superiori a quelle che si
otterrebbero da un’implementazione in modalità utente
• Prestazioni dipendono da molti fattori
• Architettura del processore
• Condizioni interne del processore (clock dinamico, temperatura, memoria cache)
• Compilatore e livello di ottimizzazione del codice prodotto

More Related Content

What's hot

Docker - virtualizzazione leggera
Docker - virtualizzazione leggeraDocker - virtualizzazione leggera
Docker - virtualizzazione leggeraRoberto Polli
 
Open Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspOpen Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspLaura Camellini
 
RiverFlow2D GPU
RiverFlow2D GPU RiverFlow2D GPU
RiverFlow2D GPU IDRAN SRL
 
Glusterfs: un filesystem altamente versatile
Glusterfs: un filesystem altamente versatileGlusterfs: un filesystem altamente versatile
Glusterfs: un filesystem altamente versatileIvan Rossi
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaAlessandro Selli
 

What's hot (9)

Docker - virtualizzazione leggera
Docker - virtualizzazione leggeraDocker - virtualizzazione leggera
Docker - virtualizzazione leggera
 
Open Source Parallel Computing ltcsp
Open Source Parallel Computing ltcspOpen Source Parallel Computing ltcsp
Open Source Parallel Computing ltcsp
 
RiverFlow2D GPU
RiverFlow2D GPU RiverFlow2D GPU
RiverFlow2D GPU
 
Gpu
GpuGpu
Gpu
 
Processi e Thread
Processi e ThreadProcessi e Thread
Processi e Thread
 
Thesis Frascino Slide iT
Thesis Frascino Slide iTThesis Frascino Slide iT
Thesis Frascino Slide iT
 
Thread
ThreadThread
Thread
 
Glusterfs: un filesystem altamente versatile
Glusterfs: un filesystem altamente versatileGlusterfs: un filesystem altamente versatile
Glusterfs: un filesystem altamente versatile
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
 

Similar to Presentazione tesi 2.0

Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...LeonardoIurada
 
Jvm performance Tuning
Jvm performance TuningJvm performance Tuning
Jvm performance TuningMarco Sabatini
 
OpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCLOpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCLFrancesco Garofalo
 
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCL
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCLAngelo Impedovo, Linux Day 2016, Programmazione Parallela in openCL
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCLAngelo Impedovo
 
Thanatos - Parallel & Distributed Computing
Thanatos -  Parallel & Distributed ComputingThanatos -  Parallel & Distributed Computing
Thanatos - Parallel & Distributed ComputingIdriss Riouak
 
Delphi Day 2009 Win7 Dev Overview
Delphi Day 2009 Win7 Dev OverviewDelphi Day 2009 Win7 Dev Overview
Delphi Day 2009 Win7 Dev Overviewpietrobr
 
Sistemi Operativi: Thread - Lezione 08
Sistemi Operativi: Thread - Lezione 08Sistemi Operativi: Thread - Lezione 08
Sistemi Operativi: Thread - Lezione 08Majong DevJfu
 
Webinar porting e ottimizzazione per x86
Webinar   porting e ottimizzazione per x86Webinar   porting e ottimizzazione per x86
Webinar porting e ottimizzazione per x86Massimiliano Torregiani
 
Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...
Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...
Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...Codemotion
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScriptSinergia Totale
 
RGX Remote Graphics eXperience 1.1 Sinthera
RGX Remote Graphics eXperience 1.1 SintheraRGX Remote Graphics eXperience 1.1 Sinthera
RGX Remote Graphics eXperience 1.1 SintheraLuca Turco
 
MITM Attack with Patching Binaries on the Fly by Adding Shellcodes
MITM Attack with Patching Binaries on the Fly by Adding ShellcodesMITM Attack with Patching Binaries on the Fly by Adding Shellcodes
MITM Attack with Patching Binaries on the Fly by Adding ShellcodesGianluca Gabrielli
 
MySQL Tech Tour 2015 - Progettare, installare e configurare MySQL Cluster
MySQL Tech Tour 2015 - Progettare, installare e configurare MySQL ClusterMySQL Tech Tour 2015 - Progettare, installare e configurare MySQL Cluster
MySQL Tech Tour 2015 - Progettare, installare e configurare MySQL ClusterPar-Tec S.p.A.
 

Similar to Presentazione tesi 2.0 (20)

Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...Summary of “The Case for Writing Network Drivers in High-Level Programming La...
Summary of “The Case for Writing Network Drivers in High-Level Programming La...
 
Jvm performance Tuning
Jvm performance TuningJvm performance Tuning
Jvm performance Tuning
 
OpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCLOpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCL
 
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCL
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCLAngelo Impedovo, Linux Day 2016, Programmazione Parallela in openCL
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCL
 
Thanatos - Parallel & Distributed Computing
Thanatos -  Parallel & Distributed ComputingThanatos -  Parallel & Distributed Computing
Thanatos - Parallel & Distributed Computing
 
Thanatos
ThanatosThanatos
Thanatos
 
Lezioni 2009
Lezioni 2009Lezioni 2009
Lezioni 2009
 
Delphi Day 2009 Win7 Dev Overview
Delphi Day 2009 Win7 Dev OverviewDelphi Day 2009 Win7 Dev Overview
Delphi Day 2009 Win7 Dev Overview
 
Hadoop analyzerJR
Hadoop analyzerJRHadoop analyzerJR
Hadoop analyzerJR
 
Tesi
TesiTesi
Tesi
 
Thread
ThreadThread
Thread
 
Sistemi Operativi: Thread - Lezione 08
Sistemi Operativi: Thread - Lezione 08Sistemi Operativi: Thread - Lezione 08
Sistemi Operativi: Thread - Lezione 08
 
Webinar porting e ottimizzazione per x86
Webinar   porting e ottimizzazione per x86Webinar   porting e ottimizzazione per x86
Webinar porting e ottimizzazione per x86
 
Thesis Amicucci Slides IT
Thesis Amicucci Slides ITThesis Amicucci Slides IT
Thesis Amicucci Slides IT
 
Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...
Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...
Kunos Simulazioni and Assetto Corsa, behind the scenes- Alessandro Piva, Fabr...
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScript
 
RGX Remote Graphics eXperience 1.1 Sinthera
RGX Remote Graphics eXperience 1.1 SintheraRGX Remote Graphics eXperience 1.1 Sinthera
RGX Remote Graphics eXperience 1.1 Sinthera
 
Assemblare un pc
Assemblare un pcAssemblare un pc
Assemblare un pc
 
MITM Attack with Patching Binaries on the Fly by Adding Shellcodes
MITM Attack with Patching Binaries on the Fly by Adding ShellcodesMITM Attack with Patching Binaries on the Fly by Adding Shellcodes
MITM Attack with Patching Binaries on the Fly by Adding Shellcodes
 
MySQL Tech Tour 2015 - Progettare, installare e configurare MySQL Cluster
MySQL Tech Tour 2015 - Progettare, installare e configurare MySQL ClusterMySQL Tech Tour 2015 - Progettare, installare e configurare MySQL Cluster
MySQL Tech Tour 2015 - Progettare, installare e configurare MySQL Cluster
 

Presentazione tesi 2.0

  • 1. Tesi di Laurea Triennale Laureando: Massimo Palmisano Relatore: Prof. Marco Tessarotto
  • 2. Titolo Tesi: Confronto delle prestazioni dell’algoritmo di Dijkstra su Sistema Operativo Linux in modalità utente e modalità kernel
  • 3. Modalità Utente e Modalità Kernel • Progettazione driver del kernel di Linux che necessiti di fare una ricerca su un grafo con l’algoritmo di Dijkstra. • Allo scopo si è realizzata una architettura dove il grafo viene letto e preparato in user space e poi trasmesso al driver in kernel space per l’elaborazione. • 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. Progettazione 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
  • 6. • 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 Modulo Kernel Linux
  • 7. • In kernel mode è buona norma non leggere direttamente da file • Scrittura di un programma utente • Legge i dati e li passa al modulo kernel • Interfaccia character device driver • System call ioctl Lettura Grafo in Kernel Mode
  • 8. • Grafo implementato in file di testo • In formato leggibile dai programmi • Tre grafi per eseguire i benchmark • 1.000 nodi • 10.000 nodi • 100.000 nodi • Grafi completamente connessi Benchmark – I
  • 9. • Benchmark eseguito su due macchine diverse • Modulo Kernel compilato da GCC • Programma Utente compilato da Clang e GCC Benchmark – II
  • 10. 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
  • 11. 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 10.000 nodi
  • 12. 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 Prima Macchina – grafo 100.000 nodi
  • 13. Risultati Benchmark in percentuale Differenza in percentuale tra il tempo medio di esecuzione in user space (GCC 9) e il tempo medio di esecuzione in Kernel Space Differenza in percentuale tra il tempo medio di esecuzione in user space (Clang 9) e il tempo medio di esecuzione in Kernel Space Grafo 1.000 nodi 48,37% 55.59% Grafo 10.000 nodi -7,70% 17,01% Grafo 100.000 nodi -0,23% 16,88%
  • 14. Commento Risultati • Clang 9 produce un codice macchina con tempi di esecuzione migliori di GCC 9 su CPU Intel(R) Xeon(R) CPU E5-2640 0 @ 2.50GHz • Ipotesi della differenza di prestazioni nel caso del grafo di 1.000 nodi è il diverso modo di allocare la memoria in modalità kernel (kvmalloc_node e kvfree) e in modalità utente (malloc free) Differenza in percen- tuale tra il tempo me- dio di esecuzione in user space (GCC 9) e il tempo medio di ese- cuzione in Kernel Space Differenza in percentuale tra il tempo medio di ese-cuzione in user space (Clang 9) e il tempo medio di esecuzione in Kernel Space 1.000 nodi 48,37% 55,59% 10.000 nodi -7,70% 17,01% 100.000 nodi -0,23% 16,88%
  • 15. 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+, ARM Cortex-A53, 1.2 GHz Kernel module Userspace GCC Userspace CLANG
  • 16. 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+, ARM Cortex-A53, 1.2 GHz Kernel module Userspace GCC Userspace CLANG Seconda Macchina – grafo 10.000 nodi
  • 17. 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+, ARM Cortex-A53, 1.2 GHz Kernel module Userspace GCC Userspace CLANG Seconda Macchina – grafo 100.000 nodi
  • 18. Risultati Benchmark in percentuale Differenza in percentuale tra il tempo medio di esecuzione in user space (GCC 9) e il tempo medio di esecuzione in Kernel Space Differenza in percentuale tra il tempo medio di esecuzione in user space (Clang 9) e il tempo medio di esecuzione in Kernel Space Grafo 1.000 nodi 13,33% 4,89% Grafo 10.000 nodi 1,78% 1,63% Grafo 100.000 nodi 1,54% 1,36%
  • 19. Commento Risultati - Compilatori differenti producono codice macchina aventi tempi di esecuzione simili a parità di CPU ARM Cortex-A53, 1.2 GHz - La differenza di prestazioni nel caso del grafo 1.000 nodi potrebbe essere dovuta al diverso modo di allocare la memoria in modalità kernel e in modalità utente Differenza in percen- tuale tra il tempo me- dio di esecuzione in user space (GCC 6) e il tempo medio di ese- cuzione in Kernel Space Differenza in percentuale tra il tempo medio di ese-cuzione in user space (Clang 6) e il tempo medio di esecuzione in Kernel Space 1.000 nodi 13,33% 4,89% 10.000 nodi 1,78% 1,63% 100.000 nodi 1,54% 1,36%
  • 20. Conclusioni • È possibile implementare un device driver che esegua l’algoritmo di Dijkstra, sebbene le prestazioni in modalità kernel sono in generale non superiori a quelle che si otterrebbero da un’implementazione in modalità utente • Prestazioni dipendono da molti fattori • Architettura del processore • Condizioni interne del processore (clock dinamico, temperatura, memoria cache) • Compilatore e livello di ottimizzazione del codice prodotto