ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Σχετικά έγγραφα
ΕΠΙΚΟΙΝΩΝΙΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΕΣ INTERNET

Ερώτηση 1 η μεταγωγής κυκλώματος? : Ποια είναι τα κύρια χαρακτηριστικά της. Ερώτηση 2 η : Ποια είναι τα κύρια χαρακτηριστικά της μεταγωγής μηνύματος?

Αρχές Δικτύων Επικοινωνιών. Επικοινωνίες Δεδομένων Μάθημα 4 ο

Ethernet Ethernet ΙΕΕΕ CSMA/CD

7.9 ροµολόγηση. Ερωτήσεις

ΒΑΣΙΚΕΣ ΥΠΗΡΕΣΙΕΣ Βελώνης Γεώργιος ΤΟΥ ΔΙΑΔΙΚΤΥΟΥ. Μάθημα 2ο. Βελώνης Γεώργιος - 1ο Τ.Ε.Ε. Κατερίνης. Καθηγητής Πληροφορικής ΠΕ20 2-1

Δρομολόγηση (Routing)

ΤΕΙ Κρήτης, Παράρτηµα Χανίων

Επαναληπτικές Ασκήσεις Μαθήματος

Δροµολόγηση (Routing)

ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΙΙ

Κεφάλαιο 4: Λογισμικό Συστήματος

Υλοποίηση Δικτυακών Υποδομών και Υπηρεσιών: Δρομολόγηση

T.E.I. ΗΠΕΙΡΟΥ ΤΜΗΜΑ ΤΗΛΕΠΛΗΡΟΦΟΡΙΚΗΣ & ΔΙΟΙΚΗΣΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

ΤΙΤΛΟΣ ΜΑΘΗΜΑΤΟΣ: Δίκτυα Μεταγωγής & Τεχνικές Μεταγωγής Σε Δίκτυα Ευρείας Περιοχής

1.5.1 ΓΕΦΥΡΑ (BRIDGE) Εικόνα Επίπεδα λειτουργίας επαναλήπτη, γέφυρας, δρομολογητή και πύλης ως προς το μοντέλο OSI.

ΚΕΦΑΛΑΙΟ 1: Τα είδη των Δικτύων Εισαγωγή

2 η Σειρά Ασκήσεων Data Link Layer

Μία μέθοδος προσομοίωσης ψηφιακών κυκλωμάτων Εξελικτικής Υπολογιστικής

Δίκτυα Υπολογιστών I

Είναι η διαδικασία εύρεσης της διαδρομής που πρέπει να ακολουθήσει ένα πακέτο για να φτάσει στον προορισμό του. Η διαδικασία αυτή δεν είναι πάντα

Εργαστήριο 4 Πρωτόκολλα Δρομολόγησης

Σχήμα 1: TCP αποστολέας με παράθυρο αποστολέα = 1

7.7 Πρωτόκολλο ARP. 1. Το πρωτόκολλο ARP μετατρέπει τις διευθύνσεις IP στις αντίστοιχες φυσικές. Σ Λ

ΣΥΣΤΗΜΑΤΑ ΑΝΑΜΟΝΗΣ Queuing Systems

ιαδίκτυα & Ενδοδίκτυα Η/Υ

Εργαστήριο Δικτύων. Network Simulator OMNET++

Εισαγωγή - ορολογία. Προώθηση (forwarding): Δρομολόγηση (routing):

8 η ιάλεξη: σε δίκτυα δεδομένων

Στόχοι. Υπολογιστικά συστήματα: Στρώματα. Βασικές έννοιες [7]

ΣΥΣΤΗΜΑΤΑ ΑΝΑΜΟΝΗΣ Queuing Systems Εισαγωγή

ΚΕΦΑΛΑΙΟ 4. Τεχνική Ανίχνευσης του. Πτυχιακή Εργασία Σελίδα 95

Παράλληλη Επεξεργασία Κεφάλαιο 7 ο Αρχιτεκτονική Συστημάτων Κατανεμημένης Μνήμης

Δίκτυα ΙΙ. Κεφάλαιο 7

Εισαγωγή στην πληροφορική

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ 5ο ΚΕΦΑΛΑΙΟ

Οδηγίες αξιοποίησης για τον Εκπαιδευτικό

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

ΕΠΛ 001: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δίκτυα Υπολογιστών

Ενότητα 1η. Εισαγωγή στην Πληροφορική

Κεφάλαιο 12. Πρότυπα. Ανακεφαλαίωση Ερωτήσεις

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς

MYY703: Δίκτυα Υπολογιστών I Εργαστήρια

Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap

Διάρθρωση. Δίκτυα Υπολογιστών I Βασικές Αρχές Δικτύωσης. Διάρθρωση. Δίκτυο Υπολογιστών: ένας απλός ορισμός. Ευάγγελος Παπαπέτρου

Εργαστήριο Λειτουργικών Συστημάτων - Αλγόριθμοι Χρονοπρογραμματισμού. Εργαστηριακή Άσκηση

Μεταγωγείς πακέτων (packet switches)

ΚΕΦΑΛΑΙΟ 2ο ΠΡΟΣΟΜΟΙΩΣΗ ΔΙΑΚΡΙΤΩΝ ΓΕΓΟΝΟΤΩΝ

ίκτυα ίκτυο υπολογιστών: Ένα σύνολο από υπολογιστικές συσκευές που συνδέονται µεταξύ τους για σκοπούς επικοινωνίας και χρήσης πόρων. Συνήθως, οι συσκε

Άσκηση 1. (σημειώστε πως 1KB = 2 10 bytes, 1Mbps = 10 6 bits/sec).

Δίκτυα Επικοινωνιών ΙΙ: Δρομολόγηση

ANDROID Προγραμματισμός Εφαρμογών

Κεφάλαιο 1 Ε Π Α Ν Α Λ Η Ψ Η

Δίκτυα Υπολογιστών I Εργαστήρια

3. Προσομοίωση ενός Συστήματος Αναμονής.

WIRELESS SENSOR NETWORKS (WSN)

7.1 Επίπεδο δικτύου. Ερωτήσεις. λέξεις κλειδιά:

ΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΔΙΚΤΥΑ Η/Υ

Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC

Λιβανός Γιώργος Εξάμηνο 2017Β

Διαφορές single-processor αρχιτεκτονικών και SoCs

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΗΛΕΚΤΡΟΝΙΚΕΣ ΥΠΗΡΕΣΙΕΣ

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ

Δίκτυα Υπολογιστών I Εργαστήρια

SNMP ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

Μάθημα 3 ο ΔΙΕΡΓΑΣΙΕΣ (PROCESSES)

Περίληψη. Ethernet Δίκτυα Δακτυλίου, (Token Ring) Άλλα Δίκτυα Σύνδεση Τοπικών Δικτύων.

Κεφάλαιο 2. Υπολογιστές και Τεχνολογία Επικοινωνιών Παρελθόν - Παρόν - Μέλλον

ίκτυα υπολογιστών Στόχοι κεφαλαίου ίκτυα

Κεφάλαιο 3. Διδακτικοί Στόχοι

Δίκτυα Υπολογιστών Εργαστήρια

Μάθημα 3: Αρχιτεκτονική Υπολογιστών

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Υλοποίηση τεχνικών για την αποφυγή συμφόρησης σε τοπικά ασύρματα δίκτυα αισθητήρων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ. Εργαστηριακές Ασκήσεις για το Μάθημα «Δίκτυα Υπολογιστών I»

Τοπικά Δίκτυα. Ethernet Δίκτυα Δακτυλίου, (Token Ring) Άλλα Δίκτυα Σύνδεση Τοπικών Δικτύων.

Εργαστήριο 4 Ασκήσεις: Διαχείριση Δικτύου (nmap, iptables) και Προχωρημένες Εντολές Unix (grep, ps, cut, find)

ΔΙΚΤΥΑ Η/Υ ΙΙ. Γέφυρες

ΚΕΦΑΛΑΙΟ 3: Τοπολογίες Δικτύων Εισαγωγή

Επίπεδο Δικτύου: Διαδικτύωση

Συσκευές Τηλεπικοινωνιών και Δικτύωσης. Επικοινωνίες Δεδομένων Μάθημα 9 ο

Κατανεμημένα Συστήματα

Επίπεδο δικτύου IP Forwading κτλ

ΔΡΟΜΟΛΟΓΗΣΗ ΠΑΚΕΤΩΝ. Η δρομολόγηση των πακέτων μπορεί να γίνει είτε κάνοντας χρήση ασυνδεσμικής υπηρεσίας είτε συνδεσμοστρεφούς υπηρεσίας.

ΔΙΑΣΥΝΔΕΣΗ ΔΙΚΤΥΩΝ (INTERNETWORKING)

Πρωτόκολλα Διαδικτύου Μέρος 2ο. Επικοινωνίες Δεδομένων Μάθημα 3 ο

7.5 Πρωτόκολλο IP. Τεχνολογία ικτύων Επικοινωνιών ΙΙ

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Διασύνδεση τοπικών δικτύων

Δίκτυα Ι Αρχές Δικτύων

ΗΥ335 - Δίκτυα Υπολογιστών Χειμερινό εξάμηνο Φροντιστήριο Ασκήσεις στο TCP

1.1 Επαναλήπτες (repeaters ή regenerators)

Τη φυσική (MAC) διεύθυνση που δίνει ο κατασκευαστής του δικτυακού υλικού στις συσκευές του (π.χ. στις κάρτες δικτύου). Η περιοχή διευθύνσεων που

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 2 USB και Σειριακή Επικοι- νωνία Σ Σειριακή Επικοινωνία

Διαδίκτυα και το Διαδίκτυο (Internetworking and the Internet)

ιαδίκτυα & Ενδοδίκτυα Η/Υ

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή σε Έννοιες των Δικτύων Υπολογιστών Κεφάλαιο 2 Αξιοπιστία Κεφάλαιο 3 Αλγόριθμοι Πολλαπλής Πρόσβασης...

Οδηγίες σχεδίασης στο περιβάλλον Blender

Transcript:

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Πτυχιακή εργασία: ΜΕΤΑΓΩΓΗ ΠΑΚΕΤΩΝ ΚΑΙ ΓΕΝΝΗΤΡΙΕΣ ΣΥΝΘΕΤΙΚΩΝ ΠΡΟΦΙΛ ΚΙΝΗΣΗΣ: ΥΛΟΠΟΙΗΣΗ ΣΕ ΟΜΝΕΤ++ ΚΑΙ (Virtual Cut-Through Switching and Synthetic Benchmark Traffic Generation: Deployment in OMNET++ and network evaluation) ΤΣΑΝΑΚΤΣΙΔΗΣ ΙΩΑΝΝΗΣ ΑΕΜ: 1968 ΕΠΙΒΛΕΠΩΝ ΕΠΙΚΟΥΡΟΣ ΚΑΘΗΓΗΤΗΣ: ΝΙΚΟΣ ΠΛΕΡΟΣ ΘΕΣΣΑΛΟΝΙΚΗ ΜΑΡΤΙΟΣ 2016

Πίνακας περιεχομένων Περίληψη... Ι Abstract... ΙΙ Ευχαριστίες... ΙΙΙ Κεφάλαιο 1: Εισαγωγή... 1 Τα δίκτυα HPC σήμερα... 1 Οι οπτικές διασυνδέσεις σε ένα δίκτυο HPC... 3 Δομή ενός blade... 4 Γεννήτριες δεδομένων και τεχνικές μεταγωγής... 9 Στόχοι της πτυχιακής εργασίας... 10 Δομή της πτυχιακής εργασίας... 10 Κεφάλαιο 2: Το περιβάλλον προσομοίωσης Omnet++... 12 Εισαγωγή... 12 Omnet++ περιβάλλον προσομοίωσης... 12 Η γλώσσα NED... 12 Τρέχοντας μία προσομοίωση... 13 Αναλυτικό παράδειγμα δημιουργίας μιας προσομοίωσης... 15 Κεφάλαιο 3: Συνθετικά προφίλ δεδομένων(synthetic benchmarks)... 22 Εισαγωγή... 22 Random traffic pattern... 22 Neighbor traffic pattern... 23 Bit-reversal traffic pattern... 23 Tornado traffic pattern... 23 Υλοποίηση των synthetic benchmarks... 24 Υλοποίηση του Bit-reversal traffic pattern... 24 Υλοποίηση του Tornado traffic pattern... 29 Κεφάλαιο 4: Τεχνικές μεταγωγής... 36 Εισαγωγή... 36 Store-and-forward (SF) switching... 37 Virtual cut-through(vct) switching... 39 Υλοποίηση τεχνικής μεταγωγής... 41 Υλοποίηση της Store and forward(sf) switching.... 41 Υλοποίηση της Virtual cut-through(vct) switching.... 45 Κεφάλαιο 5: Παρουσίαση αποτελεσμάτων... 51

Εισαγωγή... 51 Σενάρια προσομοίωσης... 51 Ρυθμίσεις σεναρίων προσομοίωσης... 51 Αποτελέσματα... 53 Κεφάλαιο 6: Επίλογος και μελλοντικές επεκτάσεις... 58 Βιβλιογραφία... 60

Περίληψη Η παρούσα πτυχιακή εργασία υλοποιήθηκε στα πλαίσια ολοκλήρωσης των προπτυχιακών μου σπουδών στο τμήμα Πληροφορικής του ΑΠΘ. Η ενασχόληση μου με αυτή πραγματοποιήθηκε στα πλαίσια του ερευνητικού έργου PhoxTrot και συγκεκριμένα το ενδιαφέρον μου επικεντρώθηκε στον προσομοιωτή Optoboard Simulator, ο οποίος στοχεύει στην προσομοίωση δικτύων πλακέτας (on-board networks), που βρίσκονται σε μητρικές κάρτες υπερυπολογιστών (blades). Το κυρίως μέρος της παρούσας εργασίας αφορά στη μελέτη των διαφόρων τεχνικών μεταγωγής που χρησιμοποιούνται στους σύγχρονους μεταγωγείς, καθώς επίσης και η υλοποίηση της τεχνικής Virtual-Cut-Through Switching (VCT Switching) στα πλαίσια του Optoboard Simulator. Η τεχνική VCT Switching συγκρίνεται με την ήδη υλοποιημένη τεχνική Store-and-Forward και τα αποτελέσματα δείχνουν αξιοσημείωτη μείωση του μέσου χρόνου καθυστέρησης ανά πακέτο ακόμα και για ένα μόνο επίπεδο δρομολόγησης (1 hop). Η συγκριτική αξιολόγηση μεταξύ VCT και S&F έγινε με γεννήτριες πακέτων δεδομένων συνθετικών προφίλ κίνησης, οι οποίες επίσης υλοποιήθηκαν στα πλαίσια της πτυχιακής για τα συνθετικά προφίλ (synthetic benchmarks) Tornado και Bit-Reversal. Η υλοποίηση των συγκεκριμένων προφίλ κίνησης έγινε για ένα on-board δίκτυο δακτυλίου το οποίο, αποτελείται από 4 routers και 4 κόμβους ανά router. Λέξεις κλειδιά: Προσομοίωση δικτύων πλακέτας, Μητρικές κάρτες υπερυπολογιστών, Τεχνικές μεταγωγής, Μέσος χρόνος καθυστέρησης ανά πακέτο, Γεννήτριες πακέτων δεδομένων, Υπερυπολογιστής, Συνθετικά προφίλ κίνησης, Δίκτυο δακτυλίου, Ρυθμαπόδοση.

Abstract The current thesis was implemented as part of my undergraduate studies in the computer science department of Aristotle University of Thessaloniki. My involvement was part of the research project PhoxTrot and my interest was specifically focused on the Optoboard simulator, which targets the simulation of on board networks placed on blades. The main part of the thesis involves the research of various switching techniques used by modern switchers, as well as the implementation of Virtual Cut Through Switching (VCT switching) in the context of Optoboard Simulator. VCT switching is compared with Store and Forward Switching and the results show a remarkable reduction in the mean packet delay, even for one level of routing (1 hop). Benchmarking between VCT and S&F was accomplished using data packet generators of synthetic motion profiles, which were also implemented as a part of the thesis for synthetic profiles (synthetic benchmarks) Tornado and Bit Reversal. The implementation of the specific motion profiles was created for an on board ring network composed by 4 routers and 4 nodes per router. Keywords: Simulation, On board networks, Blades, Switching techniques, Mean packet delay, Data packet generators, HPC, Synthetic benchmarks, Ring network, Virtual Cut Through Switching, Store and Forward Switching, Throughput.

Ευχαριστίες Εκφράζω τις ευχαριστίες μου προς τον επιβλέποντα καθηγητή Κ.Νίκο Πλέρο, καθώς και τους διδακτορικούς φοιτητές Παύλο Μανιώτη και Στέλλα Μάρκου για την πολύτιμη βοήθειά τους.

Κεφάλαιο 1: Εισαγωγή Αυτό το κεφάλαιο αποσκοπεί στην εξοικείωση του αναγνώστη με τα HPC συστήματα, τη δομή τους, καθώς και με τις γεννήτριες δεδομένων και τις τεχνικές μεταγωγής στα blades. Επίσης περιγράφεται ο στόχος και η δομή της παρούσας πτυχιακής εργασίας. Τα δίκτυα HPC σήμερα Η παρούσα πτυχιακή πραγματεύεται και εξετάζει κυρίως τους δρομολογητές πάνω σε μητρικές κάρτες(blades) που αφορούν HPC συστήματα. Τα HPC συστήματα αναφέρονται κυρίως στην συλλογή υπολογιστικής ισχύς με τρόπο που αποδίδει πολύ υψηλότερη απόδοση από ότι θα μπορούσε να αποδώσει ένας επιτραπέζιος υπολογιστής, με σκοπό την επίλυση μεγάλων προβλημάτων στον τομέα της επιστήμης, της μηχανικής καθώς και των επιχειρήσεων. Όσον αφορά την αρχιτεκτονική, ένα HPC σύστημα αποτελείται συνήθως από εκατοντάδες ή και χιλιάδες επεξεργαστές που συνδέονται μεταξύ τους με ένα δίκτυο και συντονίζονται κεντρικά από κάποιο ειδικό λογισμικό.[1] Στην παρακάτω εικόνα παρουσιάζεται συνοπτικά ένα HPC δίκτυο. Εικόνα 1. HPC δίκτυο 4 κόμβων. 1

Αξιοσημείωτες είναι και οι επιδόσεις ενός τέτοιου συστήματος αν φανταστεί κανείς ότι χρησιμοποιούνται σε μεγάλα εργαστήρια, μεταξύ άλλων για πολύ απαιτητικές προσομοιώσεις. Η ικανότητα υπολογισμών μετριέται συνήθως με τον όρο Flops (Floating-point operations Per second, υπολογισμοί κινητής υποδιαστολής ανά δευτερόλεπτο). Η υπολογιστική ικανότητα των σημερινών υπερυπολογιστών έχει ξεπεράσει το 1 PetaFlop. Παρακάτω επισυνάπτεται ένα διάγραμμα που δείχνει τις υψηλότερες επιδόσεις ενός HPC συστήματος τα τελευταία 60 χρόνια. Εικόνα 2. Επίδοση HPC τα τελευταία 60 χρόνια. Όσον αφορά την κατανάλωση ενέργειας τα HPC συστήματα καταναλώνουν τεράστιες ποσότητες ενέργειας και παράγουν σημαντική θερμοκρασία. Για παράδειγμα ο γρηγορότερος υπερυπολογιστής του κόσμου, ο Tiahne-2, χρησιμοποιεί 24MW ενέργειας και κοστίζει 21 εκατομμύρια δολάρια τον χρόνο για να λειτουργήσει. Στις ΗΠΑ τα υπολογιστικά κέντρα κατανάλωσαν σε σύνολο 91 δις κιλοβατώρες το 2013 και ο αριθμός αυτός πρόκειται να αυξηθεί σε 139 δις κιλοβατώρες το 2020, μια αύξηση της τάξεως του 53%.[2] 2

Εικόνα 3. Στην πρώτη και στη δεύτερη στήλη αναγράφεται η εκτίμηση χρήσης καθώς και το κόστος ενέργειας στα κέντρα υπολογιστών των ΗΠΑ το 2013 και 2020. Στην τρίτη στήλη ο αριθμός σταθμών παραγωγής ενέργειας που χρειάζονται για να υποστηρίξουν τη ζήτηση. Η τελευταία στήλη δείχνει το διοξείδιο του άνθρακα που παράγεται σε εκατομμύρια μετρικούς τόνους. Η HPC κοινότητα στοχεύει στην δημιουργία υπερυπολογιστών που να είναι σε θέση να διατηρήσουν 1 ExaFlops = 10 18 Flops μέχρι το έτος 2020 και η κατανάλωση ενέργειας είναι το βασικό εμπόδιο για να επιτύχουν αυτόν τον στόχο. Για αυτόν τον λόγο οι φορείς των HPC συστημάτων πρότειναν να τεθεί όριο στην κατανάλωση ενέργειας στα 20MW για ένα πλήρης exascale σύστημα (σύστημα ικανό να διατηρήσει 1 ExaFlops = 10 18 Flops), έτσι ώστε να μετριάσουν το κόστος της ιδιοκτησίας καθώς και το κόστος νέων υποδομών για την κάλυψη αυτής της ποσότητας ενέργειας.[3] Οι οπτικές διασυνδέσεις σε ένα δίκτυο HPC Στα HPC συστήματα είναι απαραίτητο οι επεξεργαστές, η μνήμη, και οι μεταγωγείς να έχουν την δυνατότητα να επικοινωνούν μεταξύ τους. Οι συνδέσεις των παραπάνω στοιχείων καθορίζουν ένα δίκτυο διασύνδεσης. Σήμερα οι οπτικές διασυνδέσεις χρησιμοποιούνται κυρίως για ract-to-rack διασύνδεση, καθώς και για διασύνδεση on-board με χρήση ινών πάνω στο board. Μελλοντικά, σε επόμενο στάδιο προβλέπεται χρήση μητρικών καρτών με ενσωματωμένους οπτικούς κυματοδηγούς, με απώτερο στόχο οι οπτικές διασυνδέσεις να εφαρμοστούν ακόμα και σε επίπεδο chip. Εικόνα 4. Χρονοδιάγραμμα εφαρμογής οπτικών διασυνδέσεων σε ένα HPC σύστημα. 3

Δομή ενός blade Ένα blade είναι μια λεπτή, ηλεκτρονική πλακέτα που περιέχει μικροεπεξεργαστές και μνήμη. Κάθε blade είναι ουσιαστικά ένας server από μόνος του και συνήθως αφορά μια συγκεκριμένη εφαρμογή. Το κύριο πλεονέκτημα ενός υπερυπολογιστή που αποτελείται από blades, εκτός του ότι μπορεί να έχει πολλαπλούς server σε μια κεντρική μονάδα, είναι επίσης η διαχείριση των διαθέσιμων πόρων σε μικρότερες αρχιτεκτονικές, που μπορούν να οργανώνονται από ένα κοινό γραφικό περιβάλλον. Επομένως ένας υπερυπολογιστής αποτελούμενος από blades, παρουσιάζει μεγάλο πλεονέκτημα, γιατί ελαχιστοποιείται η χρήση του φυσικού χώρου που χρησιμοποιείται, καθώς επίσης και η ενέργεια[4]. Τα blades συνδέονται μεταξύ τους χρησιμοποιώντας ένα bus σύστημα. Ένα bus σύστημα είναι μια συλλογή από καλώδια μέσω των οποίων μεταφέρονται τα δεδομένα από το ένα μέρος του υπερυπολογιστή σε ένα άλλο. Σε έναν υπερυπολογιστή μπορούν να προστεθούν blades με σκληρούς δίσκους, που εξυπηρετούν στην αποθήκευση δεδομένων, blades που υποστηρίζουν Gigabit Ethernet μεταγωγούς, καθώς και blades που υποστηρίζουν μεταγωγούς καναλιών οπτικών ινών.[5] Εικόνα 5. Γραφική απεικόνιση των κύριων συστατικών ενός blade. 4

Σήμερα τα HPC συστήματα είναι ευρέως διαδεδομένα και εξελίσσονται συνεχώς. Παρακάτω παρουσιάζονται μερικά HPC συστήματα και τα blade που χρησιμοποιούν. Ο Titan είναι ένας υπερυπολογιστής που κατασκευάστηκε από την Cray στο Oak Ridge National Laboratory, για να χρησιμοποιηθεί σε ποικίλες επιστημονικές εφαρμογές. Ο Titan είναι μια αναβάθμιση του Jaguar, ενός άλλου υπερυπολογιστή από την Oak Ridge, που χρησιμοποιεί GPUs σε συνδυασμό με CPUs, πράγμα που του επιτρέπει να επιτυγχάνει 10 φορές μεγαλύτερη ταχύτητα και 5 φορές μεγαλύτερη απόδοση ενέργειας από τον Jaguar. Αυτό επιτρέπει στον Titan, αλλά και σε μελλοντικά συστήματα να ξεπεράσουν την απόδοση και τα όρια που κληρονόμησαν από υπερυπολογιστές προηγούμενης γενιάς. Το blade που χρησιμοποιεί ο Titan κατασκευάστηκε επίσης από την Cray και ονομάζεται Cray XK7. Το Cray XK7 αποτελείται από μία CPU 16 πυρήνων για κάθε κόμβο, και 4 κόμβους(1 CPU και 1 GPU για κάθε κόμβο) για κάθε blade.[6] Εικόνα 6. Cray XK7 κόμβος και blade. 5

Εικόνα 7. Αρχιτεκτονική κόμβου Cray XK7. Ο Tianhe-2 ή αλλιώς TH-2, είναι ο πιο γρήγορος υπερυπολογιστής του κόσμου. Κατασκευάστηκε από 1300 επιστήμονες και μηχανικούς και κύριος σκοπός της δημιουργίας του είναι η προσομοίωση και η ανάλυση, καθώς και η χρήση του σε εφαρμογές ασφαλείας της κυβέρνησης της Κίνας. Όσον αφορά την αρχιτεκτονική του blade του, αποτελείται από 2 κόμβους για κάθε blade. Κάθε κόμβος είναι εξοπλισμένος με 64 GB μνήμη, κάθε Phi είναι εξοπλισμένο με 8GB μνήμη και συνολικά ολόκληρο το σύστημα αποτελείται από 1404 petabytes.[7] 6

Εικόνα 8. Κόμβος Tianhe-2. Εικόνα 9. Blade Tianhe-2. 7

Τέλος, ο IBM Sequoia κατασκευάστηκε από την IBM. Ο IBM Sequoia είναι ο τρίτος γρηγορότερος υπερυπολογιστής του κόσμου αμέσως μετά τους Tianhe-2 και Titan. Σκοπός της κατασκευής του IBM Sequoia είναι η προσομοίωση πυρηνικών όπλων, καθώς και η χρήση του για επιστημονικούς σκοπούς, όπως στο πεδίο της αστρονομίας, της ενέργειας και στη μελέτη των κλιματικών αλλαγών. Ο IBM Sequoia είναι σχεδιασμένος με βάση τον υπερυπολογιστή Blue Gene/Q της IBM. Ένας κόμβος αποτελείται από 16 πυρήνες εξοπλισμένους με 16GB DDR3 μνήμης ο καθένας. Το σύστημα περιλαμβάνει συνολικά 1.572.854 επεξεργαστικούς πυρήνες με 1.5PiB μνήμη. Όσον αφορά το blade του Blue Gene/Q, αποτελείται από 32 υπολογιστικές κάρτες και τοπολογία δικτύου 5D-Torus για την σύνδεση των κόμβων επεξεργασίας.[8] Εικόνα 10. Blade Blue Gene/Q. 8

Εικόνα 11. Ιεραρχία του Blue Gene/Q. Γεννήτριες δεδομένων και τεχνικές μεταγωγής Τα traffic generation patterns είναι προφίλ δεδομένων τα οποία παράγονται από τις γεννήτριες δεδομένων. Στη διαδικασία αξιολόγησης ενός δικτύου HPC και όταν απουσιάζουν δεδομένα που αντιστοιχούν σε πραγματικά εκτελέσιμα αρχεία, τότε χρησιμοποιούνται ομάδες από συνθετικά προφίλ. Τα συνθετικά προφίλ δημιουργούν προφίλ επικοινωνίας μεταξύ κόμβων που καλύπτουν μια ευρεία γκάμα από περιπτώσεις που απαντώνται σε πραγματικό δίκτυο, αλλά μπορούν να παραχθούν εξολοκλήρου από πλήρως ντετερμινιστικούς αλγόριθμους. Μερικά από τα προφίλ δεδομένων και ο τρόπος εύρεσης του προορισμού του πακέτου αναγράφονται στον παρακάτω πίνακα. Εικόνα 12. Προφίλ δεδομένων και τρόπος εύρεσης προορισμού. 9

Αρκετά από τα παραπάνω προφίλ δεδομένων βασίζονται σε προφίλ επικοινωνίας τα οποία προκύπτουν κυρίως σε εφαρμογές. Για παράδειγμα, το Shuffle προκύπτει στον γρήγορο μετασχηματισμό fourier ή στην ταξινόμηση. Το Random περιγράφεται από ένα διάνυσμα κίνησης Λ, όπου για όλους τους κόμβους ισχύει λ sd =1/N, όπου Ν ο αριθμός των κόμβων. Στο προφίλ κίνησης Permutation, η κίνηση από κάθε πηγή s δρομολογείται σε έναν προορισμό, που αντιπροσωπεύεται από μία συνάρτηση π(s), η οποία ενώνει την πηγή s με έναν συγκεκριμένο προορισμό d. Στο Bit Permutation κάθε bit d i της b-bit διεύθυνσης προορισμού είναι μια συνάρτηση ενός bit της διεύθυνσης πηγής s j, όπου j είναι μία συνάρτηση του i. Το Digit Permutation είναι παρόμοιο με το bit permutation, αλλά με διευθύνσεις που εκφράζονται ως ψηφία. Αντικείμενο της παρούσας πτυχιακής είναι το Bit-reverse και το Tornado. Το Bit-reverse απαιτεί κάθε κόμβος να στέλνει μηνύματα μόνο στον κόμβο που έχει ανεστραμμένη διεύθυνση σε σχέση με αυτόν της πηγής. Τέλος, το Tornado, είναι ένα σταθερό ζεύγος πηγής-προορισμού για κάθε μήνυμα.[9] Η μελέτη των προφίλ δεδομένων είναι πολύ σημαντική, διότι βοηθά στο να εντοπιστεί το είδος κίνησης των πακέτων που είναι καλύτερο να εφαρμοστεί σε κάθε αρχιτεκτονική. Οι τεχνικές μεταγωγής αφορούν την υλοποίηση αλγορίθμων οι οποίοι είναι υπεύθυνοι για μετάδοση πακέτων σε όλο το δίκτυο. Η εκάστοτε τεχνική μεταγωγής αποφασίζει πως ο μεταγωγέας λαμβάνει, επεξεργάζεται και προωθεί τα πακέτα. Υπάρχουν τέσσερις μέθοδοι μεταγωγής. Αυτές είναι η Circuit switching (CS), η Storeand-forward (SF) switching, η Virtual cut-through (VCT) switching και τέλος η Wormhole (WH) switching. Στην παρούσα πτυχιακή υλοποιήθηκε η Virtual cutthough (VCT) switching, η οποία συγκρίθηκε με την ήδη υλοποιημένη Store-andforward (SF) switching. Στόχοι της πτυχιακής εργασίας Κύριος στόχος της πτυχιακής είναι η επιλογή και υλοποίηση του κατάλληλου αλγορίθμου τεχνικής μεταγωγής καθώς και των synthetic benchmarks, έτσι ώστε να υπάρξει δυνατότητα σύγκρισης τόσο των επιδόσεων που αφορούν τον ρυθμό μετάδοσης, αλλά και της χρονικής καθυστέρησης ανά πακέτο. Θα πρέπει να τεθούν σε λειτουργία δηλαδή οι κατάλληλες προσομοιώσεις συμπεριλαμβανομένων όλων των δυνατών συνδυασμών και να επιλεγεί τελικώς ο κατάλληλος συνδυασμός μετά από σύγκριση των αποτελεσμάτων που προσομοιώθηκαν. Δομή της πτυχιακής εργασίας Στο κεφάλαιο 2 παρουσιάζεται το περιβάλλον προσομοίωσης Omnet++ και δίνεται ένα αναλυτικό παράδειγμα δημιουργίας μιας προσομοίωσης σε αυτό. Στο κεφάλαιο 3 παρουσιάζονται τα συνθετικά προφίλ δεδομένων(synthetic benchmarks), και εξηγείται ο τρόπος υλοποίησης δύο από αυτών (Bit-reversal και Tornado). Στο κεφάλαιο 4 περιγράφονται οι τεχνικές μεταγωγής, καθώς και ο τρόπος υλοποίησης τους. Στο κεφάλαιο 5 προβάλλονται οι ρυθμίσεις προσομοίωσης και γίνεται 10

ανάλυση των αποτελεσμάτων που πάρθηκαν από τις προσομοιώσεις. Τέλος, στο κεφάλαιο 6, βρίσκεται ο επίλογος και οι μελλοντικές επεκτάσεις. 11

Κεφάλαιο 2: Το περιβάλλον προσομοίωσης Omnet++ Εισαγωγή Αυτό το κεφάλαιο αποσκοπεί στο να εξοικειωθεί ο αναγνώστης με το περιβάλλον προσομοίωσης Omnet++ και να καταλάβει τη λειτουργία του. Δίνονται επεξηγήσεις για το τι είναι το Omnet++ και πως λειτουργεί, καθώς και ένα απλό παράδειγμα προσομοίωσης που στοχεύει στην ευκολότερη εξοικείωση του χρήστη με το περιβάλλον. Omnet++ περιβάλλον προσομοίωσης Το Omnet++ είναι ένα περιβάλλον προσομοίωσης διακριτού χρόνου. Ο κύριος τομέας εφαρμογής του είναι η προσομοίωση δικτύων επικοινωνιών, αλλά λόγω της γενικής και ευέλικτης αρχιτεκτονικής του, χρησιμοποιείται επιτυχώς και σε άλλους τομείς, όπως η προσομοίωση περίπλοκων συστημάτων, δικτύων ουρών ή σε αρχιτεκτονικές υλικών. Το Omnet++ παρέχει μια συμπαγής αρχιτεκτονική για τα μοντέλα και βασίζεται σε modules και σε events. Στο Omnet++ μπορούν να αναπαρασταθούν τα διάφορα μέρη ενός δικτύου σε οντότητες. Υπάρχουν δύο βασικά είδη modules. Το simple module και το compound module. Ένα simple module είναι μια απλή οντότητα, όπου ορίζονται οι παράμετροι και οι πύλες που θα αποτελείται(in/out). Ακόμη σε ένα simple module προγραμματίζονται οι λειτουργίες του χρησιμοποιώντας τη γλώσσα C++. Ένα compound module είναι ουσιαστικά ένας συνδυασμός από simple ή/και compound module και δίνει τη δυνατότητα δημιουργίας σύνθετων οντοτήτων. Το Omnet++ παρέχει επίσης υποστήριξη γραφικού περιβάλλοντος και λόγω της αρθρωτής αρχιτεκτονικής του, ο πυρήνας προσομοίωσης μπορεί εύκολα να ενσωματωθεί στις εφαρμογές μας. Παρόλο που το Omnet++ δεν θεωρείται αποκλειστικά πλατφόρμα προσομοίωσης δικτύων, η ιδιότητά του αυτή το καθιστά ευρέως διαδεδομένο στον επιστημονικό τομέα, καθώς και στον βιομηχανικό, με αποτέλεσμα να χτίζεται μια μεγάλη υποστηρικτική κοινότητα ως προς τον χρήστη. Το Omnet++ IDE είναι βασισμένο στην πλατφόρμα του Eclipse και επίσης προσφέρει γραφικό περιβάλλον για την εκτέλεση της προσομοίωσης. Τέλος μπορεί να τρέξει σε Windows, Linux, Mac OS X και άλλα Unix συστήματα.[10] Η γλώσσα NED Μία προσομοίωση στο Omnet++ γράφεται σε δύο διαφορετικές γλώσσες, την NED και την C++. Αυτές οι δύο γλώσσες διαχωρίζουν την σχεδίαση της τοπολογίας του δικτύου και την υλοποίηση των οντοτήτων που υπάρχουν στην τοπολογία. Η NED γλώσσα χρησιμοποιείται, για να περιγράψει τη σχεδίαση της τοπολογίας της προσομοίωσης. 12

Εικόνα 13. Simple και compound modules Όπως φαίνεται παραπάνω στην εικόνα 13, κάθε απλή οντότητα(simple module) που περιγράφεται από την γλώσσα NED μπορεί επίσης να χρησιμοποιηθεί και ως στοιχείο σε μία μεγαλύτερη σύνθετη οντότητα, η οποία επίσης περιγράφεται χρησιμοποιώντας την γλώσσα NED[11]. Υπάρχουν τρία ξεχωριστά στοιχεία, τα οποία μπορούν να περιγράψουν την γλώσσα NED. Ορισμός των οντοτήτων Σε αυτό το σημείο μπορούν να περιγραφούν απλές(simple) και σύνθετες(compound) οντότητες, καθώς επίσης και να προσδιοριστούν οι κατάλληλες παράμετροι. Ακόμη υπάρχει η πιθανότητα να καθοριστούν οι πύλες που συνδέουν τις οντότητες. Ορισμός των καναλιών Σε αυτό το μέρος προσδιορίζονται τα κανάλια που συνδέουν τις οντότητες. Ορισμός του δικτύου Για να εκτελεστεί μία πλήρης προσομοίωση, θα πρέπει να περιγραφεί ποια οντότητα θα είναι στο υψηλότερο επίπεδο του δικτύου που θα προκληθεί η εκτέλεση της επιθυμητής προσομοίωσης. Το υψηλότερο επίπεδο του δικτύου είναι μία υπόδειξη ολόκληρου του συστήματος. Τρέχοντας μία προσομοίωση Μία προσομοίωση στο Omnet++ μπορεί να γίνει με δύο διαφορετικούς τρόπους: Γραφικά και μόνο με κείμενο. Η γραφική προσομοίωση είναι χρησιμότερη, αν ληφθεί υπόψη ότι εκτελείται για πρώτη φορά μία προσομοίωση και έτσι ο χρήστης γίνεται πιο οικείος με τα πρωτόκολλα, καθώς και με ολόκληρο το δίκτυο που προσομοιώνεται. Μια γραφική προσομοίωση μας δείχνει όλα τα μηνύματα που ανταλλάσσονται μεταξύ των οντοτήτων. Ακόμη σε μεγάλου όγκου προσομοιώσεις, καθίσταται δυνατή η εις βάθος παρατήρηση κάθε κόμβου/επεξεργαστή καθώς και η ανταλλαγή μηνυμάτων σε κάθε κομμάτι ολόκληρου του δικτύου. Παρακάτω παρουσιάζεται πως μοιάζει μια προσομοίωση σε γραφικό περιβάλλον. 13

Εικόνα 14. Γραφική προσομοίωση σε Omnet++. Οι προσομοιώσεις μπορούν να τρέξουν σε διαφορετικές ταχύτητες όπως βήμα βήμα(run), γρήγορα(fast) και πάρα πολύ γρήγορα(express). Το Run mode χρησιμοποιείται, ώστε να ελεγχθεί κυρίως, αν ο κώδικας που είναι υπεύθυνος για την λειτουργία της προσομοίωσης οδηγεί στα επιθυμητά αποτελέσματα, εμφανίζοντας αναλυτικές πληροφορίες για κάθε χρονική στιγμή της προσομοίωσης. Το Fast mode θα τρέξει την προσομοίωσή αρκετά γρηγορότερα σε σχέση με το Run mode και δεν θα εμφανίζονται για κάθε χρονική στιγμή οι πληροφορίες της προσομοίωσης. Το Express mode χρησιμοποιείται κυρίως για προσομοιώσεις που διαρκούν αρκετή ώρα. Είναι επίσης δυνατό μια προσομοίωση να διακοπεί στο σημείο που επιθυμεί ο χρήστης. Στην παραπάνω εικόνα είναι ορατοί όλοι οι κόμβοι, καθώς και οι παράμετροι που τους έχουν ανατεθεί. 14

Αναλυτικό παράδειγμα δημιουργίας μιας προσομοίωσης Παρακάτω θα παρουσιαστεί ένα παράδειγμα μιας προσομοίωσης. Το παράδειγμα αναφέρεται στη δημιουργία ενός compound module, αποτελούμενο από δύο simple modules, που θα λειτουργούν ως γεννήτριες πακέτων(traffic generators) και θα αποστέλλουν πακέτα ο ένας στον άλλον. Αφού εγκατασταθεί το Omnet++ στον υπολογιστή μας ακολουθεί η δημιουργία ενός καινούριου Omnet++ project με όνομα test. Αφού δημιουργηθεί το project το περιβάλλον του Omnet++ θα είναι όπως φαίνεται στην παρακάτω εικόνα. Εικόνα 15. Περιβάλλον Omnet++. Αρχικά ο χρήστης δημιουργεί ένα απλό simple module. Αυτό γίνεται κάνοντας δεξί κλικ στον φάκελο src και επιλέγοντας new simple module. Επιλέγεται ένα όνομα για το simple module, στην συγκεκριμένη περίπτωση θα ονομαστεί sender, και έπειτα ακολουθεί η επιλογή finish. Το Omnet++ θα δημιουργήσει αυτόματα ένα αρχείο, το οποίο θα ονομάζεται sender.ned, καθώς και τα αντίστοιχα αρχεία sender.cc και sender.h που θα είναι υπεύθυνα για τον προγραμματισμό των λειτουργιών του sender. Στην παρακάτω εικόνα φαίνεται πως μοιάζει το αρχείο ned, αφού έχουν συμπληρωθεί κάποια τμήματα του κώδικα. 15

Εικόνα 16. Simple module με ονομασία sender.ned. Στην γραμμή simple Sender αναγράφεται η δήλωση ενός simple module με το όνομα Sender. Στο μπλοκ parameters δηλώνονται οι παράμετροι που ο χρήστης επιθυμεί, οι οποίες θα αφορούν το module. Έχει δηλωθεί ενδεικτικά μία παράμετρος τύπου int με το όνομα a. Στο μπλοκ gates δηλώνονται οι πύλες εισόδου και εξόδου του module. Στην συγκεκριμένη περίπτωση το module θα έχει μόνο μία πύλη εισόδου(in) και μόνο μία έξοδο(out). Έπειτα δημιουργείται ένα compound module, το οποίο θα αποτελείται από δύο simple modules τύπου Sender, όπου θα δημιουργούν πακέτα και θα τα στέλνουν ο ένας στον άλλον. Για τη δημιουργία του compound module θα χρησιμοποιηθεί το γραφικό περιβάλλον που υποστηρίζεται από το Omnet++, στο οποίο αφού δημιουργηθούν γραφικά, οι συνδέσεις μεταξύ των modules μεταφράζονται αυτόματα σε κώδικα. Αφού γίνει δεξί κλικ στον φάκελο src, επιλέγεται new compound module, δίνεται ένα όνομα, στο συγκεκριμένο παράδειγμά mynetwork.ned, και ακολουθεί η επιλογή finish. Η παρακάτω εικόνα δείχνει το γραφικό περιβάλλον και τη δημιουργία του compound module. 16

Εικόνα 17. Γραφικό περιβάλλον δημιουργίας compound module. Αφού ο χρήστης ζωγραφίσει το compound module, πατώντας την επιλογή Source δίπλα από την επιλογή Design, εμφανίζεται ο κώδικας που έχει παραχθεί αυτόματα από το Omnet++. Εικόνα 18. Κώδικας για το mynetwork.ned. 17

Στην εικόνα 18 παρατηρείται ότι στην πρώτη γραμμή αναγράφεται η εντολή network mynetwork. Στην πραγματικότητα, αφού έχει δημιουργηθεί ένα compound module θα πρέπει να αναγράφεται η εντολή module mynetwork. Επειδή όμως, για να εκτελεστεί μια προσομοίωση, θα πρέπει να περιγραφεί ποια οντότητα θα είναι στο υψηλότερο επίπεδο του δικτύου, επιλέγεται στο συγκεκριμένο παράδειγμα το compound module mynetwork, γι' αυτό και γίνεται αλλαγή της εντολής σε network mynetwork. Στο πρώτο μπλοκ εντολών αναγράφεται η λέξη submodules. Αυτό σημαίνει ότι εδώ δηλώνονται instances από τα modules τα οποία θα αποτελέσουν το compound module. Στην συγκεκριμένη προσομοίωσή, έχουν δηλωθεί δύο instances του simple module Sender, όπως φαίνεται και στο γραφικό περιβάλλον. Στο δεύτερο μπλοκ αναγράφεται η λέξη connections. Αυτό σημαίνει ότι εδώ δηλώνονται όλες οι συνδέσεις μεταξύ των πυλών των modules. Στο συγκεκριμένο παράδειγμα ο sender στέλνει πακέτα στον sender1 και αντίστροφα. Επόμενο βήμα είναι να προσδιοριστεί η συμπεριφορά του simple module Sender. Αυτό γίνεται γράφοντας κώδικα C++ στα αρχεία sender.h και sender.cc. Στο αρχείο sender.h δηλώνονται οι μέθοδοι και οι μεταβλητές και στο αρχείο sender.cc υλοποιείται η λειτουργία τους. Παρακάτω επισυνάπτεται το αρχείο sender.h. Εικόνα 19. Αρχείο sender.h. 18

Παρατηρείται ότι έχουν δηλωθεί ως private μεταβλητές, μια μεταβλητή a, όπου είχε δηλωθεί και στο ned αρχείο, μια μεταβλητή τύπου cgate με το όνομα out, και μια μεταβλητή τύπου int με το όνομα counter. Ως protected δηλώνονται οι 3 παρακάτω συναρτήσεις. Η initialize(), όπου εδώ γράφεται ο κώδικας που θα τρέξει μόνο, όταν ξεκινήσει η προσομοίωση. Η handlemessage(cmessage *msg), όπου εδώ γράφεται ο κώδικας που θα τρέξει κάθε φορά που το module θα λάβει ένα μήνυμα. Η finish() όπου εδώ γράφεται ο κώδικας που θα τρέξει μόλις ο χρήστης επιλέξει την επιλογή finish στο γραφικό περιβάλλον της προσομοίωσης. Στην παρακάτω εικόνα παρουσιάζεται ο κώδικας του αρχείου sender.cc για τις 3 συναρτήσεις. Εικόνα 20. Αρχείο sender.cc. Πριν γίνει περιγραφεί του κώδικα των 3 συναρτήσεων, θα εξηγηθεί τι είναι τα self messages. Τα μηνύματα συχνά χρησιμοποιούνται, για να αντιπροσωπεύσουν τα γεγονότα σε μία οντότητα. Είναι ουσιαστικά ένας τρόπος, για να προσομοιωθεί κάθε πότε θα στέλνεται ένα μήνυμα από τον έναν κόμβο στον άλλον. Ένα μήνυμα που χρησιμοποιείται σε τέτοιου είδους σενάρια ονομάζεται self message. Όταν ένα μήνυμα στέλνεται από το ένα module σε ένα άλλο, μπορεί να γίνει κλήση της μεθόδου isselfmessage(), για να καθοριστεί αν είναι self message η όχι. Γενικότερα ένα μήνυμα το οποίο προγραμματίζεται να σταλεί με την μέθοδο scheduleat() είναι self message, ενώ ένα μήνυμα που προγραμματίζεται να σταλεί με την μέθοδο send() δεν είναι self message[12]. 19

Στην συνάρτηση initialize() αρχικοποιούνται οι 3 μεταβλητές που έχουν δηλωθεί και προγραμματίζεται το πρώτο self message τη χρονική στιγμή που θα εκτελεστεί η προσομοίωση. Στη συνάρτηση handlemessage(cmessage *msg), αρχικά γίνεται έλεγχος για το εάν το μήνυμα που έφτασε είναι self message. Σε περίπτωση που είναι αποστέλλεται ένα μήνυμα στην έξοδο του module και προγραμματίζεται το επόμενο self message μετά από 0.01sec από το χρόνο που βρίσκεται εκείνη τη στιγμή η προσομοίωση. Σε περίπτωση που το μήνυμα που έφτασε δεν είναι self message, σημαίνει ότι έφτασε μήνυμα στο module από κάπου αλλού, στο συγκεκριμένο παράδειγμα από τον άλλον Sender, οπότε αυξάνεται ο μετρητής κατά 1 και έπειτα διαγράφεται το μήνυμα που έφτασε. Τέλος στην συνάρτηση finish, η οποία καλείται μόλις ο χρήστης επιθυμεί να διακόψει την προσομοίωση, εκτυπώνεται ο αριθμός των μηνυμάτων που έφτασαν στα 2 modules. Η finish ουσιαστικά είναι μία συνάρτηση, όπου μπορούν να αποθηκευθούν στατιστικά, αφού τελειώσει η προσομοίωσή. Η παρακάτω εικόνα δείχνει πως μοιάζει η προσομοίωση στο γραφικό περιβάλλον. Εικόνα 21. Γραφικό περιβάλλον προσομοίωσης. Τέλος, στην παρακάτω εικόνα αναγράφονται τα αποτελέσματα στην κονσόλα, αφού έχει κληθεί η συνάρτηση finish() μετά από αρκετή ώρα προσομοίωσης. 20

Παρατηρείται πως εκτυπώνεται ο συνολικός αριθμός πακέτων που έφτασαν και στα δύο modules. Εικόνα 22. Αποτελέσματα προσομοίωσης στην κονσόλα. 21

Κεφάλαιο 3: Συνθετικά προφίλ δεδομένων(synthetic benchmarks) Εισαγωγή Για την αξιολόγηση ενός δικτύου εκτιμώντας διάφορες επιλογές που αφορούν ένα μεγάλο εύρος χαρακτηριστικών εισόδου, πρέπει η προσομοίωση του δικτύου να γίνει σε διάφορα σενάρια με χρήση ποικίλων προφίλ δεδομένων, ώστε να προσεγγίζει κατά το δυνατόν περισσότερο τις περιπτώσεις που είναι δυνατόν να απαντηθούν σε ένα πραγματικό δίκτυο. Αυτές οι προσομοιώσεις χρησιμοποιούνται για να καθορίσουν τα χαρακτηριστικά της δύναμης και της καθυστέρησης μιας δοθείσης αρχιτεκτονικής. Τα traffic patterns χωρίζονται είτε σε συνθετικά, είτε σε ρεαλιστικά. Τα συνθετικά traffic patterns είναι γενικά μοντέλα μεταφοράς του μηνύματος στο δίκτυο, ενώ τα ρεαλιστικά traffic patterns αποτελούν ίχνη από πραγματικές εφαρμογές δικτύων. Σε αντίθεση με τα ρεαλιστικά traffic patterns, τα οποία είναι αντιπροσωπευτικά σε συγκεκριμένες εφαρμογές, τα συνθετικά traffic patterns καλύπτουν μια ευρεία κατηγορία από εφαρμογές. Μερικά από τα πολλά συνθετικά traffic patterns είναι το Random, το Neighbor, το Bit-reverse και το Tornado[13]. Random traffic pattern Στο Random traffic pattern κάθε επεξεργαστής(κόμβος) στέλνει μηνύματα σε προορισμούς, οι οποίοι επιλέγονται τυχαία, ανεξάρτητα από τους προηγούμενους προορισμούς. Έτσι κάθε επεξεργαστής(κόμβος) στέλνει μηνύματα σε άλλους κόμβους με ίση πιθανότητα. Ο Random traffic pattern είναι επίσης γνωστός και με την ονομασία Uniform traffic pattern[14]. Εικόνα 23. Random traffic pattern. 22

Neighbor traffic pattern Στο Neighbor traffic pattern κάθε επεξεργαστής(κόμβος) αποστέλλει μηνύματα μόνο σε γειτονικούς επεξεργαστές(κόμβους) στην φυσική τοπολογία των δύο διαστάσεων[15]. Εικόνα 24. Neighbor traffic pattern. Bit-reversal traffic pattern Το Bit-reversal traffic pattern απαιτεί κάθε επεξεργαστής(κόμβος) να στέλνει μηνύματα μόνο στον επεξεργαστή που έχει ανεστραμμένη διεύθυνση σε σχέση με αυτόν της πηγής. Αυτό σημαίνει ότι ο επεξεργαστής με διεύθυνση Χ 1 Χ 2 Χ 3 Χ 4 έχει τη δυνατότητα να αποστέλλει μηνύματα μόνο στον επεξεργαστή με διεύθυνση μνήμης Χ 4 Χ 3 Χ 2 Χ 1 [16]. Ένα παράδειγμα δίνεται στο παρακάτω σχήμα. Εικόνα 25. Bit-reversal traffic pattern. Tornado traffic pattern Το Tornado traffic pattern είναι ένα σταθερό ζεύγος πηγής-προορισμού για κάθε μήνυμα. Ο επεξεργαστής(κόμβος) με συντεταγμένες (x,y), επικοινωνεί με τον επεξεργαστή(κόμβο) με συντεταγμένες [(x+(k/2-1)) mod k, (y+( k/2-1)) mod k], όπου το k αντιπροσωπεύει το μέγεθος του δικτύου και στις δύο διαστάσεις(x,y)[17]. Για παράδειγμα ο κόμβος με συντεταγμένες x=1 και y=1, με βάση τον τύπο, επικοινωνεί με τον επεξεργαστή(κόμβο) με συντεταγμένες x=2 και y=2. 23

Εικόνα 26. Tornado traffic pattern. Υλοποίηση των synthetic benchmarks Τα synthetic benchmarks είναι αλγόριθμοι οι οποίοι καθορίζουν με ποιον τρόπο θα στέλνονται πακέτα από έναν κόμβο(επεξεργαστή) σε έναν άλλο. Στην παρούσα πτυχιακή εργασία υλοποιήθηκαν τα εξής synthetic benchmarks: Bit-reversal και Tornado. Στα επόμενα υποκεφάλαια θα παρουσιαστεί ο κώδικας, καθώς επίσης θα δοθούν σχόλια και εξηγήσεις για τον τρόπο υλοποίησης τους. Υλοποίηση του Bit-reversal traffic pattern Στον Bit-reversal traffic pattern, κάθε κόμβος(επεξεργαστής) στέλνει πακέτα μόνο στον αντίστοιχο κόμβο που έχει ανεστραμμένη διεύθυνση σε σχέση με τον αρχικό. Η λογική που ακολουθείται για την υλοποίηση του αλγορίθμου περιγράφεται παρακάτω. Το δίκτυο που χρησιμοποιήθηκε είναι ένα on-board δίκτυο δακτυλίου το οποίο, αποτελείται από 4 routers και 4 κόμβους ανά router. 24

Εικόνα 27. On-board δίκτυο δακτυλίου(bit-reversal). Αρχικά ανατίθεται σε κάθε κόμβο μια IP διεύθυνση. Αφού η ΙΡ διεύθυνση αφορά τον κάθε κόμβο, η δήλωση της ΙΡ γίνεται στις παραμέτρους του αρχείου node.ned. module node { parameters: string ipaddress; //Δήλωση μεταβλητής για την ΙΡ διεύθυνση @display("i=myimages/processor48;is=n;bgb=352,182,#9898da"); gates: //Πύλες εισόδου-εξόδου του module input in; output out; submodules: traffgen: trafficgenerator { @display("p=84,91"); nodequeue: fifoqueue { @display("p=282,91"); 25

connections: in --> IdealChannel --> traffgen.in; traffgen.out --> IdealChannel --> nodequeue.in; nodequeue.out --> IdealChannel --> out; Έπειτα στο αρχείο PCB.ned γίνεται η ανάθεση ΙΡ για κάθε κόμβο ξεχωριστά. module PCB { @display("bgb=865,552,#438266"); types: channel routerrouterchannel extends DatarateChannel { @display("ls=orange,3,s"); datarate = 5Gbps; delay = 0.000001s; channel noderouterchannel extends DatarateChannel { @display("ls=gainsboro,3,s"); datarate = 1Gbps; delay = 0.000001s; submodules: A: optoelectronicrouter { @display("p=191,135"); node0: node { ipaddress = "00"; //Δήλωση ΙΡ για κάθε κόμβο ξεχωριστά @display("p=90,60"); node8: node { ipaddress = "20"; @display("p=90,324"); node9: node { ipaddress = "21"; @display("p=294,324"); node10: node { ipaddress = "30"; 26

@display("p=90,475"); node11: node { ipaddress = "31"; @display("p=294,475"); node12: node { ipaddress = "22"; @display("p=568,324"); node13: node { ipaddress = "23"; @display("p=772,324"); node14: node { ipaddress = "32"; @display("p=568,475"); node15: node { ipaddress = "33"; @display("p=772,475"); B: optoelectronicrouter { @display("p=191,399"); D: optoelectronicrouter { @display("p=669,399"); connections: node0.out --> noderouterchannel --> A.in++; A.out++ --> noderouterchannel --> node0.in; node2.out --> noderouterchannel --> A.in++; A.out++ --> noderouterchannel --> node2.in; A.out++ --> noderouterchannel --> node3.in; node3.out --> noderouterchannel --> A.in++; A.out++ --> noderouterchannel --> node1.in; node1.out --> noderouterchannel --> A.in++; node6.out --> noderouterchannel --> C.in++; node5.out --> noderouterchannel --> C.in++; C.out++ --> noderouterchannel --> node4.in; 27

C.out++ --> noderouterchannel --> node6.in; C.out++ --> noderouterchannel --> node7.in; C.out++ --> noderouterchannel --> node5.in; node7.out --> noderouterchannel --> C.in++; node4.out --> noderouterchannel --> C.in++; D.out++ --> noderouterchannel --> node12.in; D.out++ --> noderouterchannel --> node14.in; D.out++ --> noderouterchannel --> node15.in; D.out++ --> noderouterchannel --> node13.in; node8.out --> noderouterchannel --> B.in++; node12.out --> noderouterchannel --> D.in++; node9.out --> noderouterchannel --> B.in++; node11.out --> noderouterchannel --> B.in++; B.out++ --> noderouterchannel --> node8.in; B.out++ --> noderouterchannel --> node10.in; B.out++ --> noderouterchannel --> node11.in; B.out++ --> noderouterchannel --> node9.in; node14.out --> noderouterchannel --> D.in++; node13.out --> noderouterchannel --> D.in++; node15.out --> noderouterchannel --> D.in++; node10.out --> noderouterchannel --> B.in++; A.out++ --> AC: routerrouterchannel --> C.in++; C.out++ --> routerrouterchannel --> A.in++; A.out++ --> routerrouterchannel --> B.in++; B.out++ --> routerrouterchannel --> A.in++; B.out++ --> routerrouterchannel --> D.in++; D.out++-->routerRouterChannel-->B.in++; C.out++-->routerRouterChannel-->D.in++; D.out++ --> routerrouterchannel --> C.in++; Τέλος στο αρχείο trafficgenerator.cc και συγκεκριμένα στην συνάρτηση initialize() η οποία καλείται με το που ξεκινήσει η προσομοίωση, ακολουθούνται τα εξής βήματα: Αρχικά ανακτάται και αντιστρέφεται η διεύθυνση ΙΡ κάθε κόμβου. Αυτό γίνεται στο παρακάτω κομμάτι κώδικα. const char *ipforallnodes=this->getparentmodule()->par("ipaddress");//ανάκτηση ΙΡ διεύθυνσης κάθε κόμβου. string ip(ipforallnodes,0,5); string reversedip; 28

for (std::string::reverse_iterator rit=ip.rbegin(); rit!=ip.rend(); ++rit) { reversedip += *rit; //Αντιστροφή και αποθήκευση ΙΡ διεύθυνσης Τελευταίο κομμάτι για την υλοποίηση του αλγορίθμου είναι η σύγκριση της ανεστραμμένης τιμής κάθε κόμβου με τις ΙΡ διευθύνσεις όλων των άλλων, για να βρεθεί ο κόμβος-προορισμός που πρέπει να σταλεί το πακέτο. Αυτό γίνεται με το παρακάτω κομμάτι κώδικα. for(int i=0; i<this->allnodes.getnumnodes(); i++) { string iptocompare(this->allnodes.getnode(i)->getmodule()- >par("ipaddress"),0,5); if((iptocompare == reversedip) && (reversedip[0]!= reversedip[1])) { this->destinationnodeptr = this->allnodes.getnode(i)->getmodule(); destinationrouterptr=check_and_cast<cmodule*>(destinationnodeptr- >gate("out")->getnextgate()->getowner()); scheduleat(simtime(), new cmessage);// schedule at μόνο για τα πακέτα που η ip τους δεν είναι 00,11 κτλ. break; Υλοποίηση του Tornado traffic pattern Για την υλοποίηση του Tornado traffic pattern ακολουθήθηκε παρόμοια λογική με αυτή του Bit-reversal traffic pattern. Όπως ήδη έχει αναφερθεί ο Tornado traffic pattern είναι ένα σταθερό ζεύγος πηγής-προορισμού για κάθε μήνυμα. Η λογική για την υλοποίηση του αλγορίθμου περιγράφεται παρακάτω. Όπως και στον Bit-reversal έτσι και στον Tornado, το δίκτυο που χρησιμοποιήθηκε είναι ένα on-board δίκτυο δακτυλίου το οποίο, αποτελείται από 4 routers και 4 κόμβους ανά router. 29

Εικόνα 28. On-board δίκτυο δακτυλίου(tornado). Αρχικά ορίζονται σε κάθε κόμβο δύο συντεταγμένες, έτσι ώστε κάθε κόμβος να μοιάζει σαν να είναι η θέση ενός δισδιάστατου πίνακα. Αφού οι συντεταγμένες αφορούν τον κόμβο, η δήλωση τους γίνεται στο αρχείο node.ned. module node { parameters: int labelx; // Συντεταγμένη Χ int labely; // Συντεταγμένη Υ @display("i=myimages/processor48;is=n;bgb=352,182,#9898da"); gates: // Πύλες εισόδου-εξόδου του module input in; output out; submodules: traffgen: trafficgenerator { @display("p=84,91"); nodequeue: fifoqueue { @display("p=282,91"); 30

connections: in --> IdealChannel --> traffgen.in; traffgen.out --> IdealChannel --> nodequeue.in; nodequeue.out --> IdealChannel --> out; Έπειτα στο αρχείο PCB.ned γίνεται η ανάθεση συντεταγμένων για κάθε κόμβο ξεχωριστά. module PCB { @display("bgb=865,552,#438266"); types: channel routerrouterchannel extends DatarateChannel { @display("ls=orange,3,s"); datarate = 5Gbps; delay = 0.000001s; channel noderouterchannel extends DatarateChannel { @display("ls=gainsboro,3,s"); datarate = 1Gbps; delay = 0.000001s; submodules: A: optoelectronicrouter { @display("p=191,135"); node0: node { //Ανάθεση συντεταγμένων για κάθε κόμβο. labelx = 0; labely = 0; @display("p=90,60"); node1: node { labelx = 0; labely = 1; @display("p=294,60"); node2: node { labelx = 1; labely = 0; @display("p=90,211"); 31

node3: node { labelx = 1; labely = 1; @display("p=294,211"); node4: node { labelx = 0; labely = 2; @display("p=568,60"); node5: node { labelx = 0; labely = 3; @display("p=772,60"); node6: node { labelx = 1; labely = 2; @display("p=568,211"); node7: node { labelx = 1; labely = 3; @display("p=772,211"); C: optoelectronicrouter { @display("p=669,135"); node8: node { labelx = 2; labely = 0; @display("p=90,324"); node9: node { labelx = 2; labely = 1; @display("p=294,324"); node10: node { 32

labelx = 3; labely = 0; @display("p=90,475"); node11: node { labelx = 3; labely = 1; @display("p=294,475"); node12: node { labelx = 2; labely = 2; @display("p=568,324"); node13: node { labelx = 2; labely = 3; @display("p=772,324"); node14: node { labelx = 3; labely = 2; @display("p=568,475"); node15: node { labelx = 3; labely = 3; @display("p=772,475"); B: optoelectronicrouter { @display("p=191,399"); D: optoelectronicrouter { @display("p=669,399"); connections: node0.out --> noderouterchannel --> A.in++; A.out++ --> noderouterchannel --> node0.in; node2.out --> noderouterchannel --> A.in++; 33

A.out++ --> noderouterchannel --> node2.in; A.out++ --> noderouterchannel --> node3.in; node3.out --> noderouterchannel --> A.in++; A.out++ --> noderouterchannel --> node1.in; node1.out --> noderouterchannel --> A.in++; node6.out --> noderouterchannel --> C.in++; node5.out --> noderouterchannel --> C.in++; C.out++ --> noderouterchannel --> node4.in; C.out++ --> noderouterchannel --> node6.in; C.out++ --> noderouterchannel --> node7.in; C.out++ --> noderouterchannel --> node5.in; node7.out --> noderouterchannel --> C.in++; node4.out --> noderouterchannel --> C.in++; D.out++ --> noderouterchannel --> node12.in; D.out++ --> noderouterchannel --> node14.in; D.out++ --> noderouterchannel --> node15.in; D.out++ --> noderouterchannel --> node13.in; node8.out --> noderouterchannel --> B.in++; node12.out --> noderouterchannel --> D.in++; node9.out --> noderouterchannel --> B.in++; node11.out --> noderouterchannel --> B.in++; B.out++ --> noderouterchannel --> node8.in; B.out++ --> noderouterchannel --> node10.in; B.out++ --> noderouterchannel --> node11.in; B.out++ --> noderouterchannel --> node9.in; node14.out --> noderouterchannel --> D.in++; node13.out --> noderouterchannel --> D.in++; node15.out --> noderouterchannel --> D.in++; node10.out --> noderouterchannel --> B.in++; A.out++ --> AC: routerrouterchannel --> C.in++; C.out++ --> routerrouterchannel --> A.in++; A.out++ --> routerrouterchannel --> B.in++; B.out++ --> routerrouterchannel --> A.in++; B.out++ --> routerrouterchannel --> D.in++; D.out++ --> routerrouterchannel --> B.in++; C.out++ --> routerrouterchannel --> D.in++; D.out++ --> routerrouterchannel --> C.in++; 34

Τέλος στο αρχείο trafficgenerator.cc και συγκεκριμένα στην συνάρτηση initialize() η οποία καλείται με το που ξεκινήσει η προσομοίωση, ακολουθούνται τα εξής βήματα: Αρχικά δηλώνονται οι διαστάσεις του δικτύου που πρόκειται να προσομοιωθεί. Έπειτα ανακτώνται οι συντεταγμένες κάθε κόμβου και υπολογίζεται ο προορισμός του πακέτου σύμφωνα με τον μαθηματικό τύπο του Tornado. Αυτό γίνεται στο παρακάτω κομμάτι κώδικα. const int kx = 4;//Δήλωση διαστάσεων δικτύου const int ky = 4; int labelx = this->getparentmodule()->par("labelx");//ανάκτηση συντεταγμένων κάθε κόμβου. int labely = this->getparentmodule()->par("labely"); int destinationx = 0; int destinationy = 0; destinationx = (labelx + (kx/2-1)) % kx;//υπολογισμός προορισμού πακέτου σύμφωνα με τον τύπο. destinationy = (labely + (ky/2-1)) % ky; Τελευταίο κομμάτι για την υλοποίηση του αλγορίθμου είναι η σύγκριση των συντεταγμένων κάθε κόμβου με τις συντεταγμένες όλων των άλλων κόμβων, για να βρεθεί ο κόμβος-προορισμός που πρέπει να σταλεί το πακέτο. Αυτό γίνεται με το παρακάτω κομμάτι κώδικα: for(int i=0; i<this->allnodes.getnumnodes(); i++) { int labelxforallnodes = this->allnodes.getnode(i)->getmodule()- >par("labelx"); int labelyforallnodes = this->allnodes.getnode(i)->getmodule()- >par("labely"); //Σύγκριση συντεταγμένων κάθε κόμβου με τις συντεταγμένες των υπόλοιπων. if((labelxforallnodes == destinationx) && (labelyforallnodes == destinationy)) { //Ανάθεση προορισμού του πακέτου μετά την εύρεση του κόμβου-προορισμού. this->destinationnodeptr = this->allnodes.getnode(i)->getmodule(); destinationrouterptr=check_and_cast<cmodule*>(destinationnodeptr- >gate("out")->getnextgate()->getowner()); scheduleat(simtime(), new cmessage); break; 35

Κεφάλαιο 4: Τεχνικές μεταγωγής Εισαγωγή Στα δίκτυα υπολογιστών ο όρος δρομολόγηση αναφέρεται στη διαδικασία με την οποία επιλέγεται η διαδρομή μέσα σε ένα δίκτυο πάνω στην οποία θα σταλούν τα δεδομένα. Η δρομολόγηση κατευθύνει το πέρασμα των πακέτων από την πηγή τους προς τον απόλυτο προορισμό τους μέσω ενδιάμεσων κόμβων που ονομάζονται δρομολογητές. Η διαδικασία της δρομολόγησης κατευθύνει τα δεδομένα προωθώντας τα με βάση τους πίνακες δρομολόγησης που βρίσκονται στους δρομολογητές(routers), οι οποίοι διατηρούν μια εγγραφή για την καλύτερη διαδρομή προς διάφορες κατευθύνσεις στο δίκτυο. Κατά συνέπεια η κατασκευή των πινάκων δρομολόγησης με χρήση κατάλληλου αλγόριθμου είναι πολύ σημαντική για αποτελεσματική δρομολόγηση. Οι αλγόριθμοι δρομολόγησης χωρίζονται σε δύο κατηγορίες, τους στατικούς και τους δυναμικούς. Όσον αφορά τους στατικούς αλγόριθμους, αυτοί οι αλγόριθμοι αποφασίζουν στη στιγμή το δρομολόγιο που θα ακολουθήσει το πακέτο, για να πάει στον προορισμό του. Το δρομολόγιο δεν προσαρμόζεται δυναμικά στα διάφορα χαρακτηριστικά του δικτύου. Στη στατική δρομολόγηση εντάσσεται η δρομολόγηση συντομότερης διαδρομής, όπου ο πιο γνωστός αλγόριθμος εύρεσης συντομότερης διαδρομής είναι αυτός του Dijkstra, και η δρομολόγηση πλημμύρας(flooding). Όσον αφορά τους δυναμικούς αλγόριθμους, αυτοί οι αλγόριθμοι, αν μια συγκεκριμένη διαδρομή γίνει μη διαθέσιμη, οι υπάρχοντες κόμβοι πρέπει να αποφασίσουν μια εναλλακτική διαδρομή που θα χρησιμοποιήσουν, για να στείλουν τα δεδομένα στον προορισμό τους. Στη δυναμική δρομολόγηση εντάσσονται οι αλγόριθμοι διανυσμάτων απόστασης, οι οποίοι χρησιμοποιούν τον αλγόριθμο Bellman-Ford, καθώς και οι αλγόριθμοι κατάστασης συνδέσεων. Μεταγωγή είναι μια προσέγγιση για μετάδοση πακέτων σε όλο το δίκτυο. Η μέθοδος μεταγωγής αποφασίζει πως ο μεταγωγέας λαμβάνει, επεξεργάζεται και προωθεί τα πακέτα. Ο μεταγωγέας μπορεί να υποστηρίζει τέσσερις μεθόδους μεταγωγής. Αυτές είναι η Circuit switching (CS), η Store-and-forward (SF) switching, η Virtual cut-through (VCT) switching και τέλος η Wormhole (WH) switching[18]. Στην παρούσα πτυχιακή εργασία υλοποιήθηκε η Virtual cut-through (VCT) switching, η οποία συγκρίθηκε με αντίστοιχα αποτελέσματα που προέκυψαν με χρήση της αρχιτεκτονικής Store-and-forward (SF) switching[19]. 36

Store-and-forward (SF) switching Η Store and forward switching είναι μία τεχνική μεταγωγής, όπου λειτουργεί ως εξής: περιμένει μέχρι ολόκληρο το πακέτο να φτάσει σε έναν σταθμό, προτού το προωθήσει στον επόμενο. Τα μεγάλα πακέτα δικτύων χωρίζονται ονομάζονται "flits"(flow control digits). σε μικρότερα κομμάτια τα οποία Στην τεχνική αυτή το μήνυμα χωρίζεται σε σταθερού μεγέθους πακέτα, όπου κάθε πακέτο αποτελείται από "flits", ξεκινώντας με το "header flit". Κάθε κανάλι περιλαμβάνει μονάδες αποθήκευσης(buffers) εισόδου και εξόδου για ένα ολόκληρο πακέτο. Κάθε πακέτο δρομολογείται μεμονωμένα από την πηγή μέχρι τον τελικό προορισμό του. Ένα βήμα της SF switching ονομάζεται hop. Σε αυτό το βήμα συμπεριλαμβάνεται η αντιγραφή ολόκληρου του πακέτου από μία μονάδα αποθήκευσης(buffer) εξόδου, στην επόμενη μονάδα αποθήκευσης(buffer) εισόδου. Η απόφαση δρομολόγησης λαμβάνεται από κάθε ενδιάμεσο δρομολογητή μόνο, αφού ολόκληρο το πακέτο εισέλθει στην μονάδα αποθήκευσης(buffer) εισόδου. Εικόνα 29. Store-and-forward switching ενός πακέτου a) Η απόφαση δρομολόγησης παίρνεται στον πρώτο δρομολογητή b) Το πακέτο εκτελεί το πρώτο hop στο δεύτερο δρομολογητή αφού έχει αντιγραφεί στον εξωτερικό buffer του πρώτου δρομολογητή. c) Ολόκληρο το πακέτο μετά το δεύτερο hop. 37

Ένα πακέτο μεγέθους Μ για να μεταδοθεί σε απόσταση d διαρκεί t sf =d(t r +(t w +t m )M), όπου d το μήκος του μονοπατιού δρομολόγησης, Μ το μέγεθος του πακέτου(σε flits), t r ο χρόνος απόφασης της δρομολόγησης σε έναν δρομολογητή κατά την δημιουργία ενός μονοπατιού δρομολόγησης(σε δευτερόλεπτα), t w η εσωτερική καθυστέρηση μεταγωγής αφού ο δρομολογητής έχει πάρει την απόφαση δρομολόγησης και το μονοπάτι έχει επιλεχθεί μέσω του δρομολογητή, t m η εσωτερική καθυστέρηση καναλιού του δρομολογητή. Η καθυστέρηση μετάδοσης ενός πακέτου αποτελούμενο από Μ flits ανάμεσα σε δύο γειτονικούς κόμβους είναι Μ*t m δευτερόλεπτα. Σε κάθε δρομολογητή, πρώτα πρέπει να παίρνονται οι αποφάσεις δρομολόγησης και μετά το πακέτο να εκτελεί hops στον επόμενο δρομολογητή, το οποίο παίρνει χρόνο t r +(t w +t m )M, και αυτό επαναλαμβάνεται d φορές[20]. Παρατηρήσεις Αυτός ο τύπος μεταγωγής λαμβάνει ολόκληρο το πακέτο προτού το προωθήσει. Καθώς το πακέτο λαμβάνεται, γίνεται η επεξεργασία του. Αφού ολοκληρωθεί η άφιξη του πακέτου, επιβεβαιώνεται ο προορισμός του, και προωθείται στην κατάλληλη έξοδο. Σημαντικό μειονέκτημα της Store and forward παρουσιάζεται σε μετάδοση από κανάλι αργής μετάδοσης σε κανάλι γρήγορης μετάδοσης. Το πακέτο πρέπει να αποθηκευθεί και να μεταδοθεί μόνο όταν έχει ληφθεί ολόκληρο. Η ανάγκη να εισέλθει στην μονάδα αποθήκευσης(buffer) ολόκληρο το πακέτο κάνει είτε τον σχεδιασμό του δρομολογητή ακριβό και/ή αργό, ή το μέγεθος των πακέτων περιορισμένο. Η καθυστέρηση επικοινωνίας είναι αναλογική του μεγέθους του πακέτου και της απόστασης. Αυτό αναγκάζει τους σχεδιαστές να αναζητούν μικρότερα μονοπάτια δρομολόγησης και να χρησιμοποιούν δίκτυα μικρής διαμέτρου. Αυτή η τεχνική έχει πολλά πλεονεκτήματα, όταν τα μηνύματα είναι μικρά και συχνά, αφού μία μετάδοση απασχολεί το πολύ ένα κανάλι από ολόκληρο το μονοπάτι. Έτσι σε συνθήκες υψηλής κίνησης, τα πακέτα πρέπει να αποθηκεύονται στη μονάδα αποθήκευσης(buffer) αφού το κανάλι εξόδου μπορεί να είναι απασχολημένο. Αφού η κίνηση αυξάνεται, οι πιθανότητες ένα συγκεκριμένο κανάλι να είναι απασχολημένο προφανώς αυξάνονται, και ακόμα και στην τεχνική μεταγωγής cutthrough, μπορεί να χρειάζεται να αποθηκευτούν τα πακέτα στην μονάδα αποθήκευσης(buffer). 38

Virtual cut-through(vct) switching Η Virtual cut-though switching είναι πιο εξελιγμένη και ακριβή σε σύγκριση με την Store and forward. Τα μηνύματα χωρίζονται σε πακέτα και οι δρομολογητές έχουν μονάδες αποθήκευσης(buffers) για ολόκληρο το πακέτο, όπως ακριβώς στην SF switching. Αντί να υπάρχει αναμονή ώστε ολόκληρο το πακέτο να μπει στην μονάδα αποθήκευσης(buffer), το ερχόμενο "header flit" στέλνεται στον επόμενο δρομολογητή, αφού η απόφαση δρομολόγησης έχει παρθεί και το κανάλι εξόδου είναι ελεύθερο. Κάθε επόμενο "flit" εισέρχεται στην μονάδα αποθήκευσης(buffer) κάθε φορά που φτάνει σε έναν δρομολογητή, αλλά επίσης στέλνεται και αμέσως στον επόμενο δρομολογητή, εάν το κανάλι εξόδου είναι ελεύθερο. Στην περίπτωση που ο "header" δεν μπορεί να προχωρήσει, περιμένει στον τωρινό δρομολογητή καθώς και όλα τα "flits" που ακολουθούν, περιμένοντας να ελευθερωθούν τα κανάλια που δεν είναι αδρανή. Σε περίπτωση που δεν υπάρχουν επιπλοκές στη διαδρομή, το πακέτο περνάει αποτελεσματικά από επιτυχείς δρομολογήσεις σαν αλυσίδα από "flits". Όλες οι μονάδες αποθήκευσης(buffers) στο μονοπάτι δρομολόγησης αποκλείονται για άλλες απαιτήσεις της επικοινωνίας. 39

Εικόνα 30. Virtual cut-through switching ενός πακέτου a) O "header flit" έχει μετακινηθεί στον εξωτερικό buffer του πρώτου δρομολογητή b) Ο "header" έχει σταλεί στον δεύτερο δρομολογητή και τα ακολουθούμενα "flits" ακολουθούν το μονοπάτι. c) Μια αλυσίδα από "flits" ακολουθεί τον "header", ο οποίος βρίσκεται σε έναν δρομολογητή, του οποίου ο εξωτερικός buffer είναι κατειλημμένος από κάποια άλλη επικοινωνία. d) Ολόκληρη η αλυσίδα από τα "flits" έχει φτάσει πίσω από τον "header" και ολόκληρο το πακέτο έχει φύγει από τον buffer του πρώτου δρομολογητή ελευθερώνοντας όλα τα προηγούμενα κατειλημμένα κανάλια. e) "Flit" σε σωλήνωση κινούνται προς τον προορισμό. Ένα πακέτο μεγέθους Μ για να μεταδοθεί σε μία απόσταση d παίρνει χρόνο t vct = d(t r +t w +t m )+max(t w, t m )M, όπου d το μήκος του μονοπατιού δρομολόγησης, Μ το μέγεθος του πακέτου(σε flits), t r ο χρόνος απόφασης της δρομολόγησης σε έναν δρομολογητή κατά την δημιουργία ενός μονοπατιού δρομολόγησης(σε δευτερόλεπτα), t w η εσωτερική καθυστέρηση μεταγωγής αφού ο δρομολογητής έχει πάρει την απόφαση δρομολόγησης και το μονοπάτι έχει επιλεχθεί μέσω του δρομολογητή, t m η εσωτερική καθυστέρηση καναλιού του δρομολογητή. Η καθυστέρηση μετάδοσης ενός πακέτου αποτελούμενο από Μ flits ανάμεσα σε δύο γειτονικούς κόμβους είναι Μ*t m δευτερόλεπτα. Υποθέτουμε ότι δεν υπάρχει χρονική καθυστέρηση στην cut-through. Μόνο ο "header" δέχεται κάποια καθυστέρηση δρομολόγησης, όπως και καθυστέρηση μεταγωγής και ενδιάμεσης δρομολόγησης. Μόλις ο "header" φτάσει στον προορισμό του, ο χρόνος της σωλήνωσης των "flits" καθορίζεται από το μέγιστο χρόνο μεταγωγής, καθώς και από την καθυστέρηση της ενδιάμεσης δρομολόγησης. Αυτό συμβαίνει, λόγω της υπόθεσης ότι τα κανάλια έχουν μονάδες αποθήκευσης (buffers) εισόδου και εξόδου. Στην περίπτωση που υπάρχει μόνο μονάδα αποθήκευσης εισόδου, θα είχαμε t w +t m αντί για max(t w, t m ) [20]. Παρατηρήσεις Μόνο ο "header" περιέχει πληροφορίες δρομολόγησης και συνεπώς κάθε "flit" που έρχεται απλά προωθείται στο ίδιο κανάλι που δρομολογήθηκε ο "header". Έτσι η μετάδοση διαφορετικών πακέτων δεν μπορεί να παρεμβάλλεται πάνω από το φυσικό κανάλι. Σημαντικό πλεονέκτημα της Virtual cut through είναι ότι επειδή δεν υπάρχει έλεγχος για σφάλματα σε κάθε πακέτο η μετάδοση είναι πιο γρήγορη σε σχέση με την Store and forward. Πιο συγκεκριμένα η τεχνική αυτή μειώνει την καθυστέρηση μέσω της μεταγωγής και βασίζεται στις συσκευές προορισμού για τον έλεγχο σφαλμάτων. 40