master-thesis/doc/Results.tex

232 lines
7.1 KiB
TeX
Raw Normal View History

2019-07-29 17:13:47 +00:00
\chapter{\label{results}Results}
%** Results.tex: What were the results achieved including an evaluation
%
2019-08-14 15:23:12 +00:00
This section describes the achieved results and compares the P4 based
implementation with real world software solutions.
We distinguish the software implementation of P4 (BMV2) and the
hardware implementation (NetFPGA) due to significant differences in
deployment and development. We present benchmarks for the existing
software solutions as well as for our hardware implementation. As the
objective of this thesis was to demonstrate the high speed
capabilities of NAT64 in hardware, no benchmarks were performed on the
P4 software implementation.
% ----------------------------------------------------------------------
2019-08-14 15:54:07 +00:00
\section{\label{results:p4}NAT64 Overview}
2019-08-14 15:23:12 +00:00
We successfully implemented P4 code to realise
NAT64\cite{schottelius:thesisrepo}. It contains parsers
for all related protocols (ipv6, ipv4, udp, tcp, icmp, icmp6, ndp,
arp), supports EAMT as defined by RFC7757 \cite{rfc7757} and is
feature equivalent to the two compared software solutions
tayga\cite{lutchansky:_tayga_simpl_nat64_linux} and
jool\cite{mexico:_jool_open_sourc_siit_nat64_linux}.
Due to limitations in the P4 environment of the
NetFPGA\cite{conclusion:netfpga} environment, the BMV2 implementation
is more feature rich. Table \ref{tab:benchmark} summarises the
achieved bandwidths of the NAT64 solutions.
\begin{table}[htbp]
\begin{center}\begin{minipage}{\textwidth}
2019-08-14 15:54:07 +00:00
\begin{tabular}{| c | c | c | c |}
2019-08-14 15:23:12 +00:00
\hline
2019-08-14 15:54:07 +00:00
Solution & \multicolumn{3}{|c|}{Parallel connections} \\
& 1 & 20 & 3 \\
2019-08-14 15:23:12 +00:00
\hline
2019-08-14 15:54:07 +00:00
Tayga & 3.02 & 3.28 & 2.85\\
2019-08-14 15:23:12 +00:00
\hline
2019-08-14 15:54:07 +00:00
Jool & 6.67 & 16.8 ?? & 20.5 udp?\\
2019-08-14 15:23:12 +00:00
\hline
2019-08-14 15:54:07 +00:00
P4 / NetPFGA & 9.28 & 9.29 & 9.29\\
2019-08-14 15:23:12 +00:00
\hline
\end{tabular}
\end{minipage}
2019-08-14 15:54:07 +00:00
\caption{NAT64 Benchmark (IPv6 initiating), all results in Gbit/sec (\%loss)}
\label{tab:benchmarkv6}
2019-08-14 15:23:12 +00:00
\end{center}
\end{table}
During the benchmarks the client
2019-07-29 17:13:47 +00:00
2019-08-14 15:54:07 +00:00
\begin{table}[htbp]
\begin{center}\begin{minipage}{\textwidth}
\begin{tabular}{| c | c | c | c |}
\hline
Solution & \multicolumn{3}{|c|}{Parallel connections} \\
& 1 & 20 & 3 \\
\hline
Tayga & 3.36 & 3.29 & 3.11 \\
\hline
Jool & 8.24 & 8.26 & 8.29\\
\hline
P4 / NetPFGA & 8.43 & 9.29 & 9.29\\
\hline
\end{tabular}
\end{minipage}
\caption{NAT64 Benchmark (IPv4 initiating), all results in Gbit/sec (\%loss)}
\label{tab:benchmarkv4}
\end{center}
\end{table}
2019-07-29 17:13:47 +00:00
2019-08-14 15:23:12 +00:00
% ----------------------------------------------------------------------
2019-07-31 08:50:30 +00:00
\section{\label{Results:BMV2}BMV2}
2019-08-14 15:54:07 +00:00
The software implementation of P4 features most features, which is
mostly due to available externs that can checksum the payload: Acting
as a ``proper'' participant in NDP, requires the host to calculate
checksums over the payload.
2019-08-12 10:13:59 +00:00
Responds to icmp, icmp6
2019-08-12 15:36:43 +00:00
ndp \cite{rfc4861}
2019-07-31 08:50:30 +00:00
arp
test framework openvswitch
2019-08-12 10:13:59 +00:00
Fully functional host
Can compute checksums on its own.
2019-07-31 08:50:30 +00:00
2019-08-12 15:36:43 +00:00
focus on typical use cases of icmp, icmp6, the software implementation
supports translating echo request and echo reply messages, but does
not support all ICMP/ICMP6 translations that are defined in
RFC6145\cite{rfc6145}.
Stateful : no automatic removal
2019-08-14 15:23:12 +00:00
% ----------------------------------------------------------------------
2019-08-12 10:13:59 +00:00
\section{\label{results:tayga}Tayga}
2019-08-14 15:54:07 +00:00
cpu bound, single thread
2019-07-31 08:50:30 +00:00
2019-08-14 15:23:12 +00:00
% ----------------------------------------------------------------------
2019-08-12 10:13:59 +00:00
\section{\label{results:jool}Jool}
2019-07-31 08:50:30 +00:00
2019-08-14 14:18:27 +00:00
% ----------------------------------------------------------------------
2019-08-12 10:13:59 +00:00
\section{\label{Results:NetPFGA}NetFPGA}
2019-08-14 14:18:27 +00:00
\subsection{\label{results:netpfga:checksum}Checksum computation}
\subsection{\label{results:netpfga:general}to be named}
Trace files
\begin{verbatim}
create mode 100644 pcap/tcp-udp-delta-2019-07-17-1555-h1.pcap
create mode 100644 pcap/tcp-udp-delta-2019-07-17-1555-h3.pcap
create mode 100644 pcap/tcp-udp-delta-2019-07-17-1557-h1.pcap
create mode 100644 pcap/tcp-udp-delta-2019-07-17-1558-h3.pcap
\end{verbatim}
\begin{verbatim}
*** DONE 2019-07-21: Proof of v6->v4 working delta based
CLOSED: [2019-07-21 Sun 12:30]
#+BEGIN_CENTER
pcap/tcp-udp-delta-from-v6-2019-07-21-0853-h1.pcap | Bin 0 -> 4252 bytes
pcap/tcp-udp-delta-from-v6-2019-07-21-0853-h3.pcap | Bin 0 -> 2544 bytes
#+END_CENTER
\end{verbatim}
\begin{verbatim}
**** DONE Testing v4->v6 tcp: ok (version 10.0)
CLOSED: [2019-08-04 Sun 09:15]
#+BEGIN_CENTER
nico@ESPRIMO-P956:~/master-thesis/bin$ ./socat-connect-tcp-v4
+ echo from-v4-ok
+ socat - TCP:10.0.0.66:2345
TCPv6-ok
nico@ESPRIMO-P956:~/master-thesis/bin$ ./socat-listen-tcp-v6
from-v4-ok
#+END_CENTER
trace:
netfpga-nat64-2019-08-04-0907-enp2s0f0.pcap
netfpga-nat64-2019-08-04-0907-enp2s0f1.pcap
**** DONE Testing v4->v6 udp: ok (version 10.1)
trace:
create mode 100644 pcap/netfpga-nat64-udp-2019-08-04-0913-enp2s0f0.pcap
create mode 100644 pcap/netfpga-nat64-udp-2019-08-04-0913-enp2s0f1.pcap
\end{verbatim}
\begin{verbatim}
*** DONE 2019-08-04: version 10.1/10.2: new maxpacketregion: v4->v6 works
CLOSED: [2019-08-04 Sun 19:42]
#+BEGIN_CENTER
nico@ESPRIMO-P956:~/master-thesis/bin$ ./init_ipv4_esprimo.sh
nico@ESPRIMO-P956:~/master-thesis/bin$ ./set_ipv4_neighbor.sh
#+END_CENTER
Test 20 first:
- Does't work -> missed to add table entries
- Does work after setting table entries
- 300 works
- 1450 works
- 1500 does not work
Proof:
create mode 100644 pcap/netfpga-10.2-maxpacket-2019-08-04-1931-enp2s0f0.pcap
create mode 100644 pcap/netfpga-10.2-maxpacket-2019-08-04-1931-enp2s0f1.pcap
\end{verbatim}
\begin{verbatim}
*** DONE 2019-08-04: test v6 -> v4: works for 1420
CLOSED: [2019-08-04 Sun 20:30]
Proof:
#+BEGIN_CENTER
create mode 100644 pcap/netfpga-10.2-fromv6tov4-2019-08-04-1943-enp2s0f0.pcap
create mode 100644 pcap/netfpga-10.2-fromv6tov4-2019-08-04-1943-enp2s0f1.pcap
\end{verbatim}
2019-08-12 10:13:59 +00:00
General result: limited NAT64 is working, however
2019-08-01 18:59:21 +00:00
2019-08-12 10:13:59 +00:00
No Payload
checksumming - requires controller
2019-07-31 08:50:30 +00:00
2019-08-12 10:13:59 +00:00
Hash funktion in Arbeit
2019-07-31 08:50:30 +00:00
2019-08-12 10:13:59 +00:00
No NDP, no ARP - focused on key factors of NAT64 translation,
other features can be supported by controller
2019-08-07 13:55:53 +00:00
2019-08-09 12:25:18 +00:00
\section{\label{results:softwarenat64}NAT64 in Software}
Tayga, Jool
tayga: Single threaded
fork:
\begin{verbatim}
| What? | Description | State in P4 | References |
|---------------------+------------------------------------------+-------------------+---------------------------------------------------------------------------------|
| Jool EAMT | Mapping with tables, multiple entries | Supported | https://www.jool.mx/en/eamt.html, https://www.jool.mx/en/run-eam.html, RFC 7757 |
| Jool SIIT | Mapping IPv6 to range of IPv4, one entry | Supported by EAMT | |
\end{verbatim}
2019-08-12 15:36:43 +00:00
\section{\label{results:features}Feature comparison}
speed - sessions - eamt
can act as host
lpm tables
ping
ping6 support
ndp
controller support
\section{todo - FIXME: remove}
2019-08-07 13:55:53 +00:00
\begin{verbatim}
***** Dorth eher detailiertes Drawing
***** Längste Section!
\end{verbatim}