doc: abstract + architecture
[p2p-kernel-protocol.git] / doc / src / introduction.tex
1
2 \section{Introduction}
3 \label{sec:intro}
4
5 Peer-to-peer protocols currently form the most heavily used protocol class in
6 the Internet, along with BitTorrent, the most popular protocol for content
7 distribution. A high number of studies and investigations have been undertaken
8 to measure, analyse and improve the inner workings of the BitTorrent protocol.
9 However, enhancing the protocols used at the network layer is not the only
10 approach to improving file sharing techniques, but also optimizing the client
11 implementations (P2P applications). As usually these applications are not CPU
12 but rather I/O bound, new research opportunities have appeared in the
13 Operating Systems field.
14
15 This paper aims to improve peer-to-peer technologies by providing a reliable
16 and performing implementation of the SWIFT\cite{swift} multiparty protocol at
17 the kernel level. Basically we developed a new UNIX kernel module that
18 provides the implementation of a completely new protocol, capable of
19 transferring multiple files between multiple peers using a single system call.
20 We are very confident that this approach must improve the performance of P2P
21 file sharing application by reducing the overhead of the kernel context
22 switches caused by multiple system calls.
23
24 Currently, the most efficient implementation of an file content distribution
25 application in an UNIX environment is using the \texttt{sendfile} system call.
26 This implementation uses a zero-copy mechanism that transfers the content of a
27 file from the hard disk to the network interface without passing any data to
28 userspace. Considering these qualifications, we have compared our module's
29 benchmarks with \texttt{sendfile}'s in order to classify the enhancements
30 brought by this implementation.
31
32 The content of this paper is organized as it follows: in the next section we
33 will present some related work on the multiparty topics. In Section
34 \ref{sec:design} we describe how the kernel module was designed to be
35 used in userspace, followed by the actual implementation in Section
36 \ref{sec:implementation}. In the next two sections we will present
37 some performance tests we have conducted along with the results achieved.
38 Finally, in Section \ref{sec:conclusions} we will draw some conclusions
39 followed by the some further work that has to be done.