From a8412268c057908bfd5109a8d9d605aae2375ea1 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Mon, 20 Jun 2016 17:40:28 +0200 Subject: [PATCH] 0.0.2 configure update --- configure.ac | 2 +- doc/paper/bw_in.png | Bin 0 -> 7410 bytes doc/paper/bw_out.png | Bin 0 -> 7580 bytes doc/paper/cpu_balance.png | Bin 0 -> 10992 bytes doc/paper/cpu_usage.png | Bin 0 -> 7434 bytes doc/paper/db_read.png | Bin 0 -> 10963 bytes doc/paper/db_write.png | Bin 0 -> 14074 bytes doc/paper/taler.tex | 82 +++++++++++++++++++++++++++++++++++++- 8 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 doc/paper/bw_in.png create mode 100644 doc/paper/bw_out.png create mode 100644 doc/paper/cpu_balance.png create mode 100644 doc/paper/cpu_usage.png create mode 100644 doc/paper/db_read.png create mode 100644 doc/paper/db_write.png diff --git a/configure.ac b/configure.ac index 494877381..d91072c2a 100644 --- a/configure.ac +++ b/configure.ac @@ -17,7 +17,7 @@ # # AC_PREREQ([2.69]) -AC_INIT([taler-exchange], [0.0.1], [taler-bug@gnunet.org]) +AC_INIT([taler-exchange], [0.0.2], [taler-bug@gnunet.org]) AC_CONFIG_SRCDIR([src/util/util.c]) AC_CONFIG_HEADERS([taler_config.h]) # support for non-recursive builds diff --git a/doc/paper/bw_in.png b/doc/paper/bw_in.png new file mode 100644 index 0000000000000000000000000000000000000000..14d718a04fc9687bb117806be90be1f0f7d98520 GIT binary patch literal 7410 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 literal 0 HcmV?d00001 diff --git a/doc/paper/bw_out.png b/doc/paper/bw_out.png new file mode 100644 index 0000000000000000000000000000000000000000..bcc857c71c81c6aa5665d1f9f36ac7881299bf47 GIT binary patch literal 7580 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 DA{3SZ literal 0 HcmV?d00001 diff --git a/doc/paper/cpu_balance.png b/doc/paper/cpu_balance.png new file mode 100644 index 0000000000000000000000000000000000000000..bb25c1ab321e519abdf3148d6cc8d329ee70359e GIT binary patch literal 10992 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 literal 0 HcmV?d00001 diff --git a/doc/paper/db_read.png b/doc/paper/db_read.png new file mode 100644 index 0000000000000000000000000000000000000000..e67bcfbf17760f847422abe68324255858abc4ec GIT binary patch literal 10963 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 literal 0 HcmV?d00001 diff --git a/doc/paper/taler.tex b/doc/paper/taler.tex index d93cbf9cc..9e10b3937 100644 --- a/doc/paper/taler.tex +++ b/doc/paper/taler.tex @@ -32,6 +32,9 @@ \usetikzlibrary{shapes,arrows} \usetikzlibrary{positioning} \usetikzlibrary{calc} +\usepackage{caption} +\usepackage{subcaption} +\usepackage{subfig} % Relate to: % http://fc14.ifca.ai/papers/fc14_submission_124.pdf @@ -661,7 +664,7 @@ merchant trusts the exchange that issued the coin. Merchants are identified by their public key $M_p = m_s G$ which the customer's wallet learns through the merchant's webpage, which itself must be authenticated with X.509c. -% FIXME: Is this correct? +% FIXME: Is this correct? We now describe the protocol between the customer, merchant, and exchange for a transaction in which the customer spends a coin $C := (c_s, C_p)$ @@ -928,6 +931,83 @@ can then use the refresh protocol to anonymously melt the refunded coin and create a fresh coin that is unlinkable to the refunded transaction. +\section{Experimental results} + +\begin{figure}[b!] + \begin{subfigure}{0.45\columnwidth} + \includegraphics[width=\columnwidth]{bw_in.png} + \caption{Incoming traffic at the exchange, in bytes per 5 minutes.} + \label{fig:in} + \end{subfigure}\hfill + \begin{subfigure}{0.45\columnwidth} + \includegraphics[width=\columnwidth]{bw_out.png} + \caption{Outgoing traffic from the exchange, in bytes per 5 minutes.} + \label{fig:out} + \end{subfigure} + \begin{subfigure}{0.45\columnwidth} + \includegraphics[width=\columnwidth]{db_read.png} + \caption{DB read operations per second.} + \label{fig:read} + \end{subfigure} + \begin{subfigure}{0.45\columnwidth} + \includegraphics[width=\columnwidth]{db_write.png} + \caption{DB write operations per second.} + \label{fig:write} + \end{subfigure} + \begin{subfigure}{0.45\columnwidth} + \includegraphics[width=\columnwidth]{cpu_balance.png} + \caption{CPU credit balance. Hitting a balance of 0 shows the CPU is + the limiting factor.} + \label{fig:cpu} + \end{subfigure}\hfill + \begin{subfigure}{0.45\columnwidth} + \includegraphics[width=\columnwidth]{cpu_usage.png} + \caption{CPU utilization. The t2.micro instance is allowed to use 10\% of + one CPU.} + \label{fig:usage} + \end{subfigure} + \caption{Selected EC2 performance monitors for the experiment in the EC2 + (after several hours, once the system was ``warm'').} + \label{fig:ec2} +\end{figure} + +We ran the Taler exchange v0.0.2 on an Amazon EC2 t2.micro instance +(10\% of a Xeon E5-2676 at 2.4 GHz) based on Ubuntu 14.04.4 LTS, using +a db.t2.micro instance with Postgres 9.5 for the database. Using 16 +concurrent clients performing withdraw, deposit and refresh operations +we then pushed the t2.micro instance to the resource limit +(Figure~\ref{fig:cpu}) from a network with $\approx$ 160 ms latency to +the EC2 instance. At that point, the instance managed about 8 HTTP +requests per second, which roughly corresponds to one full business +transaction (as a full business transaction is expected to involve +withdrawing and depositing several coins). The network traffic was +modest at approximately 50 kbit/sec from the exchange +(Figure~\ref{fig:out}) and 160 kbit/sec to the exchange +(Figure~\ref{fig:in}). At network latencies above 10 ms, the delay +for executing a transaction is dominated by the network latency, as +local processing virtually always takes less than 10 ms. + +Database transactions are dominated by writes (Figure~\ref{fig:read} +vs. Figure~\ref{fig:write}), as Taler mostly needs to log +transactions and occasionally needs to read to guard against +double-spending. Given a database capacity of 2 TB---which should +suffice for more than one year of full transaction logs---the +described setup has a hosting cost within EC2 of approximately USD 252 +per month, or roughly 0.0001 USD per full business transaction. This +compares favorably to the $\approx$ USD 10 per business transaction +for Bitcoin and the \EUR{0.35} plus 1.9\% charged by Paypal for +domestic transfers within Germany. + +In the Amazon EC2 billing, the cost for the database (using SSD +storage) dominates the cost with more than USD 243 per month. We note +that these numbers are approximate, as the frontend and backend in our +configuration uses systems from the AWS Free Usage Tier and is not +perfectly balanced in between frontend and backend. Nevertheless, +these experimental results show that computing-related business costs +will only marginally contribute to the operational costs of the Taler +payment system. + + \section{Discussion}