Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified Assignment3/ass3.jar
Binary file not shown.
Binary file added Assignment3/doc/maxlevel.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Assignment3/doc/report.pdf
Binary file not shown.
88 changes: 88 additions & 0 deletions Assignment3/doc/report.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
\documentclass[12pt]{article}

\usepackage{amsmath}
\usepackage[hidelinks]{hyperref}
\usepackage{fancyhdr}
\usepackage{color}
\usepackage{titlesec}
\usepackage[pdftex]{graphicx}
\usepackage{datetime}

\pagestyle{fancy}
\fancyhf{}

% custom section
\titlespacing{\section}{0pt}{*2}{0pt}
\titleformat{\section}[runin]
{\normalfont\bfseries}
{\thesection. }
{0pt}
{}[\\]

\begin{document}

\fancyhead[L]
{
\textbf{Distributed Algorithms: Assignment 3 C}\\
Christos Froussios (4322754) \& Quinten Stokkink (4016270)\\
\today
}
\setlength\headheight{0.8in}
\setlength\topmargin{-0.6in}
\setlength\textheight{9.0in}
\setlength\parindent{0pt}

\section{Introduction}
In this report we present the results of our implemenation of Afek \& Gafni's algorithm for election in a completely connected network.
We use a slightly modified version of the algorithm to avoid drowning single processes in so many messages they slow down the
whole algorithm. This involves selecting from the untraversed link pool in a random order and a timeout between trying to capture
the same node successively. Furthermore we demote candidate processes that have been killed and have no outstanding messages
to just an ordinary process.

\section{Methodology}
To test our algorithm we simulated a fully distributed environment by giving each process its own JVM environment.
This is quite costly for the simulating machine, but also far more accurate than testing between two or more
physical machines as every process has access to the exact same capabilities (and delays).
In fact through our tests we found that as the memory footprint nears 4 GB and the amount of threads gets close
to 10,000 our simulating machine starts locking up.

\quad As for our testing methodology we decided to always test the worst case, which occurs when all processes present themselves
as candidate processes and start the algorithm. By testing the worst cases we should see a curve of the runtime
that is in the order of $O(n log(n))$ as advertised by the algorithm. We also simulate message delay with a normal
distribution with mean 15 ms and standard deviation of 5 ms.

\section{Results}
We have run tests for the amounts of processes (which are both candidates and ordinary processes at the same time) of:
1, 10, 20, 30, 50, 80, 100, 130 and 150. For each of these processes we then reported the level it reached and whether
it was elected (to verify correctness). For each of these experiments we also recorded the total time.

\quad The results of the running time experiments are visualized in \autoref{fig:totaltime} and the measurements of the
maximum levels are visualized in \autoref{fig:maxlevel}. We see that the running time does seem to follow an $O(n log(n))$ curve
and that the maximum levels reached seem to follow a linear curve.
Furthermore, \autoref{fig:captures} visualizes the total amount of captures performed in the algorithm versus the amount of
processes. While this series seems to follow a linear curve it suffers from a lot more noise than the other two metrics.

\quad Note that due to our optimization, candidates are only killed once. Therefore it does not make much sense to report on this.

\begin{figure}[h]
\centering
\includegraphics{totaltime.png}
\caption{The total time taken for the algorithm to terminate versus the amount of processes}
\label{fig:totaltime}
\end{figure}

\begin{figure}[p]
\centering
\includegraphics{maxlevel.png}
\caption{The maximum level achieved versus the amount of processes}
\label{fig:maxlevel}
\end{figure}

\begin{figure}[p]
\centering
\includegraphics{totalcapture.png}
\caption{The total amount of captures in the algorithm versus the amount of processes}
\label{fig:captures}
\end{figure}

\end{document}
Binary file added Assignment3/doc/results.xlsx
Binary file not shown.
Binary file added Assignment3/doc/totalcapture.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Assignment3/doc/totaltime.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions Assignment3/experiments/1-1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
1 processes, 1 candidates.
Dispatched work, waiting for setup (PRESS ANYKEY+ENTER TO ABORT)
Workload accepted: starting algorithm (est. time = 0.1 seconds)
Waiting for processes to finish (PRESS ANYKEY+ENTER TO ABORT)
DONE, time taken = 0.211 seconds
1: elected = true, level = 0
15 changes: 15 additions & 0 deletions Assignment3/experiments/10-10.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
10 processes, 10 candidates.
Dispatched work, waiting for setup (PRESS ANYKEY+ENTER TO ABORT) ...
Workload accepted: starting algorithm (est. time = 3.3025850929940463 seconds)
Waiting for processes to finish (PRESS ANYKEY+ENTER TO ABORT) ...
DONE, time taken = 2.181 seconds
1: elected = false, level = 0
2: elected = false, level = 0
3: elected = false, level = 2
4: elected = false, level = 0
5: elected = true, level = 20
6: elected = false, level = 1
7: elected = false, level = 0
8: elected = false, level = 1
9: elected = false, level = 0
10: elected = false, level = 3
105 changes: 105 additions & 0 deletions Assignment3/experiments/100-100.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
100 processes, 100 candidates.
Dispatched work, waiting for setup (PRESS ANYKEY+ENTER TO ABORT) ...
Workload accepted: starting algorithm (est. time = 56.05170185988092 seconds)
Waiting for processes to finish (PRESS ANYKEY+ENTER TO ABORT) ...
DONE, time taken = 54.435 seconds
1: elected = true, level = 427
2: elected = false, level = 0
3: elected = false, level = 0
4: elected = false, level = 0
5: elected = false, level = 0
6: elected = false, level = 0
7: elected = false, level = 0
8: elected = false, level = 0
9: elected = false, level = 0
10: elected = false, level = 0
11: elected = false, level = 0
12: elected = false, level = 1
13: elected = false, level = 0
14: elected = false, level = 0
15: elected = false, level = 0
16: elected = false, level = 0
17: elected = false, level = 0
18: elected = false, level = 0
19: elected = false, level = 0
20: elected = false, level = 0
21: elected = false, level = 0
22: elected = false, level = 10
23: elected = false, level = 0
24: elected = false, level = 2
25: elected = false, level = 0
26: elected = false, level = 1
27: elected = false, level = 12
28: elected = false, level = 0
29: elected = false, level = 39
30: elected = false, level = 0
31: elected = false, level = 0
32: elected = false, level = 0
33: elected = false, level = 0
34: elected = false, level = 0
35: elected = false, level = 0
36: elected = false, level = 21
37: elected = false, level = 0
38: elected = false, level = 5
39: elected = false, level = 2
40: elected = false, level = 0
41: elected = false, level = 3
42: elected = false, level = 0
43: elected = false, level = 0
44: elected = false, level = 0
45: elected = false, level = 0
46: elected = false, level = 0
47: elected = false, level = 2
48: elected = false, level = 14
49: elected = false, level = 2
50: elected = false, level = 0
51: elected = false, level = 0
52: elected = false, level = 0
53: elected = false, level = 1
54: elected = false, level = 4
55: elected = false, level = 7
56: elected = false, level = 1
57: elected = false, level = 5
58: elected = false, level = 0
59: elected = false, level = 0
60: elected = false, level = 2
61: elected = false, level = 0
62: elected = false, level = 0
63: elected = false, level = 9
64: elected = false, level = 0
65: elected = false, level = 2
66: elected = false, level = 2
67: elected = false, level = 2
68: elected = false, level = 0
69: elected = false, level = 0
70: elected = false, level = 0
71: elected = false, level = 1
72: elected = false, level = 25
73: elected = false, level = 0
74: elected = false, level = 0
75: elected = false, level = 0
76: elected = false, level = 0
77: elected = false, level = 0
78: elected = false, level = 0
79: elected = false, level = 12
80: elected = false, level = 0
81: elected = false, level = 1
82: elected = false, level = 1
83: elected = false, level = 6
84: elected = false, level = 0
85: elected = false, level = 6
86: elected = false, level = 5
87: elected = false, level = 0
88: elected = false, level = 144
89: elected = false, level = 6
90: elected = false, level = 0
91: elected = false, level = 0
92: elected = false, level = 0
93: elected = false, level = 11
94: elected = false, level = 8
95: elected = false, level = 3
96: elected = false, level = 9
97: elected = false, level = 0
98: elected = false, level = 0
99: elected = false, level = 0
100: elected = false, level = 4
135 changes: 135 additions & 0 deletions Assignment3/experiments/130-130.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
130 processes, 130 candidates.
Dispatched work, waiting for setup (PRESS ANYKEY+ENTER TO ABORT) ...
Workload accepted: starting algorithm (est. time = 76.27794785592258 seconds)
Waiting for processes to finish (PRESS ANYKEY+ENTER TO ABORT) ...
DONE, time taken = 77.687 seconds
1: elected = false, level = 0
2: elected = false, level = 0
3: elected = false, level = 0
4: elected = false, level = 2
5: elected = false, level = 0
6: elected = false, level = 1
7: elected = false, level = 0
8: elected = false, level = 0
9: elected = false, level = 0
10: elected = false, level = 0
11: elected = false, level = 0
12: elected = false, level = 0
13: elected = false, level = 0
14: elected = false, level = 0
15: elected = false, level = 17
16: elected = false, level = 0
17: elected = false, level = 1
18: elected = false, level = 3
19: elected = false, level = 0
20: elected = false, level = 0
21: elected = false, level = 0
22: elected = false, level = 0
23: elected = false, level = 0
24: elected = false, level = 0
25: elected = false, level = 0
26: elected = false, level = 0
27: elected = false, level = 0
28: elected = false, level = 0
29: elected = false, level = 0
30: elected = false, level = 0
31: elected = false, level = 0
32: elected = false, level = 0
33: elected = false, level = 0
34: elected = false, level = 0
35: elected = false, level = 0
36: elected = false, level = 2
37: elected = false, level = 0
38: elected = false, level = 0
39: elected = false, level = 2
40: elected = false, level = 2
41: elected = false, level = 0
42: elected = false, level = 0
43: elected = false, level = 0
44: elected = false, level = 3
45: elected = false, level = 1
46: elected = false, level = 0
47: elected = false, level = 3
48: elected = false, level = 0
49: elected = false, level = 0
50: elected = false, level = 1
51: elected = false, level = 1
52: elected = false, level = 0
53: elected = false, level = 2
54: elected = false, level = 5
55: elected = false, level = 3
56: elected = false, level = 0
57: elected = false, level = 0
58: elected = false, level = 19
59: elected = false, level = 5
60: elected = false, level = 1
61: elected = false, level = 1
62: elected = false, level = 0
63: elected = false, level = 0
64: elected = false, level = 0
65: elected = false, level = 0
66: elected = false, level = 0
67: elected = false, level = 1
68: elected = false, level = 0
69: elected = false, level = 0
70: elected = false, level = 0
71: elected = false, level = 2
72: elected = false, level = 22
73: elected = false, level = 1
74: elected = false, level = 2
75: elected = false, level = 0
76: elected = false, level = 0
77: elected = false, level = 10
78: elected = false, level = 3
79: elected = false, level = 0
80: elected = false, level = 0
81: elected = false, level = 0
82: elected = false, level = 2
83: elected = false, level = 4
84: elected = false, level = 1
85: elected = false, level = 90
86: elected = false, level = 1
87: elected = false, level = 3
88: elected = false, level = 0
89: elected = false, level = 0
90: elected = false, level = 51
91: elected = false, level = 1
92: elected = false, level = 0
93: elected = false, level = 0
94: elected = false, level = 0
95: elected = false, level = 1
96: elected = false, level = 0
97: elected = false, level = 0
98: elected = false, level = 0
99: elected = false, level = 0
100: elected = false, level = 10
101: elected = false, level = 3
102: elected = false, level = 131
103: elected = false, level = 0
104: elected = true, level = 588
105: elected = false, level = 2
106: elected = false, level = 0
107: elected = false, level = 0
108: elected = false, level = 0
109: elected = false, level = 58
110: elected = false, level = 0
111: elected = false, level = 0
112: elected = false, level = 0
113: elected = false, level = 0
114: elected = false, level = 0
115: elected = false, level = 3
116: elected = false, level = 2
117: elected = false, level = 7
118: elected = false, level = 74
119: elected = false, level = 11
120: elected = false, level = 15
121: elected = false, level = 9
122: elected = false, level = 5
123: elected = false, level = 0
124: elected = false, level = 5
125: elected = false, level = 5
126: elected = false, level = 0
127: elected = false, level = 239
128: elected = false, level = 14
129: elected = false, level = 12
130: elected = false, level = 0
Loading