From 0d004dbf0a8e841a3fe3e3587f75338ea0fce118 Mon Sep 17 00:00:00 2001 From: Marius Sandu-Popa Date: Thu, 11 Feb 2010 22:57:58 +0200 Subject: [PATCH] modified test.tex --- report/img/general-arch.png | Bin 0 -> 49718 bytes report/test.tex | 38 ++++++++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 10 deletions(-) create mode 100644 report/img/general-arch.png diff --git a/report/img/general-arch.png b/report/img/general-arch.png new file mode 100644 index 0000000000000000000000000000000000000000..7b245f9c0f9d43d3203896268006c99aa41a2942 GIT binary patch literal 49718 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 literal 0 HcmV?d00001 diff --git a/report/test.tex b/report/test.tex index 448d632..2f8adc3 100644 --- a/report/test.tex +++ b/report/test.tex @@ -1,11 +1,27 @@ -\subsection{The old infrastructure} -We emphasize the disadvantages (not scalable) -\subsection{The new infrastructure} +Figure \ref{genarch} presents a general overview of the old BitTorrent performance testing infrastructure. The infrastructure consists of commodity hard +ware systems running GNU/Linux. Each system uses OpenVZ virtual machine implementation to run multiple virtual systems on the same hardware node. -The new testing infrastructure is implemented as a client-server architecture, in which the -Commander application start the Server application and then acts as a client requesting the Server to start BitTorrent clients. -This system is described in figure \ref{fig:test-arch}.\\ +\begin{figure}[h] +\begin{center} +\includegraphics[width = 6.0in, height = 3.5in]{img/general-arch.png} +\end{center} +\caption{Overall Architecture of BitTorrent Performance Evaluation Infrastructure} +\label{genarh} +\end{figure} + +Each virtual machine contains the basic tools for running and compiling BitTorrent clients. The used clients are instrumented which means that they output status and logging information required for subsequent analysis and result interpretation. As the infrastructure aims to be generic among different client implementations, the addition of a new type of BitTorrent client resumes only at adding the required scripts and instrumentation. + +Communication with the virtual machines is enabled through the use of DNAT and iptables. TC (trafic control) is used for controlling the virtual links between virtual systems. +The old infrastructure also uses for each virtual machine a set of scripts to enable starting, configuration, stopping and result gathering for BitTorrent clients. A test/command system starts a series of clients automatically through the use of a scripted interface. The command system uses SSH to connect to the virtual machines (SSH is installed and communication is enabled through DNAT/iptables) and command the BitTorrent implementations. The SSH connection uses the virtual machine local scripts to configure and start the clients. + +As we can see the old infrastructure relies heavily on the scripted interface and static configurations. Although this works fairly well it has some major drawbacks: it is very hard to maintain and it doesn't scale well. To resolve this issues we proposed a new approach for the interaction between the command system and the virtual machines. + +\subsection{New approach} + +The new testing infrastructure is implemented as a client-server architecture, in which the command system starts a server daemon on the virtual machines and then acts as a client making requests to the server daemon. + +\subsubsection{Communication protocol} The Commander communicates with the Server using the following types of messages: \begin{itemize} @@ -25,8 +41,10 @@ The Commander communicates with the Server using the following types of messages \item ACK PID - contains $''ACK ''$ sent by the server after starting a client, PID is the process id. \item ERROR - contains $"ERROR ``$ sent by the server when the parameters received are incorrect or the BT client can not be started. \end{itemize} -We intend to extend this communication protocol with status messages sent by the Commander to check -the BT client's progress.\\ + +In figure \ref{fig:test-arch} we can see the usual messages exchanged between the command system and server daemon on the virtual machines.\\ + +We intend to extend this communication protocol with status messages sent by the Commander to check the BT client's progress.\\ The messages with information stored in data structures are transmitted serialized using \textit{pickle} module \cite{pickle}, Python's most common method to serialize/deserialize object data. @@ -37,7 +55,7 @@ The messages with information stored in data structures are transmitted serializ \caption{Client-Server architecture for interaction with BitTorrent clients.} \label{fig:test-arch} \end{figure} -\subsection{Commander}\label{sec:comm} +\subsubsection{Commander}\label{sec:comm} \input{test/comm.tex} -\subsection{Server}\label{sec:server} +\subsubsection{Server}\label{sec:server} \input{test/server.tex} \ No newline at end of file -- 2.20.1