Triton-commits
Threads by month
- ----- 2026 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
March 2012
- 1 participants
- 118 discussions
Triton-private Repository branch, master, updated. 4a747ecc6126e254734f23b0f9df28410cf243f4
by noreply@mcs.anl.gov 07 Mar '12
by noreply@mcs.anl.gov 07 Mar '12
07 Mar '12
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Triton-private Repository".
The branch, master has been updated
via 4a747ecc6126e254734f23b0f9df28410cf243f4 (commit)
from 2721f2b69a1eb2d7df83d43214c9a8545c892a91 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 4a747ecc6126e254734f23b0f9df28410cf243f4
Author: Justin M Wozniak <wozniak(a)mcs.anl.gov>
Date: Wed Mar 7 15:44:20 2012 -0600
Initial concurrency/scale table
-----------------------------------------------------------------------
Summary of changes:
papers/2011/aesop/aesop.bib | 7 +++++++
papers/2011/aesop/context.tex | 27 ++++++++++++++++++++++++---
2 files changed, 31 insertions(+), 3 deletions(-)
Diff of changes:
diff --git a/papers/2011/aesop/aesop.bib b/papers/2011/aesop/aesop.bib
index 582c92e..f0e24e4 100644
--- a/papers/2011/aesop/aesop.bib
+++ b/papers/2011/aesop/aesop.bib
@@ -370,3 +370,10 @@ year = 2008
@Comment publisher = {USENIX Association},
@Comment address = {Berkeley, CA, USA},
+@MISC{Kogge_2008,
+ author = {{Peter Kogge et. al.}},
+ title = {ExaScale Computing Study: {Technology} Challenges in Achieving Exascale
+ Systems},
+ howpublished = {DARPA Information Processing Techniques Office},
+ year = {2008},
+}
diff --git a/papers/2011/aesop/context.tex b/papers/2011/aesop/context.tex
index 7b36df8..cf945af 100644
--- a/papers/2011/aesop/context.tex
+++ b/papers/2011/aesop/context.tex
@@ -64,7 +64,28 @@ each performing multiple simultaneous requests. Each request typically
requires the server to perform $O(10)$ asynchronous disk or network
operations.
-\todo{This might be a good place for a mini plot or table.}
+%% \todo{This might be a good place for a mini plot or table.}
+
+\begin{table}[h]
+ \caption{Representative scale of current file systems}
+ \begin{tabular}{|l|l|r|r|}
+ \hline
+ \textbf{Installation} & \textbf{File system} &
+ \textbf{Servers} & \textbf{CPUs$^\ast$} \\
+ \hline
+ ALCF Intrepid & GPFS, PVFS & $128$ & $160,000$ \\
+ NCCS Spider & Lustre & $672$ & $250,000$ \\
+ Aggressive Strawman~\cite{Kogge_2008} &
+ ? & $\sim 2 \times 10^5$ & $\sim 10^8$ \\
+ \hline
+ \end{tabular} \\ \ \\
+ % \vspace{4mm}
+ $^\ast$In practice, I/O is typically aggregated through a limited
+ number \\ of clients
+\end{table}
+
+%% I spent a lot of time looking for the OST count on the K-computer
+%% but failed. -Justin
\subsection{Motivation: Concurrency in file system services}
@@ -81,7 +102,7 @@ complete, the result is posted to the client.
This file system server algorithm example illustrates that concurrency
arises not only from simultaneous client access, but also from the
-steps required to service each request. Ideally,
+steps required to service each request. Ideally,
programming models should help to manage this concurrency, enhancing
developer productivity. Note that this is a simplified example.
A production quality file system server additionally requires pipelining,
@@ -172,7 +193,7 @@ semantics for correctness.\todo{consistency: relevance?}
Any language feature designed to ease managing asynchronous
devices must take into account the broad array of relevant underlying
-devices and their interface models.
+devices and their interface models.
\todo{are we trying to say that there are many different API
models? Why 'usually in C'? Why contrast non-blocking with event?}
To enable I/O concurrency,
hooks/post-receive
--
Triton-private Repository
1
0
Triton-private Repository branch, master, updated. 2721f2b69a1eb2d7df83d43214c9a8545c892a91
by noreply@mcs.anl.gov 07 Mar '12
by noreply@mcs.anl.gov 07 Mar '12
07 Mar '12
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Triton-private Repository".
The branch, master has been updated
via 2721f2b69a1eb2d7df83d43214c9a8545c892a91 (commit)
from a30454d4d5acd9735652d098b4d59dc38b8eae7a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 2721f2b69a1eb2d7df83d43214c9a8545c892a91
Author: Justin M Wozniak <wozniak(a)mcs.anl.gov>
Date: Wed Mar 7 13:52:54 2012 -0600
Correct email address
-----------------------------------------------------------------------
Summary of changes:
papers/2011/aesop/aesop.tex | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
Diff of changes:
diff --git a/papers/2011/aesop/aesop.tex b/papers/2011/aesop/aesop.tex
index 0be7b9c..d8fc6e4 100644
--- a/papers/2011/aesop/aesop.tex
+++ b/papers/2011/aesop/aesop.tex
@@ -89,7 +89,7 @@ basicstyle=\small
\IEEEauthorblockA{Mathematics and Computer Science Division\\
Argonne National Laboratory\\
Argonne, IL 60439\\
-\{dkimpe,carns,harns,wozniak,lang,rross\}(a)mcs.anl.gov}
+\{dkimpe,carns,harms,wozniak,lang,rross\}(a)mcs.anl.gov}
}
% make the title area
\maketitle
hooks/post-receive
--
Triton-private Repository
1
0
Triton-private Repository branch, master, updated. a30454d4d5acd9735652d098b4d59dc38b8eae7a
by noreply@mcs.anl.gov 07 Mar '12
by noreply@mcs.anl.gov 07 Mar '12
07 Mar '12
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Triton-private Repository".
The branch, master has been updated
via a30454d4d5acd9735652d098b4d59dc38b8eae7a (commit)
from 821a54b0e2760904aca0e36afe34d39b7c8dd9a2 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit a30454d4d5acd9735652d098b4d59dc38b8eae7a
Author: Justin M Wozniak <wozniak(a)mcs.anl.gov>
Date: Wed Mar 7 13:47:25 2012 -0600
New Aesop model diagram
-----------------------------------------------------------------------
Summary of changes:
papers/2011/aesop/model.tex | 8 +-
papers/2011/aesop/stack.pdf | Bin 0 -> 55756 bytes
papers/2011/aesop/stack.svg | 2000 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 2004 insertions(+), 4 deletions(-)
create mode 100644 papers/2011/aesop/stack.pdf
create mode 100644 papers/2011/aesop/stack.svg
Diff of changes:
diff --git a/papers/2011/aesop/model.tex b/papers/2011/aesop/model.tex
index bcf2f1b..4787319 100644
--- a/papers/2011/aesop/model.tex
+++ b/papers/2011/aesop/model.tex
@@ -17,7 +17,7 @@ thread for example).
It is possible to synchronize with pbranches using the {\em pwait} construct.
A pwait is similar to the barrier implicit in many OpenMP directives (such as
parallel for), in that no statements following the pwait will execute unless
-all of the pbranches it encloses have completed.
+all of the pbranches it encloses have completed.
By default, variables in \aesop are shared between pbranches. Marking a
variable as {\em pprivate} gives each pbranch a private shadow copy, initialized
@@ -25,7 +25,7 @@ using the shared instance when the branch is created. \color{red}PHC:
clarify that when you say variables are shared between pbranches by default,
you are only talking about variables declared in the scope containing the
pbranch. Variables actually declared in the pbranch itself are private by
-default.\color{black}
+default.\color{black}
\color{red}PHC: also, if there is a similar notation in any of the other
parallel programming models (openmp or whatever) for shared/private
@@ -121,8 +121,8 @@ happening within the aesop runtime engine.\color{black}
\begin{figure}
%\vskip -0.25in
\centering
- \includegraphics[keepaspectratio,width=0.45\textwidth]{model.pdf}
- \caption{Model of devices, server state, and server code.
+ \includegraphics[keepaspectratio,width=0.48\textwidth]{stack.pdf}
+ \caption{Model of Aesop usage.
\label{fig:model}
}
\end{figure}
diff --git a/papers/2011/aesop/stack.pdf b/papers/2011/aesop/stack.pdf
new file mode 100644
index 0000000..ba06b02
Binary files /dev/null and b/papers/2011/aesop/stack.pdf differ
diff --git a/papers/2011/aesop/stack.svg b/papers/2011/aesop/stack.svg
new file mode 100644
index 0000000..dbcf391
--- /dev/null
+++ b/papers/2011/aesop/stack.svg
@@ -0,0 +1,2000 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1625"
+ height="1160"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.48.2 r9819"
+ sodipodi:docname="stack.svg">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL"
+ style="overflow:visible">
+ <path
+ id="path4855"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL"
+ style="overflow:visible">
+ <path
+ id="path4255"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(-0.8,-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ id="path4142"
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ id="path4124"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-3"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4124-5"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-7"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4124-8"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-2"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4124-4"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-8"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4124-7"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-5"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4124-54"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-0"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4124-89"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-4"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4124-87"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-36"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4124-2"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend-6"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4124-82"
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5177"
+ id="linearGradient5183"
+ x1="1040"
+ y1="647.5"
+ x2="940"
+ y2="527.5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.99477643,-0.11909063,0.10207768,1.1605725,-935.63512,150.25925)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5177-5"
+ id="linearGradient5183-6"
+ x1="1040"
+ y1="647.5"
+ x2="940"
+ y2="527.5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,-113.74536,154.27506)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-7"
+ style="overflow:visible">
+ <path
+ id="path4255-0"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(-0.8,-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-5"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-0"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="527.5"
+ x2="940"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,-133.74534,254.27506)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5244-8"
+ xlink:href="#linearGradient5177-5-7"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-0"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-9"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="527.5"
+ x2="940"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,46.2547,-65.724947)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5936-6"
+ xlink:href="#linearGradient5177-5-7-0"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-7"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-2"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="527.5"
+ x2="940"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,0.90036935,-201.53597)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3171"
+ xlink:href="#linearGradient5177-5-7-0"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="527.5"
+ x2="940"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,46.2547,-264.15015)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3171-6"
+ xlink:href="#linearGradient5177-5-7-0-2"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-2">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-4" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-3" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-1"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-8"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="527.5"
+ x2="940"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,46.2547,-264.15015)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3171-8"
+ xlink:href="#linearGradient5177-5-7-0-0"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-14"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-5"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,71.766512,-59.803692)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5"
+ xlink:href="#linearGradient5177-5-7-0-0"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="527.5"
+ x2="940"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,46.2547,-264.15015)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3171-3"
+ xlink:href="#linearGradient5177-5-7-0-6"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-6">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-67" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-34" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-72"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-23"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-1"
+ xlink:href="#linearGradient5177-5-7-0-0-0"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-0">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-0" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-0" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-2"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-00"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,15.073596,-215.7092)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3293"
+ xlink:href="#linearGradient5177-5-7-0-0-0"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-7"
+ xlink:href="#linearGradient5177-5-7-0-0-3"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-3">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-00" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-7" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-73"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-3"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,15.073596,-215.7092)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3293-9"
+ xlink:href="#linearGradient5177-5-7-0-0-3"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-5"
+ xlink:href="#linearGradient5177-5-7-0-0-9"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-9">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-8" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-06" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-79"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-81"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,15.073596,-215.7092)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3293-2"
+ xlink:href="#linearGradient5177-5-7-0-0-9"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-4"
+ xlink:href="#linearGradient5177-5-7-0-0-34"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-34">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-7" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-1" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-80"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-76"
+ xlink:href="#linearGradient5177-5-7-0-0-36"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-36">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-75" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-14" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-59"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-4"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-2"
+ xlink:href="#linearGradient5177-5-7-0-0-93"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-93">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-6" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-4" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-8"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-21"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-6"
+ xlink:href="#linearGradient5177-5-7-0-0-938"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-938">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-62" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-3" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-29"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-94"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-66"
+ xlink:href="#linearGradient5177-5-7-0-0-39"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-39">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-5" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-8" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-597"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-92"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-12"
+ xlink:href="#linearGradient5177-5-7-0-0-7"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-7">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-1" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-01" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-55"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-06"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-23"
+ xlink:href="#linearGradient5177-5-7-0-0-30"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-30">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-74" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-5" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-71"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-7"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-74"
+ xlink:href="#linearGradient5177-5-7-0-0-5"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-5">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-15" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-9" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-07"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-01"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-664"
+ xlink:href="#linearGradient5177-5-7-0-0-4"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-4">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-07" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-70" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-6"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-1"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-42"
+ xlink:href="#linearGradient5177-5-7-0-0-46"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-46">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-09" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-31" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-62"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-15"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-3"
+ xlink:href="#linearGradient5177-5-7-0-0-51"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-51">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-72" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-17" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-11"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-33"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,29.246824,-357.44148)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3293-8"
+ xlink:href="#linearGradient5177-5-7-0-0-51"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-44"
+ xlink:href="#linearGradient5177-5-7-0-0-1"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-1">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-4" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-54" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-716"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-09"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,29.246824,-357.44148)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3293-1"
+ xlink:href="#linearGradient5177-5-7-0-0-1"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-0"
+ xlink:href="#linearGradient5177-5-7-0-0-94"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-94">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-80" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-30" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-3"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-014"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,-55.792546,-371.61471)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3293-66"
+ xlink:href="#linearGradient5177-5-7-0-0-94"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-71"
+ xlink:href="#linearGradient5177-5-7-0-0-2"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-2">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-87" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-74" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-68"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-16"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-443"
+ xlink:href="#linearGradient5177-5-7-0-0-96"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-96">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-60" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-02" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-687"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-54"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-59"
+ xlink:href="#linearGradient5177-5-7-0-0-342"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-342">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-13" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-6" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-25"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-35"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-53"
+ xlink:href="#linearGradient5177-5-7-0-0-6"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-6">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-89" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-47" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-4"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-13"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-51"
+ xlink:href="#linearGradient5177-5-7-0-0-466"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-466">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-10" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-46" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-65"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-37"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-20"
+ xlink:href="#linearGradient5177-5-7-0-0-49"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-49">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-77" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-52" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-63"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-43"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-33"
+ xlink:href="#linearGradient5177-5-7-0-0-07"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-07">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-9" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-84" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-45"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-36"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ <linearGradient
+ y2="507.75555"
+ x2="913.00281"
+ y1="647.5"
+ x1="1040"
+ gradientTransform="matrix(0.99477643,-0.10207768,0.10207768,0.99477643,117.12084,-122.41787)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient3211-5-596"
+ xlink:href="#linearGradient5177-5-7-0-0-461"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5177-5-7-0-0-461">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop5179-4-5-6-6-85" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5181-3-4-7-1-63" />
+ </linearGradient>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-82"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4855-45"
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+ transform="scale(0.8,0.8)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.6253155"
+ inkscape:cx="1260.4791"
+ inkscape:cy="468.32395"
+ inkscape:document-units="px"
+ inkscape:current-layer="g3346"
+ showgrid="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1176"
+ inkscape:window-x="0"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:snap-grids="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3067"
+ empspacing="5"
+ visible="true"
+ enabled="true"
+ snapvisiblegridlinesonly="true"
+ dotted="true"
+ units="cm"
+ spacingx="0.01cm"
+ spacingy="0.01cm"
+ empcolor="#c9c9d2"
+ empopacity="0.25098039" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(42.5,62.637817)">
+ <rect
+ style="fill:#fcfcfc;fill-opacity:1;stroke:#000000;stroke-width:3.17159414;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3.17159461, 3.17159461;stroke-dashoffset:0"
+ id="rect5533"
+ width="1600"
+ height="376.22046"
+ x="-27.854328"
+ y="407.75592"
+ rx="43.243244"
+ ry="14.887338" />
+ <rect
+ style="fill:#fcfcfc;fill-opacity:1;stroke:#000000;stroke-width:2.31244493;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2.31244524, 2.31244524;stroke-dashoffset:0"
+ id="rect5533-7"
+ width="1600"
+ height="200"
+ x="-27.854328"
+ y="883.97638"
+ rx="43.243244"
+ ry="7.914156" />
+ <g
+ id="g3260"
+ transform="translate(54.645669,326.61418)">
+ <rect
+ ry="33.33334"
+ rx="40"
+ y="497.36218"
+ x="-2.5"
+ height="100"
+ width="320"
+ id="rect3069-3"
+ style="fill:#b0d9ff;fill-opacity:1;stroke:#0273c8;stroke-width:10.95445251;stroke-linecap:round;stroke-miterlimit:3.9000001;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-6"
+ y="537.36218"
+ x="157.5"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ id="tspan3240"
+ y="537.36218"
+ x="157.5"
+ sodipodi:role="line">network</tspan><tspan
+ y="582.36218"
+ x="157.5"
+ sodipodi:role="line"
+ id="tspan3979">interfaces</tspan></text>
+ </g>
+ <g
+ id="g3296"
+ transform="translate(-285.35433,446.61418)">
+ <rect
+ ry="33.33334"
+ rx="40"
+ y="377.36218"
+ x="717.5"
+ height="100"
+ width="320"
+ id="rect3069-3-8-4-6"
+ style="fill:#ffec56;fill-opacity:1;stroke:#848500;stroke-width:10.95445251;stroke-linecap:round;stroke-miterlimit:3.9000001;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2"
+ y="443.03146"
+ x="877.81494"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="443.03146"
+ x="877.81494"
+ sodipodi:role="line"
+ id="tspan3304">clock</tspan></text>
+ </g>
+ <g
+ id="g3352"
+ transform="translate(-325.35433,366.61418)">
+ <rect
+ ry="33.33334"
+ rx="40"
+ y="457.36218"
+ x="1517.5"
+ height="100"
+ width="320"
+ id="rect3069-3-8-4-6-0"
+ style="fill:#9bf176;fill-opacity:1;stroke:#00a017;stroke-width:10.95445251;stroke-linecap:round;stroke-miterlimit:3.9000001;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-9"
+ y="497.36218"
+ x="1677.5"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ id="tspan2999-9-5-2"
+ y="497.36218"
+ x="1677.5"
+ sodipodi:role="line">asynchronous</tspan><tspan
+ y="542.36218"
+ x="1677.5"
+ sodipodi:role="line"
+ id="tspan3340">DB queries</tspan></text>
+ </g>
+ <g
+ id="g3346"
+ transform="translate(-221.25984,232.44095)">
+ <rect
+ inkscape:transform-center-y="83.33334"
+ inkscape:transform-center-x="-80"
+ ry="33.33334"
+ rx="40"
+ y="591.53546"
+ x="1033.4056"
+ height="100"
+ width="320"
+ id="rect3069-3-8-4-6-0-4-7"
+ style="fill:#ff8a64;fill-opacity:1;stroke:#c60903;stroke-width:10.95445251;stroke-linecap:round;stroke-miterlimit:3.9000001;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-9-8"
+ y="631.53546"
+ x="1193.4055"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ id="tspan2989-6-0-0-3"
+ y="631.53546"
+ x="1193.4055"
+ sodipodi:role="line">asynchronous</tspan><tspan
+ id="tspan2999-9-5-2-8"
+ y="676.53546"
+ x="1193.4055"
+ sodipodi:role="line">I/O</tspan></text>
+ </g>
+ <path
+ style="fill:url(#linearGradient5183);fill-opacity:1;stroke:#000000;stroke-width:2.16024685;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#TriangleOutL);display:inline"
+ d="m 223.95669,550.52754 56.69292,0"
+ id="path4299"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="792.14569"
+ y="983.97638"
+ id="text3983"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3985"
+ x="792.14569"
+ y="983.97638"
+ style="text-align:center;text-anchor:middle">System interfaces</tspan><tspan
+ sodipodi:role="line"
+ x="792.14569"
+ y="1033.9764"
+ id="tspan3989"
+ style="text-align:center;text-anchor:middle">(exposed by Aesop functions)</tspan><tspan
+ sodipodi:role="line"
+ x="792.14569"
+ y="1083.9764"
+ id="tspan3987" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7"
+ y="564.70081"
+ x="119.75189"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="564.70081"
+ x="124.74408"
+ sodipodi:role="line"
+ id="tspan4293-3"
+ style="font-weight:bold">{ state:1 } </tspan><tspan
+ y="609.70081"
+ x="119.75189"
+ sodipodi:role="line"
+ id="tspan4295-5" /></text>
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4018"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"><flowRegion
+ id="flowRegion4020"><rect
+ id="rect4022"
+ width="78.360443"
+ height="95.951561"
+ x="180.70877"
+ y="327.13431" /></flowRegion><flowPara
+ id="flowPara4024" /></flowRoot> <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7-0"
+ y="564.70081"
+ x="389.04324"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="564.70081"
+ x="394.03543"
+ sodipodi:role="line"
+ id="tspan4293-3-0"
+ style="font-weight:bold">{ state:2 } </tspan><tspan
+ y="609.70081"
+ x="389.04324"
+ sodipodi:role="line"
+ id="tspan4295-5-0" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7-5"
+ y="479.97638"
+ x="747.1535"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="479.97638"
+ x="752.14569"
+ sodipodi:role="line"
+ id="tspan4293-3-4"
+ style="font-weight:bold">{ state:3[0] } </tspan><tspan
+ y="524.97638"
+ x="747.1535"
+ sodipodi:role="line"
+ id="tspan4295-5-1" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7-4"
+ y="559.97638"
+ x="747.1535"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="559.97638"
+ x="752.14569"
+ sodipodi:role="line"
+ id="tspan4293-3-1"
+ style="font-weight:bold">{ state:3[1] } </tspan><tspan
+ y="604.97638"
+ x="747.1535"
+ sodipodi:role="line"
+ id="tspan4295-5-7" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7-2"
+ y="639.97638"
+ x="747.1535"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="639.97638"
+ x="752.14569"
+ sodipodi:role="line"
+ id="tspan4293-3-03"
+ style="font-weight:bold">{ state:3[2] } </tspan><tspan
+ y="684.97638"
+ x="747.1535"
+ sodipodi:role="line"
+ id="tspan4295-5-2" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7-49"
+ y="564.70081"
+ x="1026.8385"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="564.70081"
+ x="1031.8307"
+ sodipodi:role="line"
+ id="tspan4293-3-8"
+ style="font-weight:bold">{ state:4 } </tspan><tspan
+ y="609.70081"
+ x="1026.8385"
+ sodipodi:role="line"
+ id="tspan4295-5-19" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7-3"
+ y="499.97638"
+ x="1387.1534"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="499.97638"
+ x="1392.1456"
+ sodipodi:role="line"
+ id="tspan4293-3-9"
+ style="font-weight:bold">{ state:5a } </tspan><tspan
+ y="544.97638"
+ x="1387.1534"
+ sodipodi:role="line"
+ id="tspan4295-5-5" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7-9"
+ y="619.97638"
+ x="1387.1534"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="619.97638"
+ x="1392.1456"
+ sodipodi:role="line"
+ id="tspan4293-3-10"
+ style="font-weight:bold">{ state:5b } </tspan><tspan
+ y="664.97638"
+ x="1387.1534"
+ sodipodi:role="line"
+ id="tspan4295-5-3" /></text>
+ <path
+ style="fill:url(#linearGradient3171);fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#TriangleOutL);display:inline"
+ d="M 861.75197,621.39369 918.44488,578.874"
+ id="path4299-7-2-0"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:url(#linearGradient3211-5);fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#TriangleOutL);display:inline"
+ d="m 861.75197,479.6614 56.69291,42.51969"
+ id="path4299-7-2-0-0"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:url(#linearGradient3293);fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#TriangleOutL);display:inline"
+ d="m 861.75197,550.52754 56.69291,0"
+ id="path4299-7-2-0-0-8"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:url(#linearGradient3293-9);fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#TriangleOutL);display:inline"
+ d="m 479.0748,550.52754 141.73229,56.69292"
+ id="path4299-7-2-0-0-80"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:url(#linearGradient3293-2);fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#TriangleOutL);display:inline"
+ d="m 479.0748,550.52754 141.73229,0"
+ id="path4299-7-2-0-0-1"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:url(#linearGradient3293-8);fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#TriangleOutL);display:inline"
+ d="m 1116.87,564.70077 155.9055,28.34646"
+ id="path4299-7-2-0-0-17"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:url(#linearGradient3293-1);fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#TriangleOutL);display:inline"
+ d="m 1116.87,536.35432 155.9055,-28.34646"
+ id="path4299-7-2-0-0-4"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:url(#linearGradient3293-66);fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#TriangleOutL);display:inline"
+ d="M 479.0748,550.52754 620.80709,479.6614"
+ id="path4299-7-2-0-0-47"
+ inkscape:connector-type="polyline"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="790.88586"
+ y="705.39368"
+ id="text3983-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3985-7"
+ x="790.88586"
+ y="705.39368"
+ style="text-align:center;text-anchor:middle">Poll-compatible states and transitions</tspan><tspan
+ sodipodi:role="line"
+ x="790.88586"
+ y="755.39368"
+ id="tspan3989-7"
+ style="text-align:center;text-anchor:middle">(generated by Aesop compiler)</tspan><tspan
+ sodipodi:role="line"
+ x="790.88586"
+ y="805.39368"
+ id="tspan3987-5" /></text>
+ <rect
+ style="fill:#fcfcfc;fill-opacity:1;stroke:#000000;stroke-width:3.37171936;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:3.37171988, 3.37171988;stroke-dashoffset:0"
+ id="rect5533-1"
+ width="1600"
+ height="425.19687"
+ x="-28.326771"
+ y="-50.669312"
+ rx="43.243244"
+ ry="16.825371" />
+ <text
+ xml:space="preserve"
+ style="font-size:40.75279617px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="31.19434"
+ y="5.9123359"
+ id="text3844"
+ sodipodi:linespacing="125%"
+ transform="scale(0.98152775,1.0188199)"><tspan
+ sodipodi:role="line"
+ id="tspan3846"
+ x="31.19434"
+ y="5.9123359"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"><tspan
+ style="font-weight:bold"
+ id="tspan3982">aesop service_function</tspan>() { </tspan><tspan
+ sodipodi:role="line"
+ x="31.19434"
+ y="50.912338"
+ id="tspan3848"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"> char data[MAX]; </tspan><tspan
+ sodipodi:role="line"
+ x="31.19434"
+ y="95.912338"
+ id="tspan3850"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"><tspan
+ style="font-weight:bold"
+ id="tspan4004"> network_operation</tspan>();</tspan><tspan
+ sodipodi:role="line"
+ x="31.19434"
+ y="140.91232"
+ id="tspan3852"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"> for ( ... ) { </tspan><tspan
+ sodipodi:role="line"
+ x="31.19434"
+ y="185.91232"
+ id="tspan3854"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"><tspan
+ style="font-weight:bold"
+ id="tspan4002"> disk_operation</tspan>();</tspan><tspan
+ sodipodi:role="line"
+ x="31.19434"
+ y="230.91234"
+ id="tspan3856"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"> }</tspan><tspan
+ sodipodi:role="line"
+ x="31.19434"
+ y="275.91235"
+ id="tspan3858"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"> if (<tspan
+ style="font-weight:bold"
+ id="tspan4000">db_operation</tspan>()) { ... } </tspan><tspan
+ sodipodi:role="line"
+ x="31.19434"
+ y="320.91235"
+ id="tspan3860"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"> else { ... } </tspan></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7-37"
+ y="48.543289"
+ x="829.67316"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="48.543289"
+ x="834.66534"
+ sodipodi:role="line"
+ id="tspan4293-3-3"
+ style="font-weight:bold">{ state:1 } </tspan><tspan
+ y="93.543289"
+ x="829.67316"
+ sodipodi:role="line"
+ id="tspan4295-5-4" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7-0-6"
+ y="133.58264"
+ x="829.67316"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="133.58264"
+ x="834.66534"
+ sodipodi:role="line"
+ id="tspan4293-3-0-4"
+ style="font-weight:bold">{ state:2 } </tspan><tspan
+ y="178.58264"
+ x="829.67316"
+ sodipodi:role="line"
+ id="tspan4295-5-0-4" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7-5-3"
+ y="190.27557"
+ x="829.67316"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="190.27557"
+ x="834.66534"
+ sodipodi:role="line"
+ id="tspan4293-3-4-7"
+ style="font-weight:bold">{ state:3[] } </tspan><tspan
+ y="235.27557"
+ x="829.67316"
+ sodipodi:role="line"
+ id="tspan4295-5-1-7" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7-5-3-5"
+ y="246.96849"
+ x="829.67316"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="246.96849"
+ x="834.66534"
+ sodipodi:role="line"
+ id="tspan4293-3-4-7-7"
+ style="font-weight:bold">{ state:4 } </tspan><tspan
+ y="291.96851"
+ x="829.67316"
+ sodipodi:role="line"
+ id="tspan4295-5-1-7-5" /></text>
+ <text
+ sodipodi:linespacing="125%"
+ id="text2985-5-2-8-5-7-3-7"
+ y="303.66141"
+ x="829.67316"
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
+ xml:space="preserve"><tspan
+ y="303.66141"
+ x="834.66534"
+ sodipodi:role="line"
+ id="tspan4293-3-9-7"
+ style="font-weight:bold">{ state:5a,b } </tspan><tspan
+ y="348.66141"
+ x="829.67316"
+ sodipodi:role="line"
+ id="tspan4295-5-5-7" /></text>
+ <text
+ xml:space="preserve"
+ style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+ x="990.57092"
+ y="91.062973"
+ id="text3983-3-8"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ x="990.57092"
+ y="91.062973"
+ id="tspan3987-5-3">Non-blocking operations </tspan><tspan
+ sodipodi:role="line"
+ x="990.57092"
+ y="141.06297"
+ id="tspan4042">(shown in bold) and </tspan><tspan
+ sodipodi:role="line"
+ x="990.57092"
+ y="191.06297"
+ id="tspan4048">service code logic (states)</tspan><tspan
+ sodipodi:role="line"
+ x="990.57092"
+ y="241.06297"
+ id="tspan4044">expressed as sequential </tspan><tspan
+ sodipodi:role="line"
+ x="990.57092"
+ y="291.06299"
+ id="tspan4040">control flow </tspan></text>
+ </g>
+</svg>
hooks/post-receive
--
Triton-private Repository
1
0
Triton-private Repository branch, master, updated. 821a54b0e2760904aca0e36afe34d39b7c8dd9a2
by noreply@mcs.anl.gov 06 Mar '12
by noreply@mcs.anl.gov 06 Mar '12
06 Mar '12
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Triton-private Repository".
The branch, master has been updated
via 821a54b0e2760904aca0e36afe34d39b7c8dd9a2 (commit)
from 3ffb1fe0055290b33a8358fc93985d37ed029fda (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 821a54b0e2760904aca0e36afe34d39b7c8dd9a2
Author: Kevin Harms <harms(a)alcf.anl.gov>
Date: Tue Mar 6 23:46:38 2012 -0600
aesop paper: change eval to use op/sec graphs types, update productivity section to have an example of adding timeout/cancel.
-----------------------------------------------------------------------
Summary of changes:
papers/2011/aesop/aesop.tex | 2 +-
papers/2011/aesop/evaluation.tex | 194 ++++++++++++++------------------------
2 files changed, 71 insertions(+), 125 deletions(-)
Diff of changes:
diff --git a/papers/2011/aesop/aesop.tex b/papers/2011/aesop/aesop.tex
index 943fa49..0be7b9c 100644
--- a/papers/2011/aesop/aesop.tex
+++ b/papers/2011/aesop/aesop.tex
@@ -10,7 +10,7 @@
\usepackage{subfig}
\usepackage{xspace}
\usepackage[textsize=footnotesize]{todonotes}
-
+\usepackage{comment}
\graphicspath{{./}}
\DeclareGraphicsExtensions{.pdf,.jpeg,.png}
diff --git a/papers/2011/aesop/evaluation.tex b/papers/2011/aesop/evaluation.tex
index c8210ce..916648b 100644
--- a/papers/2011/aesop/evaluation.tex
+++ b/papers/2011/aesop/evaluation.tex
@@ -1,10 +1,7 @@
\label{section:evaluation}
In this paper we evaluate Aesop based on three criteria, runtime efficiency,
-memory efficiency and progammer productivity. All graphs presented in the
-following section are in log scale.
-
-%TODO: Try switching runtime graphs to ops/second instead of time and update text to reference op/sec counts.
+memory efficiency and progammer productivity.
\subsection{Experiment}
@@ -181,9 +178,10 @@ in thread-per-client and thread-per-client-nb).
Figure~\ref{fig:read} shows the results of the read experiment.
Aesop performs more favorably at small scale for this workload than in the
previously shown write workload. At the largest scale, Aesop completes the
-test in 48.3 seconds verses 46.1 seconds for the fastest server (thread-pool).
+test with 339 ops/sec verses 354 ops/sec for the fastest server (thread-pool),
+which is a 4.5% difference.
The event server performs particularly poorly in all cases, ultimately
-running the largest scale test in 77.2 seconds.
+running the largest scale test with only 212 ops/sec.
The small scale results for Aesop may indicate that additional tuning
is needed to improve latency for small test runs. The issue is likely
@@ -219,20 +217,20 @@ fundamental programming language problem.
\begin{figure*}[ht]
\centering
\subfloat[Read performance]{
- \includegraphics[keepaspectratio,width=0.45\textwidth]{fig/read-hist.pdf}
+ \includegraphics[keepaspectratio,width=0.45\textwidth]{fig/read-ops.pdf}
\label{fig:read}
}
\subfloat[Write performance]{
- \includegraphics[keepaspectratio,width=0.45\textwidth]{fig/write-hist.pdf}
+ \includegraphics[keepaspectratio,width=0.45\textwidth]{fig/write-ops.pdf}
\label{fig:write}
}
\subfloat[Read-null performance]{
- \includegraphics[keepaspectratio,width=0.45\textwidth]{fig/read-null-hist.pdf}
+ \includegraphics[keepaspectratio,width=0.45\textwidth]{fig/read-null-ops.pdf}
\label{fig:readnull}
}
\subfloat[Write-null performance]{
- \includegraphics[keepaspectratio,width=0.45\textwidth]{fig/write-null-hist.pdf}
+ \includegraphics[keepaspectratio,width=0.45\textwidth]{fig/write-null-ops.pdf}
\label{fig:writenull}
}
\caption{Runtime performance for four test cases}
@@ -310,6 +308,8 @@ event & 28 & 23 & 341 \\
\vspace{-.2in}
\end{table}
+\subsubsection{Quantitative}
+
Table~\ref{tab:complexity} compares the code complexity of each server
implemenation using McCabe Cyclomatic Complexity (CC) \cite{mccabe},
Modified McCabe Cyclomatic Complexity (mod. CC), and
@@ -336,138 +336,84 @@ operation requires 5 disconnected event handlers. So although the event
model appears less complex according to CC and mod. CC, qualitatively it is
significantly more challenging to develop.
+\color{blue}
+\subsubsection{Qualitative}
+
+\begin{comment}
+The aesop code (listing~\ref{lst:aesop}) strongly resembles a threaded code.
+Instead of creating a thread, a lonely pbranch is used to make sure new
+connections can be accepted even though the previous connection is still being
+processed. To avoid name collisions, the \code{accept}, \code{read} and
+\code{write} functions are prefixed, but this is not required by the aesop
+language. The \code{handleConnection} function differs in that
+the function declaration is proceeded by the \code{__blocking} keyword. The
+\code{accept}, \code{read} and \code{write} functions are provided by the
+aesop `socket' resource. While the aesop code, like a threaded version,
+preserves linear control flow, the C code generated by the aesop compiler
+actually resembles the event based code. As such, a single thread suffices to
+handle multiple connections concurrently.
+\end{comment}
+
The example discussed in this section is very simple and differs from real
world code by the absence of error handling, timeout handling and request
-throttling. In aesop, these concepts can easily be added without complication
-the request logic. For example, a timeout can be implemented by adding a
+throttling. As an example, a timeout can be easily implemented by adding a
\code{pbranch} starting a timer which cancels the original \code{pbranch} once
-the timeout is reached. Listing~\ref{lst:timeout} shows an example. The same
-effect is not easily achieved using the event or threaded models, since
-neither model offers any help in cancelling an outstanding call.
+the timeout is reached. The original \code{handleConnection pbranch} will
+also cancel the timer when it completes. Listing~\ref{lst:aesop} shows a
+simple server design written in aesop which uses a \code{lonely pbranch} to
+allow accepting new connections while the previous connection is being
+processed. The server processes a single request from the client and
+disconnects. Listing~\ref{lst:timeout} demonstrates how to add timeout
+handling to the client processing. The same effect is not easily achieved
+using the event or threaded models, since neither model offers any help
+in cancelling an outstanding call.
-\color{red}
-
-%TODO Possibly update this so that it illustrates just the aesop code and how cancellation is added.
-
-\begin{figure}[t]
+\begin{figure*}[ht]
\center
-\begin{minipage}[b]{.47\textwidth}
-\begin{lstlisting}[caption=Threaded code: accept loop.,
- label=lst:threaded]
-while (1) {
- fd = accept (sock);
- createThread (handleConnection, fd);
-}
-\end{lstlisting}
-\end{minipage}
-\hfill
-\begin{minipage}[b]{.47\textwidth}
-\begin{lstlisting}[caption=Threaded code: handleConnection code.,
- label=lst:threadedhc]
-void handleConnection (int fd) {
- read (fd, request);
- write (fd, response);
- close (fd);
+\begin{minipage}[b]{.45\textwidth}
+\begin{lstlisting}[caption=Aesop code, label=lst:aesop]
+// handling of client request
+__blocking void handleConnection(int s)
+{
+ aesocket_read (s, request);
+ fd = aesop_open();
+ aesop_read(fd, ack);
+ aesop_close(fd);
+ aesocket_write (s, ack);
+ aesocket_close(s);
}
-\end{lstlisting}
-\end{minipage}
-\end{figure}
-
-Listing~\ref{lst:threaded} shows a typical threaded network server.
-A socket is openened, and the socket is passed to the \code{accept} system
-call which only returns once a connection to the socket is made.
-Accept returns a file descriptor, representing the new connection.
-Typically, the file descriptor is passed to a newly created thread, which will handle
-requests on the socket, while the main thread once again calls accept and blocks until an
-incoming connection is detected. Without the extra thread, no new connections would be
-serviced until the existing connection completes.
-
-The \code{handleConnection} function (pseudocode in
-listing~\ref{lst:threadedhc}) makes a sequence of blocking \code{read} and
-\code{write} calls. Since the calls are blocking, the thread sleeps until data
-can be read or written. Note that the thread based model preserves the linear
-control flow and enables the programmer to describe the algorithm assuming a
-single connection. The state associated with the connection is implicit:
-variables are stored on the stack of the thread, while the logical position
-in the algorithm is provided by the thread's instruction pointer. Since the
-OS scheduler takes care of scheduling, saving and restoring the thread, the
-programmer does not explicitly have to manage state.
-
-\begin{figure}
-\center
-\begin{minipage}[b]{.47\textwidth}
-\begin{lstlisting}[caption=Event model code, label=lst:event]
-while (1) {
- poll (set_of_descriptors);
- ....
- /* handle ready descriptors */
-}
-\end{lstlisting}
-\end{minipage}
-\hfill
-\begin{minipage}[b]{.47\textwidth}
-\begin{lstlisting}[caption=Aesop code, label=lst:aesop]
+// server main loop
while (1) {
- fd = aesop_accept (sock);
- pbranch {
- handleConnection (fd);
- }
+ s = aesop_accept (sock);
+ pbranch {
+ handleConnection(s);
+ }
}
\end{lstlisting}
\end{minipage}
-\end{figure}
-
-The event based model (example code shown in listing~\ref{lst:event}) only
-requires a single thread to service multiple connections, and does so by
-watching all existing connections (plus the listening socket) for activity.
-The \code{poll} function blocks until one of the file descriptors in its input
-set becomes ready, where ready indicates either an incoming connection,
-incoming data or the possibility to accept more outgoing data. If an incoming connection is
-signalled, a call to \code{accept} is made to obtain the new file descriptor,
-which is then added to the set of watched descriptors. In this case, none of
-the \code{accept}, \code{read} or \code{write} functions block, since they are
-only called once it is known that they don't need to block.
-%While in the example code the \code{poll} function is used, the principle
-%remains the same for the other
-When the event is processed, the thread calls the \code{poll} function again
-which blocks until more work can be done.
-
-
-\begin{figure}
-\center
-\begin{minipage}[b]{.66\textwidth}
+\quad
+\begin{minipage}[b]{.45\textwidth}
\begin{lstlisting}[label=lst:timeout,caption=Example timeout handling in aesop]
-__blocking void handleConnection (int fd)
+// A simple wrapper around handleConnection
+// demonstrates how to add a timeout using
+// a timer and cancellation
+__blocking void handleConnectionWithTO(int s, int timeout)
{
pwait {
pbranch {
- aesop_timer (timeout);
- ae_cancel_branches ();
- }
- pbranch {
- aesop_read (fd, request);
- aesop_write (fd, response);
- ae_cancel_pbranches ();
- }
- }
+ aesop_timer (timeout);
+ ae_cancel_branches ();
+ }
+ pbranch {
+ handleConnection(s);
+ ae_cancel_branches ();
+ }
+ }
}
\end{lstlisting}
\end{minipage}
-\end{figure}
-
-The aesop code (listing~\ref{lst:aesop}) strongly resembles the threaded code.
-Instead of creating a thread, a lonely pbranch is used to make sure new
-connections can be accepted even though the previous connection is still being
-processed. To avoid name collisions, the \code{accept}, \code{read} and
-\code{write} functions are prefix with \code{aesop_}, but this is not required
-by the aesop language. The \code{handleConnection} function differs in that
-the function declaration is proceeded by the \code{__blocking} keyword. The
-\code{accept}, \code{read} and \code{write} functions are provided by the
-aesop `socket' resource. While the aesop code, like the threaded version,
-preserves linear control flow, the C code generated by the aesop compiler
-actually resembles the event based code. As such, a single thread suffices to
-handle multiple connections concurrently.
+\end{figure*}
\color{black}
%
hooks/post-receive
--
Triton-private Repository
1
0
Triton-private Repository branch, master, updated. 3ffb1fe0055290b33a8358fc93985d37ed029fda
by noreply@mcs.anl.gov 06 Mar '12
by noreply@mcs.anl.gov 06 Mar '12
06 Mar '12
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Triton-private Repository".
The branch, master has been updated
via 3ffb1fe0055290b33a8358fc93985d37ed029fda (commit)
via 823bbae2706932c6903dd6e7a998d4d2153c529c (commit)
from 366d022e6f9fb2d5bb2f876308add5965e08183d (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 3ffb1fe0055290b33a8358fc93985d37ed029fda
Author: Dries Kimpe <dkimpe(a)mcs.anl.gov>
Date: Tue Mar 6 19:42:56 2012 -0600
Small fixes, comments (not complete)
commit 823bbae2706932c6903dd6e7a998d4d2153c529c
Author: Dries Kimpe <dkimpe(a)mcs.anl.gov>
Date: Tue Mar 6 12:22:15 2012 -0600
use todo notes
-----------------------------------------------------------------------
Summary of changes:
papers/2011/aesop/aesop.tex | 67 +++++++++++++++++++++------------------
papers/2011/aesop/context.tex | 52 ++++++++++++++++++-------------
papers/2011/aesop/fig/Makefile | 2 -
papers/2011/aesop/intro.tex | 39 ++++++++++++-----------
papers/2011/aesop/model.tex | 2 +-
papers/2011/aesop/related.tex | 6 ++--
6 files changed, 91 insertions(+), 77 deletions(-)
Diff of changes:
diff --git a/papers/2011/aesop/aesop.tex b/papers/2011/aesop/aesop.tex
index d95a39b..943fa49 100644
--- a/papers/2011/aesop/aesop.tex
+++ b/papers/2011/aesop/aesop.tex
@@ -9,6 +9,8 @@
\usepackage{listings}
\usepackage{subfig}
\usepackage{xspace}
+\usepackage[textsize=footnotesize]{todonotes}
+
\graphicspath{{./}}
\DeclareGraphicsExtensions{.pdf,.jpeg,.png}
@@ -39,10 +41,13 @@ basicstyle=\small
\DeclareRobustCommand{\code}[1]{\nolinkurl{#1}}
-\newcommand{\todo}[1]{ {\textcolor{red} { TODO: #1 }}}
+%\newcommand{\todo}[1]{ {\textcolor{red} { TODO: #1 }}}
\newcommand{\woz} [1]{ {\textcolor{blue} { Wozniak: #1 }}}
+% fix issue with class and todo notes - does not affect paper margins
+\setlength{\marginparwidth}{1.4cm}
+
\makeatletter
\newif\ifsc@active
\newif\ifnf@active
@@ -79,7 +84,8 @@ basicstyle=\small
% use a multiple column layout for up to two different
% affiliations
-\author{\IEEEauthorblockN{Dries Kimpe, Phil Carns}
+\author{\IEEEauthorblockN{Dries Kimpe, Phil Carns, Kevin Harms, Justin
+ Wozniak, Samuel Lang, Robert Ross}
\IEEEauthorblockA{Mathematics and Computer Science Division\\
Argonne National Laboratory\\
Argonne, IL 60439\\
@@ -89,40 +95,39 @@ Argonne, IL 60439\\
\maketitle
\begin{abstract}
-HPC and distributed systems rely on a diverse collection of system
-software to provide application services, including file systems,
-schedulers, web services, and fault detectors. Such system software
-services must manage highly concurrent requests, interact with
-diverse resources resources, and scale efficiently in order to be
-successful. Unfortunately, there is no single programming model for
-distributed system software that offers optimal performance in all cases.
-In addition, many concurrent server architectures introduce software
-complexity that influences algorithm development and hinders software
-maintenance and portability. Numerous languages and language
-extensions have been developed in recent years to simplify parallel
-computation, but they do not address the challenges of distributed system
-software in which concurrency control involves a variety of hardware
-and network devices, not just computational resources.
+High Performance Computing (HPC) and distributed systems rely on a diverse
+collection of system software to provide application services, including file
+systems, schedulers, web services, and fault detectors. Such system software
+services must manage highly concurrent requests, interact with a wide range of
+resources, and scale well in order to be successful.
+Unfortunately, there is no single programming model for distributed system
+software that offers optimal performance in all cases. In addition, many
+concurrent server architectures introduce software complexity that interferes
+with algorithm development and hinders software maintenance and portability.
+While numerous languages and language extensions have been developed in recent years
+to simplify parallel computation, they do not address the challenges of
+distributed system software in which concurrency control involves a variety of
+hardware and network devices, not just computational resources.
In this work we present \aesop, a new programming language and programming
-model designed to implement distributed system software with
-high development productivity and run time efficiency. \aesop is
-a superset of the C language that describes blocks of code to be executed
-concurrently without dictating the threading or event model that will be
-used to provide that concurrency. This decoupling of algorithm description
-and run time implementation enables system software to adjust to different
-architectures, device APIs, and workloads without any change to the core
-algorithm implementation. \aesop also provides a set of language constructs
-that provide more
-expressive control over concurrent execution than is typically found in
-multithreaded or event-driven programming models.
+model designed to implement distributed system software with high development
+productivity and run time efficiency. \aesop is a superset of the C language
+that describes blocks of code to be executed concurrently without dictating
+the threading or event model that will be used to provide that
+concurrency.\todo{leave out threading and event?} This decoupling of
+algorithm description and run time implementation enables system software to
+adjust to different architectures, device APIs, and workloads without any
+change to the core algorithm implementation. \aesop also provides a set of
+language constructs that provide more expressive control over concurrent
+execution than is typically found in multithreaded or event-driven programming
+models.
We evaluate \aesop by implementing a simple file server and comparing its
performance, memory efficiency, and developer productivity to several
thread-based and event-based implementations. \aesop is shown to provide
competitive (and in some cases superior) performance to traditional
-distributed system software development models while also reducing code
-complexity and providing constructs that enhance developer productivity.
+distributed system software development models while at the same time reducing
+code complexity and providing constructs that enhance developer productivity.
\end{abstract}
\section{Introduction}
@@ -137,9 +142,9 @@ complexity and providing constructs that enhance developer productivity.
\input{model}
-\section{The Aesop Language}
+%\section{The Aesop Language}
-\input{language}
+%\input{language}
\section{Evaluation}
diff --git a/papers/2011/aesop/context.tex b/papers/2011/aesop/context.tex
index e85e597..7b36df8 100644
--- a/papers/2011/aesop/context.tex
+++ b/papers/2011/aesop/context.tex
@@ -59,20 +59,21 @@ resources provided by multiple servers into a unified name space.
Each individual service program expects many concurrent accesses from
multiple clients, and in turn launches multiple overlapping operations
such as network transmissions or disk drive operations. A large
-system consisting of $O(100)$ servers could contain $O(1000)$ clients,
-each performing multiple simultaneous requests. Each request could
-require the server to perform $O(10)$ asynchronous disk or network
+system consisting of $O(100)$ servers could service $O(1000)$ clients,
+each performing multiple simultaneous requests. Each request typically
+requires the server to perform $O(10)$ asynchronous disk or network
operations.
-\woz{This might be a good place for a mini plot or table.}
+\todo{This might be a good place for a mini plot or table.}
\subsection{Motivation: Concurrency in file system services}
-Consider the file server diagrammed in Figure~\ref{fig:sm}. The
+Consider the file server depicted in Figure~\ref{fig:sm}. The
operation starts when the client issues a call to the server,
triggering the top receive. The server then simultaneously issues
-four concurrent operations: 1) a non-blocking send to peer server to
-forward data to a replica, 2) a non-blocking receive to accept
+four concurrent operations: 1) a send to peer server to
+forward data to a replica, \todo{removed non-blocking here to avoid term
+confusion} 2) a receive to accept
the response from the replica server, 3) a timer call to time
the whole operation and perform a timeout if necessary, and 4) a
sequence of metadata operations. Finally, when all four operations
@@ -80,11 +81,12 @@ complete, the result is posted to the client.
This file system server algorithm example illustrates that concurrency
arises not only from simultaneous client access, but also from the
-component steps required to service each request. Appropriate
-programming models help to manage this concurrency while enhancing
-developer productivity. Note that this example omits pipelining,
-failure handling, and retry functionality that, in practice, would
-further complicate this example.
+steps required to service each request. Ideally,
+programming models should help to manage this concurrency, enhancing
+developer productivity. Note that this is a simplified example.
+A production quality file system server additionally requires pipelining,
+failure handling and retry functionality that, in practice, further
+complicates its implementation.
%% ... todo: pick up train of thought here, expect concurrent access
%% (both coordinated and uncoordinated) from application processes, means
@@ -93,6 +95,8 @@ further complicate this example.
\subsection{Programming challenges}
+\todo{Suddenly imperative programming is brought in. What does this subsection
+add (over the introduction)?}
Imperative programming is the {\it de facto} standard for system
software of this nature for historical and performance reasons. All
cluster and parallel file systems in wide use today are written in C
@@ -142,10 +146,10 @@ fault response code path.
While our work targets high-performance systems, commodity systems are
faced with similar challenges. Example systems include web and other
static content servers, which are read-intensive and thus highly
-cacheable. NFS~\cite{NFS_1985} and other typical distributed file
+cacheable.\todo{caching: not relevant here} NFS~\cite{NFS_1985} and other typical distributed file
systems are a more challenging problem from a consistency perspective
as common applications rely on standardized filesystem consistency
-semantics for correctness.
+semantics for correctness.\todo{consistency: relevance?}
% Standard Practice:
% Use threads, locks, condition variables
@@ -157,31 +161,35 @@ semantics for correctness.
% Introduce concurrent programming
% Discuss areas where its common:
-high-concurrency servers: web, file system, database systems
+%high-concurrency servers: web, file system, database systems
-\subsection{Devices interfaces}
+\subsection{Device interfaces}
%% todo: an overview of what variety devices we may need to interface
%% with, how diverse their APIs are, and how many of them there might
%% be (ie, enterprise storage, commodity storage, TCP/IP sockets, HPC
%% networks, MPI, etc.)
-Any language feature designed to ease expression of asynchronous
+Any language feature designed to ease managing asynchronous
devices must take into account the broad array of relevant underlying
-devices and their interface models. To enable concurrency for I/O,
+devices and their interface models.
+\todo{are we trying to say that there are many different API
+models? Why 'usually in C'? Why contrast non-blocking with event?}
+To enable I/O concurrency,
high-level, high performance storage and networking APIs typically
provide non-blocking interfaces, but lower-level APIs provide
event-driven interfaces, all usually in C.
-Non-blocking interfaces follow an \emph{event-driven model}, where a
+Non-blocking interfaces follow an \emph{event-driven model},
+\todo{see text above; now non-blocking = event?} where a
request for an \emph{I/O operation} is made to the device through a
function call, which returns without waiting for completion (the
function does not block). The program receives completion of the I/O
operation (the event) through other notification paths, such as
through a polling function or asynchronous function callbacks.
-Concurrency is achieved through non-blocking interfaces, because the
-program can \emph{post} multiple I/O operations to the device without
-waiting for completion of any of them. While a non-blocking interface
+Non-blocking interfaces achieve concurrency by enabling the posting of multiple I/O operations
+without waiting for their completion.
+ While a non-blocking interface
allows the device to receive and optimize many requests, it hinders
expressiveness of the concurrent program. Event-driven software is
inherently difficult to write, understand and debug, primarily because
diff --git a/papers/2011/aesop/fig/Makefile b/papers/2011/aesop/fig/Makefile
index ecfebe3..7617a61 100644
--- a/papers/2011/aesop/fig/Makefile
+++ b/papers/2011/aesop/fig/Makefile
@@ -4,8 +4,6 @@ svg:=$(wildcard *.svg *.svgz)
dest:=$(patsubst %.svg, %.png, $(patsubst %.svgz, %.png, $(svg)))
-$(warning $(dest))
-
GRAPHS=read.pdf write.pdf read-null.pdf write-null.pdf \
read-hist.pdf write-hist.pdf read-null-hist.pdf write-null-hist.pdf \
read-mem.pdf write-mem.pdf read-null-mem.pdf write-null-mem.pdf \
diff --git a/papers/2011/aesop/intro.tex b/papers/2011/aesop/intro.tex
index 5f1b718..9942f89 100644
--- a/papers/2011/aesop/intro.tex
+++ b/papers/2011/aesop/intro.tex
@@ -41,7 +41,8 @@ foremost, this model is widely
used and therefore well understood in the development community.
It produces a natural control flow in algorithm implementations
because each thread executes sequentially and issues simple blocking
-device operations. Threads also provide a clear model
+device operations. Thread scheduling and stack management is handled by the
+operating system. Threads also provide a clear model
to express concurrency. There are a number of challenges to building
a multi-threaded service, however. The first is that it is not always
intuitive how to best provision thread resources; threads can be assigned
@@ -55,10 +56,9 @@ logical concurrency and the number of threads needed
to make optimal use of local resources. For example, even if there
are 1,000 client requests in flight at once, the server may have only a few
processing cores and a storage device that can only effectively handle a few
-operations at a time. This disconnect
-can cause a seemingly simple thread model to evolve into a more
-complex framework in order to take into
-account local resource scheduling constraints.
+operations at a time. This disconnect can cause a seemingly simple thread
+model to evolve into a more complex framework in order to local resource
+scheduling constraints into account.
Event-driven models can be used to address some of the common
challenges in thread efficiency. Event-driven models strive to unify
@@ -72,15 +72,17 @@ allocating a thread to each request. There are drawbacks to this model as
well, however.
Event-driven architectures break the logical control flow of software
algorithms into into disjoint segments at each point where the algorithm
-interacts with an asynchronous device or operating system service. In effect,
+interacts with an asynchronous device or operating system service.
+Per-request state has to be managed manually by the programmer. In effect,
it turns the single linear control flow for an algorithm into a state
machine with several independent states. Because these states are invoked
from a centralized event handler, their interfaces must be consistent and
-generalized. This makes it difficult to verify dependencies or perform type
-checking between states. Pure event-driven models also do not directly address
-the requirement of multi-core architectures or high performance peripherals
-that must use multiple threads to achieve maximize throughput.
-Event-driven servers therefore tend to evolve during the development process to take on
+generalized.
+This makes it difficult to verify dependencies or perform type checking
+between states. Pure event-driven models also do not directly address the
+requirement of multi-core architectures or high performance peripherals that
+require multiple threads to achieve maximize throughput. Event-driven servers
+therefore tend to evolve during the development process to take on
characteristics of both event-driven and multithreaded services in order to
compensate for these issues.
@@ -104,21 +106,22 @@ tuned to match different system architectures, different device APIs,
and different workloads without any change to the core system software
algorithms. Unlike event-driven architectures, the \aesop extensions
also preserve readable control flow regardless of how many steps or
-concurrent devices are utilized in a given algorithm. Aesop also offers
+concurrent devices are utilized in a given algorithm. \aesop also offers
functionality that is simply not available in a traditional multithreaded or
-event-driven framework, including the ability to mark variables as
+event-driven framework, \todo{private/variable: not true. TLS}
+including the ability to mark variables as
shared or private across concurrent execution paths as well as a robust
-mechanism to cancel concurrent execution paths.
+mechanism to cleanly cancel concurrent execution paths.
\subsection{Summary of contributions}
The contributions of this paper can be summarized as:
\begin{itemize}
\item A description of a proposed programming model and language, known
-as Aesop, for use in the development of distributed system software
+as \aesop, for use in the development of distributed system software
\item The definition of new language constructs to aid managing highly
concurrent execution
-\item An case study comparing Aesop to five popular multithreaded
+\item An case study comparing \aesop to five popular multithreaded
and event-driven architectures for a simple distributed service
\item A quantitative analysis of the code complexity of the architectures
used in the case study
@@ -128,9 +131,9 @@ The remainder of this paper is organized as follows.
Sections~\ref{section:context} and~\ref{section:related} describe the
challenges of distributed system software development and related work in
addressing those challenges. Sections~\ref{section:model}
-and~\ref{section:language} present the Aesop programming model and
+and~\ref{section:language} present the \aesop programming model and
programming language. Section~\ref{section:evaluation} describes a simple
-example distributed service and uses it as a case study to contrast Aesop
+example distributed service and uses it as a case study to contrast \aesop
against other models in terms of performance, memory efficiency, and
productivity. Section~\ref{section:conclusion} summarizes our findings and
proposes avenues of future work.
diff --git a/papers/2011/aesop/model.tex b/papers/2011/aesop/model.tex
index e755941..bcf2f1b 100644
--- a/papers/2011/aesop/model.tex
+++ b/papers/2011/aesop/model.tex
@@ -1,6 +1,6 @@
\label{section:model}
-This section describes the \aesop progamming language and the associated
+This section describes the \aesop progamming language and its associated
program model.
\subsection{Parallel Branches}
diff --git a/papers/2011/aesop/related.tex b/papers/2011/aesop/related.tex
index 886d698..e4e1b84 100644
--- a/papers/2011/aesop/related.tex
+++ b/papers/2011/aesop/related.tex
@@ -10,7 +10,7 @@ X10~\cite{Charles:2005:XOA:1094811.1094852}, Unified
Parallel C~\cite{upc-intro},
Chapel~\cite{Chamberlain:2007:PPC:1286120.1286123},
Fortress~\cite{fortress}, CUDA~\cite{cuda-web}, and OpenCL~\cite{opencl08}.
-Such languages allow developers to annotate software to indicate
+Such languages allow developers to annotate code
blocks that should execute in parallel, including constructs for
synchronization and sharing variables. While many of these constructs
share principles with \aesop, they were developed with the goal of
@@ -30,7 +30,7 @@ pool to schedule and execute the tasks. If the tasks are CPU bound,
then GCD may match the number of threads to the number of CPU cores.
If the tasks block on device activity, then it may instantiate a larger
number of threads. The primary advantages of GCD are that it simplifies
-multi-threaded programming and automatically adjusts concurrency according
+multithreaded programming and automatically adjusts concurrency according
to the workload and the system architecture. Unlike \aesop, however, GCD
always uses threads to achieve concurrency and provides no general framework for
integration with device API's that provide more scalable asynchronous interfaces.
@@ -82,7 +82,7 @@ sequential control flow (i.e. parallel for), waiting for their completion
(barrier) and the annotation of variables to indicate if they are to be shared
or private with respect to concurrent execution flows. As all these concepts
are present in OpenMP as well, it's easy to see how \aesop might be used to
-write multi-threaded applications. However, this is not the primary focus of
+write multithreaded applications. However, this is not the primary focus of
\aesop. While OpenMP mainly provides a portable thread abstraction, it does not
offer any support for asynchronous device interfaces.
\aesop also differs from the related work in that only \aesop offers language
hooks/post-receive
--
Triton-private Repository
1
0
Triton-private Repository branch, master, updated. 366d022e6f9fb2d5bb2f876308add5965e08183d
by noreply@mcs.anl.gov 06 Mar '12
by noreply@mcs.anl.gov 06 Mar '12
06 Mar '12
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Triton-private Repository".
The branch, master has been updated
via 366d022e6f9fb2d5bb2f876308add5965e08183d (commit)
from 8f7596a884784c69939a3705a5502df90461f1d6 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 366d022e6f9fb2d5bb2f876308add5965e08183d
Author: Kevin Harms <harms(a)alcf.anl.gov>
Date: Tue Mar 6 18:15:48 2012 -0600
Add runtime performance graphs with ops/sec
-----------------------------------------------------------------------
Summary of changes:
papers/2011/aesop/fig/Makefile | 3 +-
papers/2011/aesop/fig/gendata.sh | 39 +++++++++++++++++++-
...read-null-mem.gnuplot => read-null-ops.gnuplot} | 12 +++---
.../fig/{read-mem.gnuplot => read-ops.gnuplot} | 12 +++---
...ite-null-mem.gnuplot => write-null-ops.gnuplot} | 12 +++---
.../fig/{write-mem.gnuplot => write-ops.gnuplot} | 12 +++---
6 files changed, 64 insertions(+), 26 deletions(-)
copy papers/2011/aesop/fig/{read-null-mem.gnuplot => read-null-ops.gnuplot} (94%)
copy papers/2011/aesop/fig/{read-mem.gnuplot => read-ops.gnuplot} (94%)
copy papers/2011/aesop/fig/{write-null-mem.gnuplot => write-null-ops.gnuplot} (94%)
copy papers/2011/aesop/fig/{write-mem.gnuplot => write-ops.gnuplot} (94%)
Diff of changes:
diff --git a/papers/2011/aesop/fig/Makefile b/papers/2011/aesop/fig/Makefile
index dbb0f76..ecfebe3 100644
--- a/papers/2011/aesop/fig/Makefile
+++ b/papers/2011/aesop/fig/Makefile
@@ -10,7 +10,8 @@ GRAPHS=read.pdf write.pdf read-null.pdf write-null.pdf \
read-hist.pdf write-hist.pdf read-null-hist.pdf write-null-hist.pdf \
read-mem.pdf write-mem.pdf read-null-mem.pdf write-null-mem.pdf \
read-lat.pdf write-lat.pdf read-null-lat.pdf write-null-lat.pdf \
- read-time.pdf write-time.pdf read-null-time.pdf write-null-time.pdf
+ read-time.pdf write-time.pdf read-null-time.pdf write-null-time.pdf \
+ read-ops.pdf write-ops.pdf read-null-ops.pdf write-null-ops.pdf
all:: $(dest) $(GRAPHS)
diff --git a/papers/2011/aesop/fig/gendata.sh b/papers/2011/aesop/fig/gendata.sh
index 7a175e7..a4f24cd 100755
--- a/papers/2011/aesop/fig/gendata.sh
+++ b/papers/2011/aesop/fig/gendata.sh
@@ -7,7 +7,7 @@ shopt -s extglob
basepath=../data/fusion
test=$1
-base=${1%-@(hist|mem|lat|time)}
+base=${1%-@(hist|mem|lat|time|ops)}
file=$1;
if [ $test = $base -o $test = "${base}-hist" ];
@@ -34,6 +34,43 @@ then
echo "" >> ${test}.data
done
+
+elif [ $test = "${base}-ops" ];
+then
+ # Max Time Data
+ # create column oriented data
+
+ echo "#${base} aesop thread thread-nb thread-per-op thread-pool event" > ${test}.data;
+
+ for nodes in 1 8 16 32 64;
+ do
+
+ echo -n "$((${nodes}*16)) " >> ${test}.data;
+
+ for type in aesop thread thread-nb thread-per-op thread-pool event;
+ do
+ val=$(cat ${basepath}/${base}/${type}/client-${type//-/}-${base}-${nodes}-* 2>/dev/null | grep "max:" | perl -ne 'if (/max:(\S+)/) { print "$1\n"; }' | sort -n | head -3 | tail -1)
+ if [ -z ${val} ]; then
+ val="-";
+ else
+ if [ ${base} = "read" -o ${base} = "write" ];
+ then
+ op=16
+ elif [ ${base} = "read-null" -o ${base} = "write-null" ];
+ then
+ op=4096
+ else
+ op=0
+ fi
+ val=$(echo "(${nodes}*16*${op}) / ${val}" | bc)
+ fi
+ echo -n "${val} " >> ${test}.data;
+ done
+
+ echo "" >> ${test}.data
+
+ done
+
elif [ $test = "${base}-mem" ];
then
# Mam Mem data
diff --git a/papers/2011/aesop/fig/read-null-mem.gnuplot b/papers/2011/aesop/fig/read-null-ops.gnuplot
similarity index 94%
copy from papers/2011/aesop/fig/read-null-mem.gnuplot
copy to papers/2011/aesop/fig/read-null-ops.gnuplot
index 29e9bda..ab5e16c 100644
--- a/papers/2011/aesop/fig/read-null-mem.gnuplot
+++ b/papers/2011/aesop/fig/read-null-ops.gnuplot
@@ -48,7 +48,7 @@ set grid noxtics nomxtics ytics mytics noztics nomztics \
nox2tics nomx2tics y2tics nomy2tics nocbtics nomcbtics
set grid layerdefault linetype 0 linewidth 1.000, linetype 0 linewidth 1.000
set key title ""
-set key inside left top vertical Right noreverse enhanced autotitles box linetype -1 linewidth 1.000
+set key outside bottom center horizontal Right noreverse enhanced autotitles box linetype -1 linewidth 1.000
set key noinvert samplen 4 spacing 1 width 0 height 0
set key maxcolumns 0 maxrows 0
unset label
@@ -58,7 +58,7 @@ unset style line
unset style arrow
set style histogram clustered gap 2 title offset character 0, 0, 0
unset logscale
-set logscale y 10
+#set logscale y 10
set offsets 0, 0, 0, 0
set pointsize 1
set pointintervalbox 1
@@ -115,17 +115,17 @@ set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e
set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] )
set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
-set xlabel "clients"
+#set xlabel "clients"
set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
set x2label ""
set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate
set xrange [ * : * ] noreverse nowriteback # (currently [-1.00000:5.00000] )
set x2range [ * : * ] noreverse nowriteback # (currently [-1.00000:5.00000] )
-set ylabel "memory usage (KB)"
+set ylabel "operations per second"
set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
set y2label ""
set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set yrange [ * : * ] noreverse nowriteback # (currently [-1.00000:2.00000] )
+set yrange [ 0 : * ] noreverse nowriteback # (currently [-1.00000:2.00000] )
set y2range [ * : * ] noreverse nowriteback # (currently [-0.124939:1.89982] )
set zlabel ""
set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
@@ -150,5 +150,5 @@ set loadpath
set fontpath
set fit noerrorvariables
GNUTERM = "x11"
-plot 'read-null-mem.data' using 2:xtic(1) title "aesop", '' u 3 ti "thread-per-client", '' u 4 ti "thread-per-client-nb", '' u 5 ti "thread-per-op", '' u 6 ti "thread-pool", '' u 7 ti "event"
+plot 'read-null-ops.data' using 2:xtic(1) title "aesop", '' u 3 ti "thread-per-client", '' u 4 ti "thread-per-client-nb", '' u 5 ti "thread-per-op", '' u 6 ti "thread-pool", '' u 7 ti "event"
# EOF
diff --git a/papers/2011/aesop/fig/read-mem.gnuplot b/papers/2011/aesop/fig/read-ops.gnuplot
similarity index 94%
copy from papers/2011/aesop/fig/read-mem.gnuplot
copy to papers/2011/aesop/fig/read-ops.gnuplot
index c8a99a8..58bdda3 100644
--- a/papers/2011/aesop/fig/read-mem.gnuplot
+++ b/papers/2011/aesop/fig/read-ops.gnuplot
@@ -48,7 +48,7 @@ set grid noxtics nomxtics ytics mytics noztics nomztics \
nox2tics nomx2tics y2tics nomy2tics nocbtics nomcbtics
set grid layerdefault linetype 0 linewidth 1.000, linetype 0 linewidth 1.000
set key title ""
-set key inside left top vertical Right noreverse enhanced autotitles box linetype -1 linewidth 1.000
+set key outside bottom center horizontal Right noreverse enhanced autotitles box linetype -1 linewidth 1.000
set key noinvert samplen 4 spacing 1 width 0 height 0
set key maxcolumns 0 maxrows 0
unset label
@@ -58,7 +58,7 @@ unset style line
unset style arrow
set style histogram clustered gap 2 title offset character 0, 0, 0
unset logscale
-set logscale y 10
+#set logscale y 10
set offsets 0, 0, 0, 0
set pointsize 1
set pointintervalbox 1
@@ -115,17 +115,17 @@ set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e
set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] )
set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
-set xlabel "clients"
+#set xlabel "clients"
set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
set x2label ""
set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate
set xrange [ * : * ] noreverse nowriteback # (currently [-1.00000:5.00000] )
set x2range [ * : * ] noreverse nowriteback # (currently [-1.00000:5.00000] )
-set ylabel "memory usage (KB)"
+set ylabel "operations per second"
set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
set y2label ""
set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set yrange [ * : * ] noreverse nowriteback # (currently [-1.00000:2.00000] )
+set yrange [ 0 : * ] noreverse nowriteback # (currently [-1.00000:2.00000] )
set y2range [ * : * ] noreverse nowriteback # (currently [-0.124939:1.89982] )
set zlabel ""
set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
@@ -150,5 +150,5 @@ set loadpath
set fontpath
set fit noerrorvariables
GNUTERM = "x11"
-plot 'read-mem.data' using 2:xtic(1) title "aesop", '' u 3 ti "thread-per-client", '' u 4 ti "thread-per-client-nb", '' u 5 ti "thread-per-op", '' u 6 ti "thread-pool", '' u 7 ti "event"
+plot 'read-ops.data' using 2:xtic(1) title "aesop", '' u 3 ti "thread-per-client", '' u 4 ti "thread-per-client-nb", '' u 5 ti "thread-per-op", '' u 6 ti "thread-pool", '' u 7 ti "event"
# EOF
diff --git a/papers/2011/aesop/fig/write-null-mem.gnuplot b/papers/2011/aesop/fig/write-null-ops.gnuplot
similarity index 94%
copy from papers/2011/aesop/fig/write-null-mem.gnuplot
copy to papers/2011/aesop/fig/write-null-ops.gnuplot
index 3c37381..0194584 100644
--- a/papers/2011/aesop/fig/write-null-mem.gnuplot
+++ b/papers/2011/aesop/fig/write-null-ops.gnuplot
@@ -48,7 +48,7 @@ set grid noxtics nomxtics ytics mytics noztics nomztics \
nox2tics nomx2tics y2tics nomy2tics nocbtics nomcbtics
set grid layerdefault linetype 0 linewidth 1.000, linetype 0 linewidth 1.000
set key title ""
-set key inside left top vertical Right noreverse enhanced autotitles box linetype -1 linewidth 1.000
+set key outside bottom center horizontal Right noreverse enhanced autotitles box linetype -1 linewidth 1.000
set key noinvert samplen 4 spacing 1 width 0 height 0
set key maxcolumns 0 maxrows 0
unset label
@@ -58,7 +58,7 @@ unset style line
unset style arrow
set style histogram clustered gap 2 title offset character 0, 0, 0
unset logscale
-set logscale y 10
+#set logscale y 10
set offsets 0, 0, 0, 0
set pointsize 1
set pointintervalbox 1
@@ -115,17 +115,17 @@ set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e
set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] )
set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
-set xlabel "clients"
+#set xlabel "clients"
set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
set x2label ""
set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate
set xrange [ * : * ] noreverse nowriteback # (currently [-1.00000:5.00000] )
set x2range [ * : * ] noreverse nowriteback # (currently [-1.00000:5.00000] )
-set ylabel "memory usage (KB)"
+set ylabel "operations per second"
set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
set y2label ""
set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set yrange [ * : * ] noreverse nowriteback # (currently [-1.00000:2.00000] )
+set yrange [ 0 : * ] noreverse nowriteback # (currently [-1.00000:2.00000] )
set y2range [ * : * ] noreverse nowriteback # (currently [-0.124939:1.89982] )
set zlabel ""
set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
@@ -150,5 +150,5 @@ set loadpath
set fontpath
set fit noerrorvariables
GNUTERM = "x11"
-plot 'write-null-mem.data' using 2:xtic(1) title "aesop", '' u 3 ti "thread-per-client", '' u 4 ti "thread-per-client-nb", '' u 5 ti "thread-per-op", '' u 6 ti "thread-pool", '' u 7 ti "event"
+plot 'write-null-ops.data' using 2:xtic(1) title "aesop", '' u 3 ti "thread-per-client", '' u 4 ti "thread-per-client-nb", '' u 5 ti "thread-per-op", '' u 6 ti "thread-pool", '' u 7 ti "event"
# EOF
diff --git a/papers/2011/aesop/fig/write-mem.gnuplot b/papers/2011/aesop/fig/write-ops.gnuplot
similarity index 94%
copy from papers/2011/aesop/fig/write-mem.gnuplot
copy to papers/2011/aesop/fig/write-ops.gnuplot
index b6eb2cb..ad00bed 100644
--- a/papers/2011/aesop/fig/write-mem.gnuplot
+++ b/papers/2011/aesop/fig/write-ops.gnuplot
@@ -48,7 +48,7 @@ set grid noxtics nomxtics ytics mytics noztics nomztics \
nox2tics nomx2tics y2tics nomy2tics nocbtics nomcbtics
set grid layerdefault linetype 0 linewidth 1.000, linetype 0 linewidth 1.000
set key title ""
-set key inside left top vertical Right noreverse enhanced autotitles box linetype -1 linewidth 1.000
+set key outside bottom center horizontal Right noreverse enhanced autotitles box linetype -1 linewidth 1.000
set key noinvert samplen 4 spacing 1 width 0 height 0
set key maxcolumns 0 maxrows 0
unset label
@@ -58,7 +58,7 @@ unset style line
unset style arrow
set style histogram clustered gap 2 title offset character 0, 0, 0
unset logscale
-set logscale y 10
+#set logscale y 10
set offsets 0, 0, 0, 0
set pointsize 1
set pointintervalbox 1
@@ -115,17 +115,17 @@ set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e
set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] )
set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
-set xlabel "clients"
+#set xlabel "clients"
set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
set x2label ""
set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate
set xrange [ * : * ] noreverse nowriteback # (currently [-1.00000:5.00000] )
set x2range [ * : * ] noreverse nowriteback # (currently [-1.00000:5.00000] )
-set ylabel "memory usage (KB)"
+set ylabel "operations per second"
set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
set y2label ""
set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set yrange [ * : * ] noreverse nowriteback # (currently [-1.00000:2.00000] )
+set yrange [ 0 : * ] noreverse nowriteback # (currently [-1.00000:2.00000] )
set y2range [ * : * ] noreverse nowriteback # (currently [-0.124939:1.89982] )
set zlabel ""
set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
@@ -150,5 +150,5 @@ set loadpath
set fontpath
set fit noerrorvariables
GNUTERM = "x11"
-plot 'write-mem.data' using 2:xtic(1) title "aesop", '' u 3 ti "thread-per-client", '' u 4 ti "thread-per-client-nb", '' u 5 ti "thread-per-op", '' u 6 ti "thread-pool", '' u 7 ti "event"
+plot 'write-ops.data' using 2:xtic(1) title "aesop", '' u 3 ti "thread-per-client", '' u 4 ti "thread-per-client-nb", '' u 5 ti "thread-per-op", '' u 6 ti "thread-pool", '' u 7 ti "event"
# EOF
hooks/post-receive
--
Triton-private Repository
1
0
Triton-private Repository branch, master, updated. 8f7596a884784c69939a3705a5502df90461f1d6
by noreply@mcs.anl.gov 06 Mar '12
by noreply@mcs.anl.gov 06 Mar '12
06 Mar '12
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Triton-private Repository".
The branch, master has been updated
via 8f7596a884784c69939a3705a5502df90461f1d6 (commit)
from 08cb6fc7d362b8028262cadc111ebac27cadb36c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 8f7596a884784c69939a3705a5502df90461f1d6
Author: Kevin Harms <harms(a)alcf.anl.gov>
Date: Tue Mar 6 16:26:01 2012 -0600
Tweak figure 5 to address comments. (reduce ymax, xtic labels, remove xaxis title)
-----------------------------------------------------------------------
Summary of changes:
papers/2011/aesop/fig/read-lat.gnuplot | 6 +++---
papers/2011/aesop/fig/read-null-lat.gnuplot | 6 +++---
papers/2011/aesop/fig/write-lat.gnuplot | 6 +++---
papers/2011/aesop/fig/write-null-lat.gnuplot | 6 +++---
4 files changed, 12 insertions(+), 12 deletions(-)
Diff of changes:
diff --git a/papers/2011/aesop/fig/read-lat.gnuplot b/papers/2011/aesop/fig/read-lat.gnuplot
index 5711ca2..7da4ffa 100644
--- a/papers/2011/aesop/fig/read-lat.gnuplot
+++ b/papers/2011/aesop/fig/read-lat.gnuplot
@@ -96,7 +96,7 @@ set mztics default
set mx2tics default
set my2tics default
set mcbtics default
-set xtics border in scale 1,0.5 mirror rotate by -45 offset character 0, 0, 0
+set xtics border in scale 1,0.5 mirror rotate by -15 offset character 0, 0, 0
set xtics norangelimit
set xtics ()
set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0
@@ -116,7 +116,7 @@ set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e
set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] )
set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
-set xlabel "Server Type"
+#set xlabel "Server Type"
set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
set x2label ""
set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate
@@ -126,7 +126,7 @@ set ylabel "Time (seconds)"
set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
set y2label ""
set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set yrange [ * : * ] noreverse nowriteback # (currently [-1.00000:2.00000] )
+set yrange [ * : 0.2 ] noreverse nowriteback # (currently [-1.00000:2.00000] )
set y2range [ * : * ] noreverse nowriteback # (currently [-0.124939:1.89982] )
set zlabel ""
set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
diff --git a/papers/2011/aesop/fig/read-null-lat.gnuplot b/papers/2011/aesop/fig/read-null-lat.gnuplot
index 19ea914..cea67ed 100644
--- a/papers/2011/aesop/fig/read-null-lat.gnuplot
+++ b/papers/2011/aesop/fig/read-null-lat.gnuplot
@@ -96,7 +96,7 @@ set mztics default
set mx2tics default
set my2tics default
set mcbtics default
-set xtics border in scale 1,0.5 mirror rotate by -45 offset character 0, 0, 0
+set xtics border in scale 1,0.5 mirror rotate by -15 offset character 0, 0, 0
set xtics norangelimit
set xtics ()
set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0
@@ -116,7 +116,7 @@ set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e
set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] )
set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
-set xlabel "Server Type"
+#set xlabel "Server Type"
set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
set x2label ""
set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate
@@ -126,7 +126,7 @@ set ylabel "Time (seconds)"
set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
set y2label ""
set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set yrange [ * : * ] noreverse nowriteback # (currently [-1.00000:2.00000] )
+set yrange [ * : 0.2 ] noreverse nowriteback # (currently [-1.00000:2.00000] )
set y2range [ * : * ] noreverse nowriteback # (currently [-0.124939:1.89982] )
set zlabel ""
set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
diff --git a/papers/2011/aesop/fig/write-lat.gnuplot b/papers/2011/aesop/fig/write-lat.gnuplot
index bb12755..8bceddb 100644
--- a/papers/2011/aesop/fig/write-lat.gnuplot
+++ b/papers/2011/aesop/fig/write-lat.gnuplot
@@ -96,7 +96,7 @@ set mztics default
set mx2tics default
set my2tics default
set mcbtics default
-set xtics border in scale 1,0.5 mirror rotate by -45 offset character 0, 0, 0
+set xtics border in scale 1,0.5 mirror rotate by -15 offset character 0, 0, 0
set xtics norangelimit
set xtics ()
set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0
@@ -116,7 +116,7 @@ set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e
set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] )
set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
-set xlabel "Server Type"
+#set xlabel "Server Type"
set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
set x2label ""
set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate
@@ -126,7 +126,7 @@ set ylabel "Time (seconds)"
set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
set y2label ""
set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set yrange [ * : * ] noreverse nowriteback # (currently [-1.00000:2.00000] )
+set yrange [ * : 0.2 ] noreverse nowriteback # (currently [-1.00000:2.00000] )
set y2range [ * : * ] noreverse nowriteback # (currently [-0.124939:1.89982] )
set zlabel ""
set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
diff --git a/papers/2011/aesop/fig/write-null-lat.gnuplot b/papers/2011/aesop/fig/write-null-lat.gnuplot
index 90e5a37..2a5dd6e 100644
--- a/papers/2011/aesop/fig/write-null-lat.gnuplot
+++ b/papers/2011/aesop/fig/write-null-lat.gnuplot
@@ -96,7 +96,7 @@ set mztics default
set mx2tics default
set my2tics default
set mcbtics default
-set xtics border in scale 1,0.5 mirror rotate by -45 offset character 0, 0, 0
+set xtics border in scale 1,0.5 mirror rotate by -15 offset character 0, 0, 0
set xtics norangelimit
set xtics ()
set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0
@@ -116,7 +116,7 @@ set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e
set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] )
set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
-set xlabel "Server Type"
+#set xlabel "Server Type"
set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
set x2label ""
set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate
@@ -126,7 +126,7 @@ set ylabel "Time (seconds)"
set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
set y2label ""
set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
-set yrange [ * : * ] noreverse nowriteback # (currently [-1.00000:2.00000] )
+set yrange [ * : 0.2 ] noreverse nowriteback # (currently [-1.00000:2.00000] )
set y2range [ * : * ] noreverse nowriteback # (currently [-0.124939:1.89982] )
set zlabel ""
set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
hooks/post-receive
--
Triton-private Repository
1
0
Triton-private Repository branch, master, updated. 08cb6fc7d362b8028262cadc111ebac27cadb36c
by noreply@mcs.anl.gov 06 Mar '12
by noreply@mcs.anl.gov 06 Mar '12
06 Mar '12
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Triton-private Repository".
The branch, master has been updated
via 08cb6fc7d362b8028262cadc111ebac27cadb36c (commit)
from aa1b3a96c14d6a88d6c6fd8e7795c2653ecc8100 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 08cb6fc7d362b8028262cadc111ebac27cadb36c
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Tue Mar 6 16:37:57 2012 -0500
address comment on PVFS SM / event model text
-----------------------------------------------------------------------
Summary of changes:
papers/2011/aesop/context.tex | 59 +++++++++++++++++-----------------------
1 files changed, 25 insertions(+), 34 deletions(-)
Diff of changes:
diff --git a/papers/2011/aesop/context.tex b/papers/2011/aesop/context.tex
index 8aadf86..e85e597 100644
--- a/papers/2011/aesop/context.tex
+++ b/papers/2011/aesop/context.tex
@@ -269,7 +269,6 @@ operation may be accessed.
The \aesop language described in this work builds upon lessons learned
from the event-driven state machine model used in the PVFS file
system~\cite{pvfs-web}.
-
In PVFS State Machines (SM), every client and server operation is
expressed as a state machine using a language that is based on C with
extensions to describe service states and the transitions that link
@@ -284,36 +283,28 @@ state machines instances can be active simultaneously, allowing PVFS
to track the state of an arbitrary number of concurrent requests and
make progress on them without the overhead of explicit threading.
-\color{red}PHC: I think it would be appropriate here to point out that the
-PVFS state machines are really just a framework for event-driven
-programming, and as such suffers from the general limitations of the
-event-driven model, including "...." Keep most of the below text, just spin
-a little differently.\color{black}
-
-This state machine architecture has proved successful in achieving
-high performance in large-scale production HPC
-environments~\cite{pvfs-bgp-sc09}, but it poses a number of problems
-for developer productivity. First, all file system algorithms must be
-split into functions on boundaries according to the location of
-asynchronous operations, rather than according to logical
-functionality. Secondly, the state machine engine uses a fixed
-function prototype for each state machine function, meaning that
-arguments are passed between state functions via an arbitrary, opaque
-struct that is shared across the entire state machine. This
-eliminates any possibility of automatic dependency checking between
-state functions (e.g., did the previous state function set all of the
-struct fields needed by the current state function?) and leads to a
-new class of bugs that do not typically appear in traditional C code.
-
-Additionally, PVFS SM has the additional limitation that all
-non-asynchronous computation is performed on a single core. With the
-advent on many-core servers, this is an very undesirable limitation.
-Finally, PVFS SM simply does not \emph{look like} traditional C code,
-making it difficult to reason about many development challenges.
-
-These drawbacks introduce a steep learning curve for researchers and a
-additional maintenance workload for maintainers. In this work, we
-demonstrate that \aesop provides the same level of concurrency and
-support for asynchronous interfaces as the PVFS state machine engine
-while allowing file system developers to write their algorithms using
-a more familiar code organization, and expected concurrency features.
+This PVFS state machine model is essentially a formal framework for
+event-driven programming. This approach has proved successful
+in achieving high performance in large-scale production HPC
+environments~\cite{pvfs-bgp-sc09}, but it shares many of the same
+developer productivity challenges found in other event-driven models.
+First, all algorithms must be split into functions on boundaries according
+to the location of asynchronous operations, rather than according to
+logical functionality. Secondly, the state machine engine uses a fixed
+function prototype for each state machine function, meaning that arguments
+are passed between state functions via an opaque struct that is shared
+across the entire state machine. This makes automatic depencency checking
+between states impossible (e.g., did the previous state function set all
+of the struct fields needed by the current state function?) and leads to
+a new class of bugs that do not typically appear in traditional C code.
+Additionally, PVFS SMs perform all non-asynchronous computation on a
+single core, which is an undesirable model given the advent of many-core
+servers. Finally, PVFS SM simply does not \emph{look like} traditional
+C code, making it difficult to reason about many development challenges.
+
+These drawbacks introduce a learning curve for researchers and a
+additional maintenance workload for maintainers. In this work, we seek to
+learn from the lessons of PVFS SM development and present a programming
+model that provides at least as much technical functionality but also allows
+file system developers to write algorithms using a more traditional
+code organization.
hooks/post-receive
--
Triton-private Repository
1
0
Triton-private Repository branch, master, updated. aa1b3a96c14d6a88d6c6fd8e7795c2653ecc8100
by noreply@mcs.anl.gov 06 Mar '12
by noreply@mcs.anl.gov 06 Mar '12
06 Mar '12
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Triton-private Repository".
The branch, master has been updated
via aa1b3a96c14d6a88d6c6fd8e7795c2653ecc8100 (commit)
from 46b49bc605d78b3c5ed31a98a2cb23ecb856704d (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit aa1b3a96c14d6a88d6c6fd8e7795c2653ecc8100
Author: Kevin Harms <harms(a)alcf.anl.gov>
Date: Tue Mar 6 00:58:14 2012 -0600
Minor edits to the aesop paper eval section, added Ack for fusion
-----------------------------------------------------------------------
Summary of changes:
papers/2011/aesop/aesop.tex | 4 ++-
papers/2011/aesop/evaluation.tex | 44 +++++++++++++++++++++----------------
2 files changed, 28 insertions(+), 20 deletions(-)
Diff of changes:
diff --git a/papers/2011/aesop/aesop.tex b/papers/2011/aesop/aesop.tex
index b321718..d95a39b 100644
--- a/papers/2011/aesop/aesop.tex
+++ b/papers/2011/aesop/aesop.tex
@@ -155,7 +155,9 @@ complexity and providing constructs that enhance developer productivity.
This work was supported by the Mathematical, Information, and Computational
Sciences Division subprogram of the Office of Advanced Scientific Computing
Research, Office of Science, U.S. Dept. of Energy, under Contract
-DE-AC02-06CH11357.
+DE-AC02-06CH11357. We gratefully acknowledge the computing resources provided
+on "Fusion," a 320-node computing cluster operated by the
+Laboratory Computing Resource Center at Argonne National Laboratory.
% trigger a \newpage just before the given reference
% number - used to balance the columns on the last page
diff --git a/papers/2011/aesop/evaluation.tex b/papers/2011/aesop/evaluation.tex
index fe7e057..c8210ce 100644
--- a/papers/2011/aesop/evaluation.tex
+++ b/papers/2011/aesop/evaluation.tex
@@ -1,7 +1,10 @@
\label{section:evaluation}
In this paper we evaluate Aesop based on three criteria, runtime efficiency,
-memory efficiency and progammer productivity.
+memory efficiency and progammer productivity. All graphs presented in the
+following section are in log scale.
+
+%TODO: Try switching runtime graphs to ops/second instead of time and update text to reference op/sec counts.
\subsection{Experiment}
@@ -48,7 +51,7 @@ returns the data with the acknowledgement of the operation.
The read test had clients each issue 16 requests asking for 4 KiB from
disk. Each client specifies a unique file to be read on each request. All
clients specify unique files. The files are first generated by a script
-before the tes truns.
+before the test truns.
\paragraph*{Write}
@@ -96,9 +99,9 @@ Each server is setup to report the VmHWM stat when the application exits.
\paragraph*{Aesop}
The Aesop server is implemented in the Aesop programming language. The server
-uses a 'lonely pbranch' to service each client. All operations for a client
-are handled within a single pbranch. The socket nd file operations are
-performed with blocking Aesop function that are provided by the Aesop
+uses a {\em lonely pbranch} to service each client. All operations for a client
+are handled within a single pbranch. The socket and file operations are
+performed with blocking Aesop functions that are provided by the Aesop
standard library. The underlying socket resource uses non-blocking sockets
with a thread pool of 12 threads. The file resource uses synchronous IO and
a thread pool with 4 threads.
@@ -245,12 +248,12 @@ the 1024 client size selected from the same iteration as the maximum runtime
graphs. Figure~\ref{fig:writelat} shows Aesop offers vary comparative
latency performance as the other configurations and only notably
thread-per-op and event are significantly worse. The relative latency metrics
-are similar for the other test cases.
+are similar for the other test cases at 1024 clients.
-\begin{figure}[t]
+\begin{figure}[ht]
\centering
\includegraphics[keepaspectratio,width=0.45\textwidth]{fig/write-lat.pdf}
- \caption{Write latency\label{fig:writelat}}
+ \caption{Write latency (1024 clients)\label{fig:writelat}}
\end{figure}
\subsection{Memory Efficiency}
@@ -270,14 +273,14 @@ by design limits the number of requests that can be in progress at once. The
other server implementations scale as the number of clients increase.
Although the Aesop server cannot match the thread-pool server in terms of
memory usage, it does compare favorably to the thread-per-client and
-thread-per op servers. Note that the thread-per-client and thread-per-op
+thread-per-op servers. Note that the thread-per-client and thread-per-op
models consume virtual memory at a much larger rate due to the number of
thread stacks allocated. We chose not to evaluate this metric, however,
as the resident memory seems to be a more relevant metric in practice. Again,
the memory usage graphs for the other test cases are similar to those shown
in the write test case.
-\begin{figure}[t]
+\begin{figure}[ht]
\centering
\includegraphics[keepaspectratio,width=0.45\textwidth]{fig/write-mem.pdf}
\caption{Write memory usage \label{fig:writemem}}
@@ -333,7 +336,19 @@ operation requires 5 disconnected event handlers. So although the event
model appears less complex according to CC and mod. CC, qualitatively it is
significantly more challenging to develop.
+The example discussed in this section is very simple and differs from real
+world code by the absence of error handling, timeout handling and request
+throttling. In aesop, these concepts can easily be added without complication
+the request logic. For example, a timeout can be implemented by adding a
+\code{pbranch} starting a timer which cancels the original \code{pbranch} once
+the timeout is reached. Listing~\ref{lst:timeout} shows an example. The same
+effect is not easily achieved using the event or threaded models, since
+neither model offers any help in cancelling an outstanding call.
+
\color{red}
+
+%TODO Possibly update this so that it illustrates just the aesop code and how cancellation is added.
+
\begin{figure}[t]
\center
\begin{minipage}[b]{.47\textwidth}
@@ -454,15 +469,6 @@ preserves linear control flow, the C code generated by the aesop compiler
actually resembles the event based code. As such, a single thread suffices to
handle multiple connections concurrently.
-The example discussed in this section is very simple and differs from real
-world code by the absence of error handling, timeout handling and request
-throttling. In aesop, these concepts can easily be added without complication
-the request logic. For example, a timeout can be implemented by adding a
-\code{pbranch} starting a timer which cancels the original \code{pbranch} once
-the timeout is reached. Listing~\ref{lst:timeout} shows an example. The same
-effect is not easily achieved using the event or threaded models, since
-neither model offers any help in cancelling an outstanding call.
-
\color{black}
%
hooks/post-receive
--
Triton-private Repository
1
0
Triton Repository branch, master, updated. 48125e56f22f8ec5fc7698c6e174194e70c461f4
by noreply@mcs.anl.gov 05 Mar '12
by noreply@mcs.anl.gov 05 Mar '12
05 Mar '12
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Triton Repository".
The branch, master has been updated
via 48125e56f22f8ec5fc7698c6e174194e70c461f4 (commit)
from 562fb9724ca3d57a00e8c803692b8c70f7e5bce9 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 48125e56f22f8ec5fc7698c6e174194e70c461f4
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Mar 5 17:36:11 2012 -0600
Restore jar file
-----------------------------------------------------------------------
Summary of changes:
code/maint/ditaa/ditaa0_9.jar | Bin 186103 -> 186095 bytes
1 files changed, 0 insertions(+), 0 deletions(-)
Diff of changes:
diff --git a/code/maint/ditaa/ditaa0_9.jar b/code/maint/ditaa/ditaa0_9.jar
index ef7f9aa..5894de4 100644
Binary files a/code/maint/ditaa/ditaa0_9.jar and b/code/maint/ditaa/ditaa0_9.jar differ
hooks/post-receive
--
Triton Repository
1
0