-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathappendix_experiments.tex
More file actions
86 lines (63 loc) · 3.03 KB
/
Copy pathappendix_experiments.tex
File metadata and controls
86 lines (63 loc) · 3.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
\chapter{Experiments}
This chapter describes the machine specifications and code instances used to run the experiments and evaluations of this report.
\section{Specification}
\label{sec:appendix-specs}
All experiments and instances of SpiDB reported on this dissertation were run on an ASUS X555L quad core Intel(R) Core(TM) i5-5200U CPU @ 2.20GHz, 8gb DDR3 RAM @ 1600 MHz, 64-bit Ubuntu 15.04 machine connected over Ethernet to a 4-chip SpiNN-3 board of September 2011.
The \textit{Memcached} and \textit{Redis} benchmarks were run under such specifications, as well as the transmission rate experiments.
\section{Communication Reliability}
\label{sec:appendix_comm_rel}
\subsection{Sending \& receiving SDP packets}
This section contains code snippets to send SDP packets from single source to single destination with variable delays/waits between them. These were used in the experiments described on section \ref{sec:eval_comm_rel}, using core 2 and 1 of chip 0,0.
C code to send SDP packets with variable delay to a single core:
\begin{lstlisting}[caption={Source}]
void send_sdp_packets(uint32_t number_of_packets, uint32_t delay, uint32_t chip, uint32_t core){
sdp_msg_t msg;
msg.flags = 0x87;
msg.tag = 0;
msg.srce_addr = spin1_get_chip_id();
msg.srce_port = (SDP_PORT << PORT_SHIFT) | spin1_get_core_id();
msg.dest_addr = chip;
msg.dest_port = (SDP_PORT << PORT_SHIFT) | core;
msg.length = sizeof(sdp_hdr_t);
for(uint i = 0; i < number_of_packets; i++){
if(!spin1_send_sdp_msg(&msg, SDP_TIMEOUT)){
log_error("Failed to send");
}
sark_delay_us(delay);
}
}
\end{lstlisting}
C code to log how many SDP packets were successfully received at destination:
\begin{lstlisting}[caption={Destination}]
uint rcv = 0;
void sdp_packet_callback(register uint mailbox, uint port) {
rcv++;
spin1_msg_free((sdp_msg_t*)mailbox);
return;
}
...
spin1_callback_on(SDP_PACKET_RX, sdp_packet_callback, 0);
\end{lstlisting}
\subsection{Storing packets}
The following code snippet (listing \ref{lst:sdp_packet_callback}) describes an efficient way of storing incoming SDP packets, to reduce packet drop, and process them under a lower priority, as discussed in section \ref{sec:eval_comm_rel}.
\lstinputlisting[language=C, caption=Storing incoming packets into a queue, label={lst:sdp_packet_callback}]{code/sdp_packet_callback.c}
\clearpage
\newpage
\subsection{Plot data}
The following table contains data from multiple runs of SpiDB instances with 100,000 \textit{put} operations under different transmission delays, used to produce figure \ref{fig:transmission-delay}.
\vspace{5mm}
\begin{tabular}{ r | r | r }
\textbf{interval ($\mu$s)} & \textbf{packet drop (\%)} & \textbf{performance (ops/sec)} \\
100 & 0.076 & 6175 \\
90 & 0.670 & 6608 \\
80 & 0.475 & 7042 \\
70 & 0.445 & 7408 \\
60 & 0.150 & 8394 \\
50 & 0.265 & 9057 \\
40 & 1.010 & 9882 \\
30 & 11.510 & 9918 \\
20 & 22.910 & 9506 \\
10 & 34.140 & 8960 \\
7 & 33.965 & 9778 \\
4 & 98.432 & 243 \\
\end{tabular}