backport github actions breaking change fix

This commit is contained in:
Jonathan Shook 2020-12-07 13:41:27 -06:00
parent 3f4d130496
commit 040db4782f
23 changed files with 2794 additions and 0 deletions

View File

@ -0,0 +1 @@
eyJrIjoibVFjRkV5Z096VHE0MjhXYk1RM2p1cnFuUkhQMXVZNGwiLCJuIjoibm9zcWxiZW5jaC0xMC4xMC4xMDAuNTItMTYwNzMxMDE2MDM0OCIsImlkIjoxfQ==

View File

@ -0,0 +1,376 @@
/*
*
* Copyright 2016 jshook
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* /
*/
package io.nosqlbench.engine.api.activityapi.ratelimits;
import com.codahale.metrics.Timer;
import io.nosqlbench.engine.api.activityimpl.ActivityDef;
import io.nosqlbench.engine.api.metrics.ActivityMetrics;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.LockSupport;
import java.util.concurrent.locks.ReentrantLock;
import static io.nosqlbench.engine.api.util.Colors.*;
/**
* <h2>Synopsis</h2>
*
* This TokenPool represents a finite quantity which can be
* replenished with regular refills. Extra tokens that do not fit
* within the active token pool are saved in a waiting token pool and
* used to backfill when allowed according to the backfill rate.
*
* A detailed explanation for how this works will be included
* at @link "http://docs.nosqlbench.io/" under dev notes.
*
* <p>This is the basis for the token-based rate limiters in
* NB. This mechanism is easily adaptable to bursting
* capability as well as a degree of stricter timing at speed.
* Various methods for doing this in a lock free way were
* investigated, but the intrinsic locks provided by synchronized
* method won out for now. This may be revisited when EB is
* retrofitted for J11.
* </p>
*/
public class InlineTokenPool {
private final static Logger logger = LogManager.getLogger(InlineTokenPool.class);
public static final double MIN_CONCURRENT_OPS = 5;
// Size limit of active pool
private long maxActivePoolSize;
// Size limit of burst pool incremental above active pool
private long maxBurstPoolSize;
// Size limit of total active tokens which can be waiting in active pool, considering burst
private long maxActiveAndBurstSize;
// Ratio of speed relative to base speed at which bursting is allowed
private double burstRatio;
// TODO Consider removing volatile after investigating
// The active number of tokens (ns) available for consumers
private volatile long activePool;
// The tokens which were not claimed on time, and were moved into the waitime (reserve) pool
private volatile long waitingPool;
// How many tokens (ns) represent passage of time for a single op, given the op rate
private long nanosPerOp;
// The nanotime of the last refill
private volatile long lastRefillAt;
// metrics for refill
private final Timer refillTimer;
// update rate for refiller
private final long interval = (long) 1E6;
private RateSpec rateSpec;
// private long debugTrigger=0L;
// private long debugRate=1000000000;
// Total number of thread blocks that occured since this token pool was started
private long blocks = 0L;
private final Lock lock = new ReentrantLock();
private final Condition lockheld = lock.newCondition();
/**
* This constructor tries to pick reasonable defaults for the token pool for
* a given rate spec. The active pool must be large enough to contain one
* op worth of time, and the burst ratio
*
* @param rateSpec a {@link RateSpec}
*/
public InlineTokenPool(RateSpec rateSpec, ActivityDef def) {
ByteBuffer logbuf = getBuffer();
apply(rateSpec);
logger.debug("initialized token pool: " + this.toString() + " for rate:" + rateSpec.toString());
this.refillTimer = ActivityMetrics.timer(def, "tokenfiller");
}
public InlineTokenPool(long poolsize, double burstRatio, ActivityDef def) {
ByteBuffer logbuf = getBuffer();
this.maxActivePoolSize = poolsize;
this.burstRatio = burstRatio;
this.maxActiveAndBurstSize = (long) (maxActivePoolSize * burstRatio);
this.maxBurstPoolSize = maxActiveAndBurstSize - maxActivePoolSize;
this.refillTimer = ActivityMetrics.timer(def, "tokenfiller");
}
/**
* Change the settings of this token pool, and wake any blocked callers
* just in case it allows them to proceed.
*
* @param rateSpec The rate specifier.
*/
public synchronized void apply(RateSpec rateSpec) {
this.rateSpec = rateSpec;
// maxActivePool is set to the higher of 1M or however many nanos are needed for 2 ops to be buffered
this.maxActivePoolSize = Math.max((long) 1E6, (long) ((double) rateSpec.getNanosPerOp() * MIN_CONCURRENT_OPS));
this.maxActiveAndBurstSize = (long) (maxActivePoolSize * rateSpec.getBurstRatio());
this.burstRatio = rateSpec.getBurstRatio();
this.maxBurstPoolSize = maxActiveAndBurstSize - maxActivePoolSize;
this.nanosPerOp = rateSpec.getNanosPerOp();
notifyAll();
}
public double getBurstRatio() {
return burstRatio;
}
/**
* Take tokens up to amt tokens form the pool and report
* the amount of token removed.
*
* @param amt tokens requested
* @return actual number of tokens removed, greater to or equal to zero
*/
public synchronized long takeUpTo(long amt) {
long take = Math.min(amt, activePool);
activePool -= take;
return take;
}
/**
* wait for the given number of tokens to be available, and then remove
* them from the pool.
*
* @return the total number of tokens untaken, including wait tokens
*/
public long blockAndTake() {
synchronized (this) {
if (activePool >= nanosPerOp) {
activePool -= nanosPerOp;
return waitingPool + activePool;
}
}
while (true) {
if (lock.tryLock()) {
try {
while (activePool < nanosPerOp) {
dorefill();
}
lockheld.signal();
lockheld.signal();
} finally {
lock.unlock();
}
} else {
try {
lockheld.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
// while (activePool < nanosPerOp) {
// blocks++;
// //System.out.println(ANSI_BrightRed + "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset);
// try {
// wait();
//// wait(maxActivePoolSize / 1000000, (int) maxActivePoolSize % 1000000);
// } catch (InterruptedException ignored) {
// } catch (Exception e) {
// throw new RuntimeException(e);
// }
// //System.out.println("waited for " + amt + "/" + activePool + " tokens");
// }
// //System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset);
//
// activePool -= nanosPerOp;
// return waitingPool + activePool;
}
public synchronized long blockAndTakeOps(long ops) {
long totalNanosNeeded = ops * nanosPerOp;
while (activePool < totalNanosNeeded) {
blocks++;
//System.out.println(ANSI_BrightRed + "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset);
try {
wait();
// wait(maxActivePoolSize / 1000000, (int) maxActivePoolSize % 1000000);
} catch (InterruptedException ignored) {
} catch (Exception e) {
throw new RuntimeException(e);
}
//System.out.println("waited for " + amt + "/" + activePool + " tokens");
}
//System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset);
activePool -= totalNanosNeeded;
return waitingPool + activePool;
}
public synchronized long blockAndTake(long tokens) {
while (activePool < tokens) {
//System.out.println(ANSI_BrightRed + "waiting for " + amt + "/" + activePool + " of max " + maxActivePool + ANSI_Reset);
try {
wait();
// wait(maxActivePoolSize / 1000000, (int) maxActivePoolSize % 1000000);
} catch (InterruptedException ignored) {
} catch (Exception e) {
throw new RuntimeException(e);
}
//System.out.println("waited for " + amt + "/" + activePool + " tokens");
}
//System.out.println(ANSI_BrightYellow + "taking " + amt + "/" + activePool + ANSI_Reset);
activePool -= tokens;
return waitingPool + activePool;
}
public long getWaitTime() {
return activePool + waitingPool;
}
public long getWaitPool() {
return waitingPool;
}
public long getActivePool() {
return activePool;
}
/**
* Add the given number of new tokens to the pool, forcing any amount
* that would spill over the current pool size into the wait token pool, but
* moving up to the configured burst tokens back from the wait token pool
* otherwise.
*
* The amount of backfilling that occurs is controlled by the backfill ratio,
* based on the number of tokens submitted. This causes normalizes the
* backfilling rate to the fill rate, so that it is not sensitive to refill
* scheduling.
*
* @param newTokens The number of new tokens to add to the token pools
* @return the total number of tokens in all pools
*/
public synchronized long refill(long newTokens) {
boolean debugthis = false;
// long debugAt = System.nanoTime();
// if (debugAt>debugTrigger+debugRate) {
// debugTrigger=debugAt;
// debugthis=true;
// }
long needed = Math.max(maxActivePoolSize - activePool, 0L);
long allocatedToActivePool = Math.min(newTokens, needed);
activePool += allocatedToActivePool;
// overflow logic
long allocatedToOverflowPool = newTokens - allocatedToActivePool;
waitingPool += allocatedToOverflowPool;
// backfill logic
double refillFactor = Math.min((double) newTokens / maxActivePoolSize, 1.0D);
long burstFillAllowed = (long) (refillFactor * maxBurstPoolSize);
burstFillAllowed = Math.min(maxActiveAndBurstSize - activePool, burstFillAllowed);
long burstFill = Math.min(burstFillAllowed, waitingPool);
waitingPool -= burstFill;
activePool += burstFill;
if (debugthis) {
System.out.print(this);
System.out.print(ANSI_BrightBlue + " adding=" + allocatedToActivePool);
if (allocatedToOverflowPool > 0) {
System.out.print(ANSI_Red + " OVERFLOW:" + allocatedToOverflowPool + ANSI_Reset);
}
if (burstFill > 0) {
System.out.print(ANSI_BrightGreen + " BACKFILL:" + burstFill + ANSI_Reset);
}
System.out.println();
}
//System.out.println(this);
notifyAll();
return activePool + waitingPool;
}
@Override
public String toString() {
return "Tokens: active=" + activePool + "/" + maxActivePoolSize
+ String.format(
" (%3.1f%%)A (%3.1f%%)B ",
(((double) activePool / (double) maxActivePoolSize) * 100.0),
(((double) activePool / (double) maxActiveAndBurstSize) * 100.0)) + " waiting=" + waitingPool +
" blocks=" + blocks +
" rateSpec:" + ((rateSpec != null) ? rateSpec.toString() : "NULL");
}
public RateSpec getRateSpec() {
return rateSpec;
}
public synchronized long restart() {
long wait = activePool + waitingPool;
activePool = 0L;
waitingPool = 0L;
return wait;
}
private ByteBuffer getBuffer() {
RandomAccessFile image = null;
try {
image = new RandomAccessFile("tokenbucket.binlog", "rw");
ByteBuffer mbb = image.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, image.length());
return mbb;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public synchronized void dorefill() {
lastRefillAt = System.nanoTime();
long nextRefillTime = lastRefillAt + interval;
long thisRefillTime = System.nanoTime();
while (thisRefillTime < nextRefillTime) {
// while (thisRefillTime < lastRefillAt + interval) {
long parkfor = Math.max(nextRefillTime - thisRefillTime, 0L);
//System.out.println(ANSI_Blue + "parking for " + parkfor + "ns" + ANSI_Reset);
LockSupport.parkNanos(parkfor);
thisRefillTime = System.nanoTime();
}
// this.times[iteration]=thisRefillTime;
long delta = thisRefillTime - lastRefillAt;
// this.amounts[iteration]=delta;
lastRefillAt = thisRefillTime;
//System.out.println(this);
refill(delta);
refillTimer.update(delta, TimeUnit.NANOSECONDS);
// iteration++;
}
}

View File

@ -0,0 +1,61 @@
@startuml
scale 600 width
[*] --> TrackedOp : track()
TrackedOp: setCycle(cycle)
TrackedOp: setWaitTime(delay)
TrackedOp: start()
TrackedOp:
TrackedOp: setData(data)
TrackedOp: getData()
TrackedOp: skip(reason)
State InProtocol {
TrackedOp --> StartedOp : start()
StartedOp: getCycle()
StartedOp: setData(data)
StartedOp: getData()
StartedOp: succeed(status)
StartedOp:
StartedOp: retry()
StartedOp: fail(status)
StartedOp: getStartedAtNanos()
StartedOp: getCurrentServiceTimeNanos()
StartedOp: getCurrentResponseTimeNanos()
StartedOp -> StartedOp : retry()
StartedOp --> SucceededOp : succeed()
SucceededOp: getCycle()
SucceededOp: getResult()
SucceededOp: getTries()
SucceededOp: getStartedAtNanos()
SucceededOp: getServiceTimeNanos()
SucceededOp: getResponseTimeNanos()
StartedOp --> FailedOp: fail()
FailedOp: getCycle()
FailedOp: getResult()
FailedOp: getTries()
FailedOp: getStartedAtNanos()
FailedOp: getServiceTimeNanos()
FailedOp: getResponseTimeNanos()
}
TrackedOp --> SkippedOp : skip()
SkippedOp: getSkippedReason()
SkippedOp:
SkippedOp: getCycle()
SkippedOp: getResult()
SkippedOp: getStartedAtNanos()
SkippedOp: getData()
SkippedOp: setData(data)
SucceededOp --> [*]
FailedOp --> [*]
SkippedOp --> [*]
@enduml

View File

@ -0,0 +1,29 @@
@startuml
Participant Input as i
Participant Thread as t
Participant Action as a
== acquire input ==
group TIMER read-input
t -> i : get segment(stride)
activate i
t <- i : <cycle segment>[stride]
deactivate i
end
group TIMER strides
loop over cycle values in segment
group TIMER cycle & phase
t -> a : runCycle(cycle)
activate a
t <- a : result
deactivate a
end
end
end # strides
@enduml

View File

@ -0,0 +1,221 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
contentScriptType="application/ecmascript" contentStyleType="text/css" height="687.6px"
preserveAspectRatio="none"
style="width:919px;height:687px;" version="1.1" viewBox="0 0 919 687" width="919.8px"
zoomAndPan="magnify">
<defs>
<filter height="300%" id="f1a0022fu680ij" width="300%" x="-1" y="-1">
<feGaussianBlur result="blurOut" stdDeviation="3.5999999046325684"/>
<feColorMatrix in="blurOut" result="blurOut2" type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/>
<feOffset dx="7.199999809265137" dy="7.199999809265137" in="blurOut2" result="blurOut3"/>
<feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/>
</filter>
</defs>
<g>
<rect fill="#FFFFFF" filter="url(#f1a0022fu680ij)" height="52.4391"
style="stroke: #A80036; stroke-width: 1.7999999523162842;" width="18" x="80.1"
y="245.8125"/>
<rect fill="#FFFFFF" filter="url(#f1a0022fu680ij)" height="52.4391"
style="stroke: #A80036; stroke-width: 1.7999999523162842;" width="18" x="639.9"
y="493.6078"/>
<rect fill="#FFFFFF" filter="url(#f1a0022fu680ij)" height="135.7172"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="486" x="23.4"
y="177.1734"/>
<rect fill="#FFFFFF" filter="url(#f1a0022fu680ij)" height="247.7953"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="563.4" x="316.8"
y="338.0906"/>
<rect fill="#FFFFFF" filter="url(#f1a0022fu680ij)" height="191.7562"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="527.4" x="334.8"
y="381.5297"/>
<rect fill="#FFFFFF" filter="url(#f1a0022fu680ij)" height="135.7172"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="369" x="352.8"
y="424.9687"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842; stroke-dasharray: 5.0,5.0;"
x1="88.2" x2="88.2"
y1="68.9344" y2="616.4859"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842; stroke-dasharray: 5.0,5.0;"
x1="430.2"
x2="430.2" y1="68.9344" y2="616.4859"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842; stroke-dasharray: 5.0,5.0;"
x1="648" x2="648"
y1="68.9344" y2="616.4859"/>
<rect fill="#FEFECE" filter="url(#f1a0022fu680ij)" height="54.5344"
style="stroke: #A80036; stroke-width: 2.6999999284744263;" width="88.2" x="41.4" y="5.4"/>
<text fill="#000000" font-family="sans-serif" font-size="25.2" lengthAdjust="spacingAndGlyphs"
textLength="63"
x="54" y="41.3912">Input
</text>
<rect fill="#FEFECE" filter="url(#f1a0022fu680ij)" height="54.5344"
style="stroke: #A80036; stroke-width: 2.6999999284744263;" width="88.2" x="41.4"
y="614.6859"/>
<text fill="#000000" font-family="sans-serif" font-size="25.2" lengthAdjust="spacingAndGlyphs"
textLength="63"
x="54" y="650.6771">Input
</text>
<rect fill="#FEFECE" filter="url(#f1a0022fu680ij)" height="54.5344"
style="stroke: #A80036; stroke-width: 2.6999999284744263;" width="113.4" x="370.8"
y="5.4"/>
<text fill="#000000" font-family="sans-serif" font-size="25.2" lengthAdjust="spacingAndGlyphs"
textLength="88.2"
x="383.4" y="41.3912">Thread
</text>
<rect fill="#FEFECE" filter="url(#f1a0022fu680ij)" height="54.5344"
style="stroke: #A80036; stroke-width: 2.6999999284744263;" width="113.4" x="370.8"
y="614.6859"/>
<text fill="#000000" font-family="sans-serif" font-size="25.2" lengthAdjust="spacingAndGlyphs"
textLength="88.2"
x="383.4" y="650.6771">Thread
</text>
<rect fill="#FEFECE" filter="url(#f1a0022fu680ij)" height="54.5344"
style="stroke: #A80036; stroke-width: 2.6999999284744263;" width="102.6" x="594" y="5.4"/>
<text fill="#000000" font-family="sans-serif" font-size="25.2" lengthAdjust="spacingAndGlyphs"
textLength="77.4"
x="606.6" y="41.3912">Action
</text>
<rect fill="#FEFECE" filter="url(#f1a0022fu680ij)" height="54.5344"
style="stroke: #A80036; stroke-width: 2.6999999284744263;" width="102.6" x="594"
y="614.6859"/>
<text fill="#000000" font-family="sans-serif" font-size="25.2" lengthAdjust="spacingAndGlyphs"
textLength="77.4"
x="606.6" y="650.6771">Action
</text>
<rect fill="#FFFFFF" filter="url(#f1a0022fu680ij)" height="52.4391"
style="stroke: #A80036; stroke-width: 1.7999999523162842;" width="18" x="80.1"
y="245.8125"/>
<rect fill="#FFFFFF" filter="url(#f1a0022fu680ij)" height="52.4391"
style="stroke: #A80036; stroke-width: 1.7999999523162842;" width="18" x="639.9"
y="493.6078"/>
<rect fill="#EEEEEE" filter="url(#f1a0022fu680ij)" height="5.4"
style="stroke: #EEEEEE; stroke-width: 1.7999999523162842;" width="892.8" x="5.4"
y="123.9539"/>
<line style="stroke: #000000; stroke-width: 1.7999999523162842;" x1="5.4" x2="898.2"
y1="123.9539"
y2="123.9539"/>
<line style="stroke: #000000; stroke-width: 1.7999999523162842;" x1="5.4" x2="898.2"
y1="129.3539"
y2="129.3539"/>
<rect fill="#EEEEEE" filter="url(#f1a0022fu680ij)" height="41.6391"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="210.6" x="346.5"
y="104.9344"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="176.4" x="357.3" y="133.8548">acquire input
</text>
<rect fill="none" height="135.7172" style="stroke: #000000; stroke-width: 3.5999999046325684;"
width="486"
x="23.4" y="177.1734"/>
<polygon fill="#EEEEEE"
points="23.4,177.1734,331.2,177.1734,331.2,189.7734,313.2,207.7734,23.4,207.7734,23.4,177.1734"
style="stroke: #000000; stroke-width: 3.5999999046325684;"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="226.8" x="50.4" y="200.6938">TIMER read-input
</text>
<polygon fill="#A80036" points="117.9,238.6125,99.9,245.8125,117.9,253.0125,110.7,245.8125"
style="stroke: #A80036; stroke-width: 1.7999999523162842;"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842;" x1="107.1" x2="429.3"
y1="245.8125"
y2="245.8125"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" lengthAdjust="spacingAndGlyphs"
textLength="230.4" x="128.7" y="236.9329">get segment(stride)
</text>
<polygon fill="#A80036" points="409.5,291.0516,427.5,298.2516,409.5,305.4516,416.7,298.2516"
style="stroke: #A80036; stroke-width: 1.7999999523162842;"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842;" x1="89.1" x2="420.3"
y1="298.2516"
y2="298.2516"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" lengthAdjust="spacingAndGlyphs"
textLength="289.8" x="101.7" y="289.372">&lt;cycle segment&gt;[stride]
</text>
<rect fill="none" height="247.7953" style="stroke: #000000; stroke-width: 3.5999999046325684;"
width="563.4"
x="316.8" y="338.0906"/>
<polygon fill="#EEEEEE"
points="316.8,338.0906,577.8,338.0906,577.8,350.6906,559.8,368.6906,316.8,368.6906,316.8,338.0906"
style="stroke: #000000; stroke-width: 3.5999999046325684;"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="180" x="343.8" y="361.611">TIMER strides
</text>
<rect fill="none" height="191.7562" style="stroke: #000000; stroke-width: 3.5999999046325684;"
width="527.4"
x="334.8" y="381.5297"/>
<polygon fill="#EEEEEE"
points="334.8,381.5297,473.4,381.5297,473.4,394.1297,455.4,412.1297,334.8,412.1297,334.8,381.5297"
style="stroke: #000000; stroke-width: 3.5999999046325684;"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="57.6" x="361.8" y="405.0501">loop
</text>
<text fill="#000000" font-family="sans-serif" font-size="19.8" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="352.8" x="500.4" y="403.5085">[over cycle
values in segment]
</text>
<rect fill="none" height="135.7172" style="stroke: #000000; stroke-width: 3.5999999046325684;"
width="369"
x="352.8" y="424.9687"/>
<polygon fill="#EEEEEE"
points="352.8,424.9687,707.4,424.9687,707.4,437.5687,689.4,455.5687,352.8,455.5687,352.8,424.9687"
style="stroke: #000000; stroke-width: 3.5999999046325684;"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="273.6" x="379.8" y="448.4891">TIMER cycle
&amp; phase
</text>
<polygon fill="#A80036" points="618.3,486.4078,636.3,493.6078,618.3,500.8078,625.5,493.6078"
style="stroke: #A80036; stroke-width: 1.7999999523162842;"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842;" x1="431.1" x2="629.1"
y1="493.6078"
y2="493.6078"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" lengthAdjust="spacingAndGlyphs"
textLength="174.6" x="443.7" y="484.7282">runCycle(cycle)
</text>
<polygon fill="#A80036" points="450.9,538.8469,432.9,546.0469,450.9,553.2469,443.7,546.0469"
style="stroke: #A80036; stroke-width: 1.7999999523162842;"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842;" x1="440.1" x2="647.1"
y1="546.0469"
y2="546.0469"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" lengthAdjust="spacingAndGlyphs"
textLength="64.8"
x="461.7" y="537.1673">result
</text><!--
@startuml
Participant Input as i
Participant Thread as t
Participant Action as a
== acquire input ==
group TIMER read-input
t -> i : get segment(stride)
activate i
t <- i : <cycle segment>[stride]
deactivate i
end
group TIMER strides
loop over cycle values in segment
group TIMER cycle & phase
t -> a : runCycle(cycle)
activate a
t <- a : result
deactivate a
end
end
end # strides
@enduml
PlantUML version 1.2017.15(Mon Jul 03 11:45:34 CDT 2017)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Java Version: 1.8.0_152-release-1024-b11
Operating System: Linux
OS Version: 4.10.0-42-generic
Default Encoding: UTF-8
Language: en
Country: US
-->
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,42 @@
@startuml
Participant Input as i
Participant Thread as t
Participant Action as a
== acquire input data ==
group TIMER read-input
t -> i : get segment(stride)
activate i
t <- i : <cycle segment>[stride]
deactivate i
end
group TIMER strides
loop over cycle values in segment
group TIMER cycle
group TIMER phase
t -> a : runCycle(cycle)
activate a
t <- a : result
deactivate a
end
== additional phases ==
group TIMER phase
loop until phases complete
t -> a : runPhase(cycle)
activate a
t <- a : result
deactivate a
end
end
end
end
end # strides
@enduml

View File

@ -0,0 +1,284 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
contentScriptType="application/ecmascript" contentStyleType="text/css" height="1038.6px"
preserveAspectRatio="none" style="width:912px;height:1038px;" version="1.1"
viewBox="0 0 912 1038" width="912.6px" zoomAndPan="magnify">
<defs>
<filter height="300%" id="f1elad485baf09" width="300%" x="-1" y="-1">
<feGaussianBlur result="blurOut" stdDeviation="3.5999999046325684"/>
<feColorMatrix in="blurOut" result="blurOut2" type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/>
<feOffset dx="7.199999809265137" dy="7.199999809265137" in="blurOut2" result="blurOut3"/>
<feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/>
</filter>
</defs>
<g>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="52.4391"
style="stroke: #A80036; stroke-width: 1.7999999523162842;" width="18" x="80.1"
y="245.8125"/>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="52.4391"
style="stroke: #A80036; stroke-width: 1.7999999523162842;" width="18" x="648.9"
y="537.0469"/>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="52.4391"
style="stroke: #A80036; stroke-width: 1.7999999523162842;" width="18" x="648.9"
y="819.0422"/>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="135.7172"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="486" x="23.4"
y="177.1734"/>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="598.4297"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="592.2" x="280.8"
y="338.0906"/>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="542.3906"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="556.2" x="298.8"
y="381.5297"/>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="486.3515"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="520.2" x="316.8"
y="424.9687"/>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="135.7172"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="378" x="352.8"
y="468.4078"/>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="191.7562"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="484.2" x="334.8"
y="706.964"/>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="135.7172"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="448.2" x="352.8"
y="750.4031"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842; stroke-dasharray: 5.0,5.0;"
x1="88.2" x2="88.2" y1="68.9344" y2="967.1203"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842; stroke-dasharray: 5.0,5.0;"
x1="430.2" x2="430.2" y1="68.9344" y2="967.1203"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842; stroke-dasharray: 5.0,5.0;"
x1="657" x2="657" y1="68.9344" y2="967.1203"/>
<rect fill="#FEFECE" filter="url(#f1elad485baf09)" height="54.5344"
style="stroke: #A80036; stroke-width: 2.6999999284744263;" width="88.2" x="41.4" y="5.4"/>
<text fill="#000000" font-family="sans-serif" font-size="25.2" lengthAdjust="spacingAndGlyphs"
textLength="63" x="54" y="41.3912">Input
</text>
<rect fill="#FEFECE" filter="url(#f1elad485baf09)" height="54.5344"
style="stroke: #A80036; stroke-width: 2.6999999284744263;" width="88.2" x="41.4"
y="965.3203"/>
<text fill="#000000" font-family="sans-serif" font-size="25.2" lengthAdjust="spacingAndGlyphs"
textLength="63" x="54" y="1001.3115">Input
</text>
<rect fill="#FEFECE" filter="url(#f1elad485baf09)" height="54.5344"
style="stroke: #A80036; stroke-width: 2.6999999284744263;" width="113.4" x="370.8"
y="5.4"/>
<text fill="#000000" font-family="sans-serif" font-size="25.2" lengthAdjust="spacingAndGlyphs"
textLength="88.2" x="383.4" y="41.3912">Thread
</text>
<rect fill="#FEFECE" filter="url(#f1elad485baf09)" height="54.5344"
style="stroke: #A80036; stroke-width: 2.6999999284744263;" width="113.4" x="370.8"
y="965.3203"/>
<text fill="#000000" font-family="sans-serif" font-size="25.2" lengthAdjust="spacingAndGlyphs"
textLength="88.2" x="383.4" y="1001.3115">Thread
</text>
<rect fill="#FEFECE" filter="url(#f1elad485baf09)" height="54.5344"
style="stroke: #A80036; stroke-width: 2.6999999284744263;" width="102.6" x="603" y="5.4"/>
<text fill="#000000" font-family="sans-serif" font-size="25.2" lengthAdjust="spacingAndGlyphs"
textLength="77.4" x="615.6" y="41.3912">Action
</text>
<rect fill="#FEFECE" filter="url(#f1elad485baf09)" height="54.5344"
style="stroke: #A80036; stroke-width: 2.6999999284744263;" width="102.6" x="603"
y="965.3203"/>
<text fill="#000000" font-family="sans-serif" font-size="25.2" lengthAdjust="spacingAndGlyphs"
textLength="77.4" x="615.6" y="1001.3115">Action
</text>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="52.4391"
style="stroke: #A80036; stroke-width: 1.7999999523162842;" width="18" x="80.1"
y="245.8125"/>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="52.4391"
style="stroke: #A80036; stroke-width: 1.7999999523162842;" width="18" x="648.9"
y="537.0469"/>
<rect fill="#FFFFFF" filter="url(#f1elad485baf09)" height="52.4391"
style="stroke: #A80036; stroke-width: 1.7999999523162842;" width="18" x="648.9"
y="819.0422"/>
<rect fill="#EEEEEE" filter="url(#f1elad485baf09)" height="5.4"
style="stroke: #EEEEEE; stroke-width: 1.7999999523162842;" width="885.6" x="5.4"
y="123.9539"/>
<line style="stroke: #000000; stroke-width: 1.7999999523162842;" x1="5.4" x2="891" y1="123.9539"
y2="123.9539"/>
<line style="stroke: #000000; stroke-width: 1.7999999523162842;" x1="5.4" x2="891" y1="129.3539"
y2="129.3539"/>
<rect fill="#EEEEEE" filter="url(#f1elad485baf09)" height="41.6391"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="280.8" x="307.8"
y="104.9344"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="246.6" x="318.6" y="133.8548">acquire input
data
</text>
<rect fill="none" height="135.7172" style="stroke: #000000; stroke-width: 3.5999999046325684;"
width="486" x="23.4" y="177.1734"/>
<polygon fill="#EEEEEE"
points="23.4,177.1734,331.2,177.1734,331.2,189.7734,313.2,207.7734,23.4,207.7734,23.4,177.1734"
style="stroke: #000000; stroke-width: 3.5999999046325684;"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="226.8" x="50.4" y="200.6938">TIMER read-input
</text>
<polygon fill="#A80036" points="117.9,238.6125,99.9,245.8125,117.9,253.0125,110.7,245.8125"
style="stroke: #A80036; stroke-width: 1.7999999523162842;"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842;" x1="107.1" x2="429.3"
y1="245.8125" y2="245.8125"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" lengthAdjust="spacingAndGlyphs"
textLength="230.4" x="128.7" y="236.9329">get segment(stride)
</text>
<polygon fill="#A80036" points="409.5,291.0516,427.5,298.2516,409.5,305.4516,416.7,298.2516"
style="stroke: #A80036; stroke-width: 1.7999999523162842;"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842;" x1="89.1" x2="420.3"
y1="298.2516" y2="298.2516"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" lengthAdjust="spacingAndGlyphs"
textLength="289.8" x="101.7" y="289.372">&lt;cycle segment&gt;[stride]
</text>
<rect fill="none" height="598.4297" style="stroke: #000000; stroke-width: 3.5999999046325684;"
width="592.2" x="280.8" y="338.0906"/>
<polygon fill="#EEEEEE"
points="280.8,338.0906,541.8,338.0906,541.8,350.6906,523.8,368.6906,280.8,368.6906,280.8,338.0906"
style="stroke: #000000; stroke-width: 3.5999999046325684;"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="180" x="307.8" y="361.611">TIMER strides
</text>
<rect fill="none" height="542.3906" style="stroke: #000000; stroke-width: 3.5999999046325684;"
width="556.2" x="298.8" y="381.5297"/>
<polygon fill="#EEEEEE"
points="298.8,381.5297,437.4,381.5297,437.4,394.1297,419.4,412.1297,298.8,412.1297,298.8,381.5297"
style="stroke: #000000; stroke-width: 3.5999999046325684;"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="57.6" x="325.8" y="405.0501">loop
</text>
<text fill="#000000" font-family="sans-serif" font-size="19.8" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="352.8" x="464.4" y="403.5085">[over cycle
values in segment]
</text>
<rect fill="none" height="486.3515" style="stroke: #000000; stroke-width: 3.5999999046325684;"
width="520.2" x="316.8" y="424.9687"/>
<polygon fill="#EEEEEE"
points="316.8,424.9687,552.6,424.9687,552.6,437.5687,534.6,455.5687,316.8,455.5687,316.8,424.9687"
style="stroke: #000000; stroke-width: 3.5999999046325684;"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="154.8" x="343.8" y="448.4891">TIMER cycle
</text>
<rect fill="none" height="135.7172" style="stroke: #000000; stroke-width: 3.5999999046325684;"
width="378" x="352.8" y="468.4078"/>
<polygon fill="#EEEEEE"
points="352.8,468.4078,603,468.4078,603,481.0078,585,499.0078,352.8,499.0078,352.8,468.4078"
style="stroke: #000000; stroke-width: 3.5999999046325684;"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="169.2" x="379.8" y="491.9282">TIMER phase
</text>
<polygon fill="#A80036" points="627.3,529.8469,645.3,537.0469,627.3,544.2469,634.5,537.0469"
style="stroke: #A80036; stroke-width: 1.7999999523162842;"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842;" x1="431.1" x2="638.1"
y1="537.0469" y2="537.0469"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" lengthAdjust="spacingAndGlyphs"
textLength="174.6" x="443.7" y="528.1673">runCycle(cycle)
</text>
<polygon fill="#A80036" points="450.9,582.2859,432.9,589.4859,450.9,596.6859,443.7,589.4859"
style="stroke: #A80036; stroke-width: 1.7999999523162842;"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842;" x1="440.1" x2="656.1"
y1="589.4859" y2="589.4859"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" lengthAdjust="spacingAndGlyphs"
textLength="64.8" x="461.7" y="580.6063">result
</text>
<rect fill="#EEEEEE" filter="url(#f1elad485baf09)" height="5.4"
style="stroke: #EEEEEE; stroke-width: 1.7999999523162842;" width="885.6" x="5.4"
y="653.7445"/>
<line style="stroke: #000000; stroke-width: 1.7999999523162842;" x1="5.4" x2="891" y1="653.7445"
y2="653.7445"/>
<line style="stroke: #000000; stroke-width: 1.7999999523162842;" x1="5.4" x2="891" y1="659.1445"
y2="659.1445"/>
<rect fill="#EEEEEE" filter="url(#f1elad485baf09)" height="41.6391"
style="stroke: #000000; stroke-width: 3.5999999046325684;" width="271.8" x="312.3"
y="634.725"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="237.6" x="323.1" y="663.6454">additional
phases
</text>
<rect fill="none" height="191.7562" style="stroke: #000000; stroke-width: 3.5999999046325684;"
width="484.2" x="334.8" y="706.964"/>
<polygon fill="#EEEEEE"
points="334.8,706.964,585,706.964,585,719.564,567,737.564,334.8,737.564,334.8,706.964"
style="stroke: #000000; stroke-width: 3.5999999046325684;"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="169.2" x="361.8" y="730.4845">TIMER phase
</text>
<rect fill="none" height="135.7172" style="stroke: #000000; stroke-width: 3.5999999046325684;"
width="448.2" x="352.8" y="750.4031"/>
<polygon fill="#EEEEEE"
points="352.8,750.4031,491.4,750.4031,491.4,763.0031,473.4,781.0031,352.8,781.0031,352.8,750.4031"
style="stroke: #000000; stroke-width: 3.5999999046325684;"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="57.6" x="379.8" y="773.9235">loop
</text>
<text fill="#000000" font-family="sans-serif" font-size="19.8" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="273.6" x="518.4" y="772.3819">[until phases
complete]
</text>
<polygon fill="#A80036" points="627.3,811.8422,645.3,819.0422,627.3,826.2422,634.5,819.0422"
style="stroke: #A80036; stroke-width: 1.7999999523162842;"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842;" x1="431.1" x2="638.1"
y1="819.0422" y2="819.0422"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" lengthAdjust="spacingAndGlyphs"
textLength="183.6" x="443.7" y="810.1626">runPhase(cycle)
</text>
<polygon fill="#A80036" points="450.9,864.2812,432.9,871.4812,450.9,878.6812,443.7,871.4812"
style="stroke: #A80036; stroke-width: 1.7999999523162842;"/>
<line style="stroke: #A80036; stroke-width: 1.7999999523162842;" x1="440.1" x2="656.1"
y1="871.4812" y2="871.4812"/>
<text fill="#000000" font-family="sans-serif" font-size="23.4" lengthAdjust="spacingAndGlyphs"
textLength="64.8" x="461.7" y="862.6016">result
</text><!--
@startuml
Participant Input as i
Participant Thread as t
Participant Action as a
== acquire input data ==
group TIMER read-input
t -> i : get segment(stride)
activate i
t <- i : <cycle segment>[stride]
deactivate i
end
group TIMER strides
loop over cycle values in segment
group TIMER cycle
group TIMER phase
t -> a : runCycle(cycle)
activate a
t <- a : result
deactivate a
end
== additional phases ==
group TIMER phase
loop until phases complete
t -> a : runPhase(cycle)
activate a
t <- a : result
deactivate a
end
end
end
end
end # strides
@enduml
PlantUML version 1.2017.15(Mon Jul 03 11:45:34 CDT 2017)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Java Version: 1.8.0_152-release-1024-b11
Operating System: Linux
OS Version: 4.10.0-42-generic
Default Encoding: UTF-8
Language: en
Country: US
-->
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,38 @@
@startuml
Participant user as u
Participant client as c
Participant resource as cr
Participant transport as t
Participant server as s
group responsetime
u -> c: request
activate c #Black
group waittime
c -> cr: wait
activate cr #Yellow
note left of cr: client\nwaits\nfor\nresource
cr -> c:
deactivate cr
end
group servicetime
c ->> t: request
activate t #Red
group servertime
t ->> s: request
deactivate t
activate s #Blue
note right of s: server\nprocesses\nrequest
s ->> t: response
deactivate s
activate t #Red
end
t ->> c: response
deactivate t
end
c -> u: response
deactivate c
end
@enduml

View File

@ -0,0 +1,30 @@
@startuml
Participant user as u
Participant client as c
Participant resource as cr
Participant server as s
group responsetime
u -> c: request
activate c #Black
' note left of c: user\nwaits\nfor\nresponse
group waittime
c -> cr: wait
activate cr #Yellow
note right of cr: client\nwaits\nfor\nresource
cr -> c:
deactivate cr
end
group servicetime
c ->> s: request
activate s #Blue
note right of s: server\nprocesses\nrequest
s ->> c: response
deactivate s
end
c -> u: response
deactivate c
end
@enduml

View File

@ -0,0 +1,235 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
contentScriptType="application/ecmascript" contentStyleType="text/css" height="808px"
preserveAspectRatio="none" style="width:683px;height:808px;" version="1.1"
viewBox="0 0 683 808" width="683.2px" zoomAndPan="magnify">
<defs>
<filter height="300%" id="f1bddk88ttqrkr" width="300%" x="-1" y="-1">
<feGaussianBlur result="blurOut" stdDeviation="3.200000047683716"/>
<feColorMatrix in="blurOut" result="blurOut2" type="matrix"
values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/>
<feOffset dx="6.400000095367432" dy="6.400000095367432" in="blurOut2" result="blurOut3"/>
<feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/>
</filter>
</defs>
<g>
<rect fill="#000000" filter="url(#f1bddk88ttqrkr)" height="554.7625"
style="stroke: #A80036; stroke-width: 1.600000023841858;" width="16" x="208.8"
y="149.4875"/>
<rect fill="#FFFF00" filter="url(#f1bddk88ttqrkr)" height="157.8625"
style="stroke: #A80036; stroke-width: 1.600000023841858;" width="16" x="335.2"
y="234.7125"/>
<rect fill="#0000FF" filter="url(#f1bddk88ttqrkr)" height="157.65"
style="stroke: #A80036; stroke-width: 1.600000023841858;" width="16" x="466.4"
y="488.7875"/>
<rect fill="#FFFFFF" filter="url(#f1bddk88ttqrkr)" height="628.7875"
style="stroke: #000000; stroke-width: 3.200000047683716;" width="644.8" x="20.8"
y="88.475"/>
<rect fill="#FFFFFF" filter="url(#f1bddk88ttqrkr)" height="231.675"
style="stroke: #000000; stroke-width: 3.200000047683716;" width="348.8" x="155.2"
y="173.7"/>
<rect fill="#FFFFFF" filter="url(#f1bddk88ttqrkr)" height="231.675"
style="stroke: #000000; stroke-width: 3.200000047683716;" width="494.4" x="155.2"
y="427.775"/>
<line style="stroke: #A80036; stroke-width: 1.600000023841858; stroke-dasharray: 5.0,5.0;"
x1="75.2" x2="75.2" y1="61.275" y2="744.4625"/>
<line style="stroke: #A80036; stroke-width: 1.600000023841858; stroke-dasharray: 5.0,5.0;"
x1="216" x2="216" y1="61.275" y2="744.4625"/>
<line style="stroke: #A80036; stroke-width: 1.600000023841858; stroke-dasharray: 5.0,5.0;"
x1="342.4" x2="342.4" y1="61.275" y2="744.4625"/>
<line style="stroke: #A80036; stroke-width: 1.600000023841858; stroke-dasharray: 5.0,5.0;"
x1="473.6" x2="473.6" y1="61.275" y2="744.4625"/>
<rect fill="#FEFECE" filter="url(#f1bddk88ttqrkr)" height="48.475"
style="stroke: #A80036; stroke-width: 2.400000035762787;" width="72" x="36.8" y="4.8"/>
<text fill="#000000" font-family="sans-serif" font-size="22.4" lengthAdjust="spacingAndGlyphs"
textLength="49.6" x="48" y="36.7922">user
</text>
<rect fill="#FEFECE" filter="url(#f1bddk88ttqrkr)" height="48.475"
style="stroke: #A80036; stroke-width: 2.400000035762787;" width="72" x="36.8"
y="742.8625"/>
<text fill="#000000" font-family="sans-serif" font-size="22.4" lengthAdjust="spacingAndGlyphs"
textLength="49.6" x="48" y="774.8547">user
</text>
<rect fill="#FEFECE" filter="url(#f1bddk88ttqrkr)" height="48.475"
style="stroke: #A80036; stroke-width: 2.400000035762787;" width="84.8" x="171.2" y="4.8"/>
<text fill="#000000" font-family="sans-serif" font-size="22.4" lengthAdjust="spacingAndGlyphs"
textLength="62.4" x="182.4" y="36.7922">client
</text>
<rect fill="#FEFECE" filter="url(#f1bddk88ttqrkr)" height="48.475"
style="stroke: #A80036; stroke-width: 2.400000035762787;" width="84.8" x="171.2"
y="742.8625"/>
<text fill="#000000" font-family="sans-serif" font-size="22.4" lengthAdjust="spacingAndGlyphs"
textLength="62.4" x="182.4" y="774.8547">client
</text>
<rect fill="#FEFECE" filter="url(#f1bddk88ttqrkr)" height="48.475"
style="stroke: #A80036; stroke-width: 2.400000035762787;" width="123.2" x="278.4"
y="4.8"/>
<text fill="#000000" font-family="sans-serif" font-size="22.4" lengthAdjust="spacingAndGlyphs"
textLength="100.8" x="289.6" y="36.7922">resource
</text>
<rect fill="#FEFECE" filter="url(#f1bddk88ttqrkr)" height="48.475"
style="stroke: #A80036; stroke-width: 2.400000035762787;" width="123.2" x="278.4"
y="742.8625"/>
<text fill="#000000" font-family="sans-serif" font-size="22.4" lengthAdjust="spacingAndGlyphs"
textLength="100.8" x="289.6" y="774.8547">resource
</text>
<rect fill="#FEFECE" filter="url(#f1bddk88ttqrkr)" height="48.475"
style="stroke: #A80036; stroke-width: 2.400000035762787;" width="94.4" x="424" y="4.8"/>
<text fill="#000000" font-family="sans-serif" font-size="22.4" lengthAdjust="spacingAndGlyphs"
textLength="72" x="435.2" y="36.7922">server
</text>
<rect fill="#FEFECE" filter="url(#f1bddk88ttqrkr)" height="48.475"
style="stroke: #A80036; stroke-width: 2.400000035762787;" width="94.4" x="424"
y="742.8625"/>
<text fill="#000000" font-family="sans-serif" font-size="22.4" lengthAdjust="spacingAndGlyphs"
textLength="72" x="435.2" y="774.8547">server
</text>
<rect fill="#000000" filter="url(#f1bddk88ttqrkr)" height="554.7625"
style="stroke: #A80036; stroke-width: 1.600000023841858;" width="16" x="208.8"
y="149.4875"/>
<rect fill="#FFFF00" filter="url(#f1bddk88ttqrkr)" height="157.8625"
style="stroke: #A80036; stroke-width: 1.600000023841858;" width="16" x="335.2"
y="234.7125"/>
<rect fill="#0000FF" filter="url(#f1bddk88ttqrkr)" height="157.65"
style="stroke: #A80036; stroke-width: 1.600000023841858;" width="16" x="466.4"
y="488.7875"/>
<path d="M20.8,88.475 L252.8,88.475 L252.8,99.675 L236.8,115.675 L20.8,115.675 L20.8,88.475 "
fill="#EEEEEE" style="stroke: #000000; stroke-width: 1.600000023841858;"/>
<rect fill="none" height="628.7875" style="stroke: #000000; stroke-width: 3.200000047683716;"
width="644.8" x="20.8" y="88.475"/>
<text fill="#000000" font-family="sans-serif" font-size="20.8" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="160" x="44.8" y="109.382">responsetime
</text>
<polygon fill="#A80036" points="189.6,143.0875,205.6,149.4875,189.6,155.8875,196,149.4875"
style="stroke: #A80036; stroke-width: 1.600000023841858;"/>
<line style="stroke: #A80036; stroke-width: 1.600000023841858;" x1="76" x2="199.2" y1="149.4875"
y2="149.4875"/>
<text fill="#000000" font-family="sans-serif" font-size="20.8" lengthAdjust="spacingAndGlyphs"
textLength="78.4" x="87.2" y="141.5945">request
</text>
<path d="M155.2,173.7 L329.6,173.7 L329.6,184.9 L313.6,200.9 L155.2,200.9 L155.2,173.7 "
fill="#EEEEEE" style="stroke: #000000; stroke-width: 1.600000023841858;"/>
<rect fill="none" height="231.675" style="stroke: #000000; stroke-width: 3.200000047683716;"
width="348.8" x="155.2" y="173.7"/>
<text fill="#000000" font-family="sans-serif" font-size="20.8" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="102.4" x="179.2" y="194.607">waittime
</text>
<polygon fill="#A80036" points="316,228.3125,332,234.7125,316,241.1125,322.4,234.7125"
style="stroke: #A80036; stroke-width: 1.600000023841858;"/>
<line style="stroke: #A80036; stroke-width: 1.600000023841858;" x1="224.8" x2="325.6"
y1="234.7125" y2="234.7125"/>
<text fill="#000000" font-family="sans-serif" font-size="20.8" lengthAdjust="spacingAndGlyphs"
textLength="44.8" x="236" y="226.8195">wait
</text>
<path
d="M358.4,255.725 L358.4,367.725 L481.6,367.725 L481.6,271.725 L465.6,255.725 L358.4,255.725 "
fill="#FBFB77" filter="url(#f1bddk88ttqrkr)"
style="stroke: #A80036; stroke-width: 1.600000023841858;"/>
<path d="M465.6,255.725 L465.6,271.725 L481.6,271.725 L465.6,255.725 " fill="#FBFB77"
style="stroke: #A80036; stroke-width: 1.600000023841858;"/>
<text fill="#000000" font-family="sans-serif" font-size="20.8" lengthAdjust="spacingAndGlyphs"
textLength="57.6" x="368" y="283.032">client
</text>
<text fill="#000000" font-family="sans-serif" font-size="20.8" lengthAdjust="spacingAndGlyphs"
textLength="56" x="368" y="307.2445">waits
</text>
<text fill="#000000" font-family="sans-serif" font-size="20.8" lengthAdjust="spacingAndGlyphs"
textLength="28.8" x="368" y="331.457">for
</text>
<text fill="#000000" font-family="sans-serif" font-size="20.8" lengthAdjust="spacingAndGlyphs"
textLength="89.6" x="368" y="355.6695">resource
</text>
<polygon fill="#A80036" points="242.4,386.175,226.4,392.575,242.4,398.975,236,392.575"
style="stroke: #A80036; stroke-width: 1.600000023841858;"/>
<line style="stroke: #A80036; stroke-width: 1.600000023841858;" x1="232.8" x2="341.6"
y1="392.575" y2="392.575"/>
<path
d="M155.2,427.775 L363.2,427.775 L363.2,438.975 L347.2,454.975 L155.2,454.975 L155.2,427.775 "
fill="#EEEEEE" style="stroke: #000000; stroke-width: 1.600000023841858;"/>
<rect fill="none" height="231.675" style="stroke: #000000; stroke-width: 3.200000047683716;"
width="494.4" x="155.2" y="427.775"/>
<text fill="#000000" font-family="sans-serif" font-size="20.8" font-weight="bold"
lengthAdjust="spacingAndGlyphs" textLength="136" x="179.2" y="448.682">servicetime
</text>
<line style="stroke: #A80036; stroke-width: 1.600000023841858;" x1="463.2" x2="447.2"
y1="488.7875" y2="482.3875"/>
<line style="stroke: #A80036; stroke-width: 1.600000023841858;" x1="463.2" x2="447.2"
y1="488.7875" y2="495.1875"/>
<line style="stroke: #A80036; stroke-width: 1.600000023841858;" x1="224.8" x2="464.8"
y1="488.7875" y2="488.7875"/>
<text fill="#000000" font-family="sans-serif" font-size="20.8" lengthAdjust="spacingAndGlyphs"
textLength="78.4" x="236" y="480.8945">request
</text>
<path d="M489.6,509.8 L489.6,597.8 L627.2,597.8 L627.2,525.8 L611.2,509.8 L489.6,509.8 "
fill="#FBFB77" filter="url(#f1bddk88ttqrkr)"
style="stroke: #A80036; stroke-width: 1.600000023841858;"/>
<path d="M611.2,509.8 L611.2,525.8 L627.2,525.8 L611.2,509.8 " fill="#FBFB77"
style="stroke: #A80036; stroke-width: 1.600000023841858;"/>
<text fill="#000000" font-family="sans-serif" font-size="20.8" lengthAdjust="spacingAndGlyphs"
textLength="65.6" x="499.2" y="537.107">server
</text>
<text fill="#000000" font-family="sans-serif" font-size="20.8" lengthAdjust="spacingAndGlyphs"
textLength="104" x="499.2" y="561.3195">processes
</text>
<text fill="#000000" font-family="sans-serif" font-size="20.8" lengthAdjust="spacingAndGlyphs"
textLength="78.4" x="499.2" y="585.532">request
</text>
<line style="stroke: #A80036; stroke-width: 1.600000023841858;" x1="224.8" x2="240.8"
y1="646.4375" y2="640.0375"/>
<line style="stroke: #A80036; stroke-width: 1.600000023841858;" x1="224.8" x2="240.8"
y1="646.4375" y2="652.8375"/>
<line style="stroke: #A80036; stroke-width: 1.600000023841858;" x1="224.8" x2="472.8"
y1="646.4375" y2="646.4375"/>
<text fill="#000000" font-family="sans-serif" font-size="20.8" lengthAdjust="spacingAndGlyphs"
textLength="94.4" x="252" y="638.5445">response
</text>
<polygon fill="#A80036" points="93.6,697.85,77.6,704.25,93.6,710.65,87.2,704.25"
style="stroke: #A80036; stroke-width: 1.600000023841858;"/>
<line style="stroke: #A80036; stroke-width: 1.600000023841858;" x1="84" x2="215.2" y1="704.25"
y2="704.25"/>
<text fill="#000000" font-family="sans-serif" font-size="20.8" lengthAdjust="spacingAndGlyphs"
textLength="94.4" x="103.2" y="696.357">response
</text><!--
@startuml
Participant user as u
Participant client as c
Participant resource as cr
Participant server as s
group responsetime
u -> c: request
activate c #Black
group waittime
c -> cr: wait
activate cr #Yellow
note right of cr: client\nwaits\nfor\nresource
cr -> c:
deactivate cr
end
group servicetime
c ->> s: request
activate s #Blue
note right of s: server\nprocesses\nrequest
s ->> c: response
deactivate s
end
c -> u: response
deactivate c
end
@enduml
PlantUML version 1.2018.01(Sun Jan 28 12:08:22 CST 2018)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Java Version: 1.8.0_152-release-1248-b8
Operating System: Linux
OS Version: 4.15.0-33-generic
Default Encoding: UTF-8
Language: en
Country: US
-->
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@ -0,0 +1,78 @@
<svg width="407.5" height="552" version="1.1" baseProfile="full" viewbox="0 0 407.5 552"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:ev="http://www.w3.org/2001/xml-events"
style="font-weight:bold; font-size:12pt; font-family:'Calibri', Helvetica, sans-serif;;stroke-width:3;stroke-linejoin:round;stroke-linecap:round">
<path d="M265.8 43.5 L265.8 63.5 L265.8 83.5 L265.8 83.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M265.8 114.5 L265.8 134.5 L265.8 154.5 L265.8 154.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M260.4 141.2 L265.8 147.8 L271.1 141.2 L265.8 154.5 Z"
style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
<path d="M227.4 185.5 L178 205.5 L178 225.5 L178 225.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M304.1 185.5 L353.5 205.5 L353.5 225.5 L353.5 225.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M178 256.5 L178 276.5 L178 296.5 L178 296.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M172.7 283.2 L178 289.8 L183.3 283.2 L178 296.5 Z"
style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
<path d="M169.3 327.5 L158 347.5 L169.3 367.5 L169.3 367.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M136.5 325 L64.5 347.5 L64.5 367.5 L64.5 367.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M64.5 398.5 L64.5 418.5 L64.5 438.5 L64.5 438.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M59.2 425.2 L64.5 431.8 L69.8 425.2 L64.5 438.5 Z"
style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
<path d="M64.5 469.5 L64.5 489.5 L238.8 521.7 L238.8 521.7 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M224.7 524.5 L232.2 520.5 L226.6 514.1 L238.8 521.7 Z"
style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
<path d="M219.5 326.9 L277 347.5 L277 367.5 L277 367.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M277 398.5 L277 418.5 L277 438.5 L277 438.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M271.7 425.2 L277 431.8 L282.3 425.2 L277 438.5 Z"
style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
<path d="M277 469.5 L277 489.5 L263.7 509.5 L263.7 509.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M266.6 495.4 L267.4 503.9 L275.5 501.3 L263.7 509.5 Z"
style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
<path d="M186.7 367.5 L198 347.5 L186.7 327.5 L186.7 327.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M197.9 336.5 L190 333.3 L188.6 341.7 L186.7 327.5 Z"
style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
<path d="M353.5 256.5 L353.5 276.5 L353.5 296.5 L353.5 296.5 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M348.2 283.2 L353.5 289.8 L358.8 283.2 L353.5 296.5 Z"
style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
<path d="M353.5 327.5 L353.5 347.5 L353.5 489.5 L353.5 489.5 L268.8 519.2 L268.8 519.2 "
style="stroke:#33322E;fill:none;stroke-dasharray:none;"></path>
<path d="M279.6 509.8 L275 517 L283.1 519.9 L268.8 519.2 Z"
style="stroke:#33322E;fill:#33322E;stroke-dasharray:none;"></path>
<circle r="12" cx="265.8" cy="28.5" style="stroke:none; fill:#33322E;"></circle>
<circle r="10" cx="253.8" cy="524.5"
style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></circle>
<circle r="6" cx="253.8" cy="524.5" style="stroke:none; fill:#33322E;"></circle>
<text x="241.8" y="105" style="font-weight:normal;">track</text>
<text x="154.8" y="247" style="font-weight:normal;">start</text>
<text x="334.5" y="247" style="font-weight:normal;">skip</text>
<text x="154.8" y="389" style="font-weight:normal;">retry</text>
<text x="31.8" y="389" style="font-weight:normal;">succeed</text>
<text x="258.5" y="389" style="font-weight:normal;">fail</text>
<rect x="224.5" y="154.5" height="31" width="83"
style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
<text x="232.8" y="176" style="">tracked</text>
<rect x="136.5" y="296.5" height="31" width="83"
style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
<text x="144.8" y="318" style="">started</text>
<rect x="13.5" y="438.5" height="31" width="102"
style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
<text x="21.8" y="460" style="">succeeded</text>
<rect x="240.5" y="438.5" height="31" width="73"
style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
<text x="248.5" y="460" style="">failed</text>
<rect x="312.5" y="296.5" height="31" width="83"
style="stroke:#33322E;fill:#eee8d5;stroke-dasharray:none;"></rect>
<text x="320.8" y="318" style="">skipped</text>
</svg>

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -0,0 +1,7 @@
- io.nosqlbench.engine.<module name>
- io.nosqlbench.extensions.<extension name>
- io.nosqlbench.activitytypes.<activity type name>
- io.nosqlbench.virtdata.<module-name>
- io.nosqlbench.virtdata.library.<library name>
- io.nosqlbench.docs. ...

0
sort_docs/parts.puml Normal file
View File

View File

@ -0,0 +1,82 @@
@startuml
Participant "Calling\nThread" as t
Participant "Limiter\nlogic" as l
Participant "Allocated\nnanos" as a
Participant "Elapsed\nnanos" as e
Participant "Clock\nSource" as c
t -> l : acquire(nanos)
group allocate start time
l -> a : getAndIncrement(nanos)
activate a #black
note over l,a
**allocated** is an atomic accumulator
which represents scheduled time. Each
op causes it to be atomically incremented
by a time slice of nanos.
end note
a -> l : <scheduled_at>
deactivate a
end
group calculate delay (cached)
l -> e : get()
activate e
note over e
**elapsed** is an
atomic register
which caches
system time.
end note
e -> l : <elapsed>
deactivate e
l -> l : delay = \nelapsed - scheduled_at
note right
**delay** measures external delay
that causes an op to fire after
the ideal time. **positive delay**
thus means the rate limiter doesn't
need to impose its own blocking delay
in order to ensure delay>=0.
end note
end
group if delay<0 (cached)
note over l,c
If delay<0, then this operation is too soon according
to the cached clock value. Since this could be stale
and cause us to block needlessly, we update the cached
clock value and recompute delay.
end note
l -> c : get() (~25ns)
activate c #orange
c -> l : <elapsed>
deactivate c
l -> e : store(<elapsed>)
activate e #black
e -> l
deactivate e
l -> l : delay = \nelapsed - scheduled_at
group if delay<0 (updated)
l->l: sleep(-delay);\ndelay=0
note right
If delay is negative, we sleep
in the calling thread and
set delay=0
end note
activate l
deactivate l
end
end
l->t: <delay>
@enduml

View File

@ -0,0 +1,47 @@
@startuml
scale 100 as 100 pixels
Title Rate Limiter - **Timelines**
robust "typical" as W1
@W1
0 is past
100 is allocated #yellow
200 is scheduled #lightgreen
632 is now #lightblue
W1@100 <-> @200: schedule\ndelay
W1@200 <-> @632:
robust "no waittime" as W2
@W2
0 is past
200 is allocated #yellow
200.000001 is scheduled #lightgreen
632 is now #lightblue
robust "caughtup" as W3
@W3
0 is past
100 is allocated #yellow
200.000001 is scheduled #lightgreen
232 is now #lightblue
robust "ahead" as W4
@W4
0 is past
100 is allocated #yellow
200.000001 is scheduled #lightgreen
232 is now #lightblue
concise "perfect ops" as O
@O
0 is op
+100 is op
+100 is op
+100 is op
+100 is op
+100 is op
+100 is op
+100 is op
+100 is op
@enduml

View File

@ -0,0 +1,540 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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"
sodipodi:docname="multivariate.svg"
inkscape:version="1.0beta1 (1:0.92.0+devel+201910161548+5c30636)"
id="svg8"
version="1.1"
viewBox="0 0 279.4 292.1"
height="11.5in"
width="11in">
<defs
id="defs2">
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="marker10162"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path10160"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.4,0,0,-0.4,-4,0)"/>
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="marker5537"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path5535"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.4,0,0,-0.4,-4,0)"/>
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="Arrow1Mend"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
transform="scale(0.4) rotate(180) translate(10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path3422"/>
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="Arrow1Lend"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Lend">
<path
transform="scale(0.8) rotate(180) translate(12.5,0)"
style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path3416"/>
</marker>
<linearGradient
id="linearGradient983"
inkscape:collect="always">
<stop
id="stop979"
offset="0"
style="stop-color:#000000;stop-opacity:1;"/>
<stop
id="stop981"
offset="1"
style="stop-color:#000000;stop-opacity:0;"/>
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="63.5"
x2="173.12723"
y1="63.5"
x1="131.67278"
id="linearGradient985"
xlink:href="#linearGradient983"
inkscape:collect="always"/>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="63.5"
x2="173.12723"
y1="63.5"
x1="131.67278"
id="linearGradient985-1"
xlink:href="#linearGradient983"
inkscape:collect="always"
gradientTransform="matrix(3.7795276,0,0,3.7795276,-496.71822,-166.61139)"/>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="63.5"
x2="173.12723"
y1="63.5"
x1="131.67278"
id="linearGradient985-14"
xlink:href="#linearGradient983"
inkscape:collect="always"
gradientTransform="matrix(3.7795276,0,0,3.7795276,-304.71821,-473.13109)"/>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="Arrow1Mend-4"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path3422-4"
inkscape:connector-curvature="0"/>
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="Arrow1Mend-9"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path3422-1"
inkscape:connector-curvature="0"/>
</marker>
<marker
inkscape:collect="always"
inkscape:isstock="true"
style="overflow:visible"
id="Arrow1Mend-9-8"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path3422-1-9"
inkscape:connector-curvature="0"/>
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="Arrow1Mend-9-0"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path3422-1-6"
inkscape:connector-curvature="0"/>
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend-9-8-6"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path3422-1-9-6"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1"
transform="matrix(-0.4,0,0,-0.4,-4,0)"/>
</marker>
</defs>
<sodipodi:namedview
inkscape:document-rotation="0"
inkscape:window-maximized="1"
inkscape:window-y="2160"
inkscape:window-x="328"
inkscape:window-height="1995"
inkscape:window-width="3512"
units="in"
showgrid="true"
inkscape:current-layer="layer1"
inkscape:document-units="mm"
inkscape:cy="380.56599"
inkscape:cx="348.26541"
inkscape:zoom="1.6379"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
borderopacity="1.0"
bordercolor="#666666"
pagecolor="#ffffff"
id="base">
<inkscape:grid
empopacity="0.42352941"
empcolor="#3f3fff"
opacity="0.21568627"
color="#3f3fff"
empspacing="8"
spacingy="3.175"
spacingx="3.175"
units="in"
id="grid895"
type="xygrid"/>
<inkscape:grid
opacity="0.0627451"
color="#3f3fff"
dotted="false"
empspacing="8"
spacingy="1.5875"
spacingx="1.5875"
units="in"
id="grid918"
type="xygrid"/>
</sodipodi:namedview>
<metadata
id="metadata5">
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="default">
<text
transform="scale(0.94694521,1.0560273)"
id="text4631-9-2-6"
y="56.387547"
x="234.92065"
style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;opacity:1;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0156755;stop-opacity:1"
xml:space="preserve"><tspan
style="font-weight:bold;text-align:center;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke-width:0.0156755"
y="56.387547"
x="234.92065"
sodipodi:role="line"
id="tspan4194-6">SCORE</tspan></text>
<text
id="text4362-2-0"
y="116.8091"
x="222.9207"
style="font-size:8.1286px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.508037"
xml:space="preserve"><tspan
style="stroke-width:0.508037"
y="116.8091"
x="222.9207"
sodipodi:role="line"
id="tspan4412-6">value</tspan></text>
<text
id="text4362-0-1"
y="114.82746"
x="116.60229"
style="font-size:7.20838px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.450523"
xml:space="preserve"><tspan
id="tspan4381-2-4"
style="text-align:start;text-anchor:start;stroke-width:0.450523"
y="114.82746"
x="116.60229"
sodipodi:role="line">throughput</tspan>
<tspan
id="tspan4643"
style="text-align:start;text-anchor:start;stroke-width:0.450523"
y="122.03584"
x="116.60229"
sodipodi:role="line">latency</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;opacity:1;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0156755;stop-opacity:1"
x="46.883053"
y="56.429405"
id="text4631-9-2-3-7"
transform="scale(0.94694521,1.0560273)"><tspan
id="tspan4194-1-6"
sodipodi:role="line"
x="46.883053"
y="56.429405"
style="font-weight:bold;text-align:center;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke-width:0.0156755">PARAMS</tspan></text>
<g
transform="translate(-25.399999)"
id="g4718">
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.058128;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
d="m 50.799999,50.8 v 12.7 l 3.175001,-10e-7 v -1.5875 l -1.5875,1e-6 v -9.525 h 1.5875 v -1.587499 z"
id="path4145"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc"/>
<path
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0"
id="path4145-5"
d="m 88.899999,50.8 v 12.7 l -3.175,-10e-7 v -1.5875 l 1.5875,1e-6 v -9.525 h -1.5875 v -1.587499 z"
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0581279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"/>
</g>
<g
transform="translate(152.4)"
id="g4718-6">
<path
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0"
id="path4145-93"
d="m 50.799999,50.8 v 12.7 l 3.175001,-10e-7 v -1.5875 l -1.5875,1e-6 v -9.525 h 1.5875 v -1.587499 z"
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.058128;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"/>
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0581279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
d="m 88.9,50.8 v 12.7 l -3.175,-10e-7 v -1.5875 l 1.5875,1e-6 v -9.525 H 85.725 v -1.587499 z"
id="path4145-5-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc"/>
</g>
<g
id="g4718-6-8"
transform="translate(63.50001,38.0998)">
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.058128;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
d="m 50.799999,50.8 v 12.7 l 3.175001,-10e-7 v -1.5875 l -1.5875,1e-6 v -9.525 h 1.5875 v -1.587499 z"
id="path4145-93-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc"/>
<path
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0"
id="path4145-5-7-8"
d="m 88.89999,50.8002 v 12.7 l -3.175,-10e-7 v -1.5875 l 1.5875,10e-7 v -9.525 h -1.5875 v -1.587499 z"
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0581279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"/>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;opacity:1;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0156755;stop-opacity:1"
x="140.54529"
y="92.507927"
id="text4631-9-2-6-8"
transform="scale(0.94694521,1.0560273)"><tspan
id="tspan4194-6-4"
sodipodi:role="line"
x="140.54529"
y="92.507927"
style="font-weight:bold;text-align:center;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke-width:0.0156755">RESULT</tspan></text>
<text
xml:space="preserve"
style="font-size:6.74675px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.421672"
x="32.730816"
y="112.82606"
id="text4362-4"><tspan
sodipodi:role="line"
x="32.730816"
y="112.82606"
style="text-align:start;text-anchor:start;stroke-width:0.421672"
id="tspan4364-9">ccph</tspan>
<tspan
sodipodi:role="line"
x="32.730816"
y="119.57281"
style="text-align:start;text-anchor:start;stroke-width:0.421672"
id="tspan4379-2">async</tspan>
<tspan
sodipodi:role="line"
x="32.730816"
y="126.31956"
style="text-align:start;text-anchor:start;stroke-width:0.421672"
id="tspan4381-0">threads</tspan></text>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path5393"
d="M 133.35,69.85 98.425,85.725"
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker5537);stop-color:#000000;stop-opacity:1"/>
<path
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path5395"
d="m 133.35,69.85 34.925,15.875"
style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-9-8)"/>
<text
transform="scale(0.94694521,1.0560273)"
id="text4631-9-2-3-7-0"
y="92.508018"
x="46.883053"
style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;opacity:1;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0156755;stop-opacity:1"
xml:space="preserve"><tspan
style="font-weight:bold;text-align:center;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke-width:0.0156755"
y="92.508018"
x="46.883053"
sodipodi:role="line"
id="tspan4194-1-6-4">PARAMS</tspan></text>
<g
id="g4718-8"
transform="translate(-25.4,38.1)">
<path
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0"
id="path4145-7"
d="m 50.799999,50.8 v 12.7 l 3.175001,-10e-7 v -1.5875 l -1.5875,1e-6 v -9.525 h 1.5875 v -1.587499 z"
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.058128;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"/>
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0581279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
d="m 88.899999,50.8 v 12.7 l -3.175,-10e-7 v -1.5875 l 1.5875,1e-6 v -9.525 h -1.5875 v -1.587499 z"
id="path4145-5-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc"/>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;opacity:1;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0156755;stop-opacity:1"
x="234.92065"
y="92.466156"
id="text4631-9-2-6-7"
transform="scale(0.94694521,1.0560273)"><tspan
id="tspan4194-6-2"
sodipodi:role="line"
x="234.92065"
y="92.466156"
style="font-weight:bold;text-align:center;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke-width:0.0156755">VALUE</tspan></text>
<g
id="g4718-6-7"
transform="translate(152.4,38.1)">
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.058128;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
d="m 50.799999,50.8 v 12.7 l 3.175001,-10e-7 v -1.5875 l -1.5875,1e-6 v -9.525 h 1.5875 v -1.587499 z"
id="path4145-93-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc"/>
<path
sodipodi:nodetypes="ccccccccc"
inkscape:connector-curvature="0"
id="path4145-5-7-2"
d="m 88.9,50.8 v 12.7 l -3.175,-10e-7 v -1.5875 l 1.5875,1e-6 v -9.525 H 85.725 v -1.587499 z"
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0581279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"/>
</g>
<path
inkscape:connector-curvature="0"
id="path6959"
d="m 82.55,88.9 12.7,6.35 -12.7,6.35 z"
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0581279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"/>
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0581279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
d="M 127,50.8 139.7,57.15 127,63.5 Z"
id="path6959-1"
inkscape:connector-curvature="0"/>
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0581279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1"
d="m 171.45,88.9 12.7,6.35 -12.7,6.35 z"
id="path6959-5"
inkscape:connector-curvature="0"/>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;opacity:1;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0156755;stop-opacity:1"
x="93.353188"
y="107.81679"
id="text4631-9-2-3-7-0-9"
transform="scale(0.94694521,1.0560273)"><tspan
id="tspan4194-1-6-4-4"
sodipodi:role="line"
x="93.353188"
y="107.81679"
style="font-weight:bold;text-align:center;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke-width:0.0156755">result</tspan>
<tspan
id="tspan9760"
sodipodi:role="line"
x="93.353188"
y="114.16679"
style="font-weight:bold;text-align:center;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke-width:0.0156755">function</tspan>
<tspan
id="tspan9807"
sodipodi:role="line"
x="93.353188"
y="120.51678"
style="font-weight:bold;text-align:center;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke-width:0.0156755">R(P)</tspan></text>
<text
transform="scale(0.94694521,1.0560273)"
id="text4631-9-2-3-7-0-9-9"
y="108.20721"
x="188.93344"
style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;opacity:1;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0156755;stop-opacity:1"
xml:space="preserve"><tspan
style="font-weight:bold;text-align:center;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke-width:0.0156755"
y="108.20721"
x="188.93344"
sodipodi:role="line"
id="tspan9760-9">value</tspan>
<tspan
id="tspan9785"
style="font-weight:bold;text-align:center;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke-width:0.0156755"
y="114.55721"
x="188.93344"
sodipodi:role="line">function</tspan>
<tspan
id="tspan9809"
style="font-weight:bold;text-align:center;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke-width:0.0156755"
y="120.9072"
x="188.93344"
sodipodi:role="line">V(R)</tspan></text>
<rect
y="39.6875"
x="15.875"
height="28.575001"
width="242.8875"
id="rect10158"
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker10162);paint-order:markers stroke fill;stop-color:#000000;stop-opacity:1"/>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;opacity:1;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:0.0156755;stop-opacity:1"
x="141.80322"
y="78.606888"
id="text4631-9-2-3-7-0-9-1"
transform="scale(0.94694521,1.0560273)"><tspan
id="tspan9807-1"
sodipodi:role="line"
x="141.80322"
y="78.606888"
style="font-weight:bold;text-align:center;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke-width:0.0156755">V(R(P))</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,611 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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="11in"
height="11.5in"
viewBox="0 0 279.4 292.1"
version="1.1"
id="svg8"
inkscape:version="1.0beta1 (1:0.92.0+devel+201910270845+4b2fe24)"
sodipodi:docname="op_tracking.svg">
<defs
id="defs2">
<marker
inkscape:stockid="Arrow1Mstart"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Mstart"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path13431"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
transform="scale(0.4) translate(10,0)"/>
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0.0"
refX="0.0"
id="marker13786"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path13434"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
transform="scale(0.4) rotate(180) translate(10,0)"/>
</marker>
<marker
inkscape:stockid="ExperimentalArrow"
orient="auto-start-reverse"
refY="3.0"
refX="5.0"
id="ExperimentalArrow"
inkscape:isstock="true">
<path
id="path13678"
d="m 10,3 -10,3 0,-6 z"
style="fill:context-stroke;stroke:#000000;stroke-opacity:1"/>
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0.0"
refX="0.0"
id="marker13321"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path13319"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
transform="scale(0.4) rotate(180) translate(10,0)"/>
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="marker13227"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
transform="scale(0.4) rotate(180) translate(10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path13225"/>
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="marker13139"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
transform="scale(0.4) rotate(180) translate(10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path13137"/>
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0.0"
refX="0.0"
id="marker12937"
style="overflow:visible;"
inkscape:isstock="true"
inkscape:collect="always">
<path
id="path12935"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
transform="scale(0.4) rotate(180) translate(10,0)"/>
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible;"
id="marker12791"
refX="0.0"
refY="0.0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:collect="always">
<path
transform="scale(0.4) rotate(180) translate(10,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path12789"/>
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0.0"
refX="0.0"
id="Arrow1Lend"
style="overflow:visible;"
inkscape:isstock="true">
<path
id="path3416"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
transform="scale(0.8) rotate(180) translate(12.5,0)"/>
</marker>
<linearGradient
inkscape:collect="always"
id="linearGradient983">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop979"/>
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop981"/>
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient983"
id="linearGradient985"
x1="131.67278"
y1="63.5"
x2="173.12723"
y2="63.5"
gradientUnits="userSpaceOnUse"/>
<linearGradient
gradientTransform="matrix(3.7795276,0,0,3.7795276,-496.71822,-166.61139)"
inkscape:collect="always"
xlink:href="#linearGradient983"
id="linearGradient985-1"
x1="131.67278"
y1="63.5"
x2="173.12723"
y2="63.5"
gradientUnits="userSpaceOnUse"/>
<linearGradient
gradientTransform="matrix(3.7795276,0,0,3.7795276,-304.71821,-473.13109)"
inkscape:collect="always"
xlink:href="#linearGradient983"
id="linearGradient985-14"
x1="131.67278"
y1="63.5"
x2="173.12723"
y2="63.5"
gradientUnits="userSpaceOnUse"/>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend-4"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path3422-4"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.4,0,0,-0.4,-4,0)"/>
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend-9"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path3422-1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.4,0,0,-0.4,-4,0)"/>
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend-9-8"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path3422-1-9"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.4,0,0,-0.4,-4,0)"/>
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend-9-0"
style="overflow:visible"
inkscape:isstock="true">
<path
inkscape:connector-curvature="0"
id="path3422-1-6"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
transform="matrix(-0.4,0,0,-0.4,-4,0)"/>
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="Arrow1Mend-2"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path3422-0"
inkscape:connector-curvature="0"/>
</marker>
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="marker12791-1"
style="overflow:visible"
inkscape:isstock="true">
<path
id="path12789-5"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
transform="matrix(-0.4,0,0,-0.4,-4,0)"
inkscape:connector-curvature="0"/>
</marker>
<marker
inkscape:isstock="true"
style="overflow:visible"
id="marker12937-4"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path12935-7"
inkscape:connector-curvature="0"/>
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.7621436"
inkscape:cx="440.89754"
inkscape:cy="403.22142"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="true"
units="in"
inkscape:window-width="3512"
inkscape:window-height="1995"
inkscape:window-x="328"
inkscape:window-y="2160"
inkscape:window-maximized="1"
inkscape:document-rotation="0">
<inkscape:grid
type="xygrid"
id="grid895"
units="in"
spacingx="3.175"
spacingy="3.175"
empspacing="8"
color="#3f3fff"
opacity="0.21568627"
empcolor="#3f3fff"
empopacity="0.42352941"/>
<inkscape:grid
type="xygrid"
id="grid918"
units="in"
spacingx="1.5875"
spacingy="1.5875"
empspacing="8"
dotted="false"
color="#3f3fff"
opacity="0.0627451"/>
</sodipodi:namedview>
<metadata
id="metadata5">
<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="default"
id="layer1"
inkscape:groupmode="layer">
<g
id="g10677"
transform="translate(155.575,46.037501)"/>
<g
id="g10677-3-9"
transform="translate(155.575,31.75)">
<rect
y="25.4"
x="25.4"
height="12.700001"
width="22.225"
id="rect7301-5-1"
style="fill:none;stroke:#000000;stroke-width:1;paint-order:markers stroke fill;stop-color:#000000"/>
<text
id="text10672-6-2"
y="30.548523"
x="36.444027"
style="font-size:5.29167px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.264583"
xml:space="preserve"><tspan
style="stroke-width:0.264583"
y="30.548523"
x="36.444027"
id="tspan10670-2-7"
sodipodi:role="line">op</tspan>
<tspan
style="stroke-width:0.264583"
y="35.840195"
x="36.444027"
sodipodi:role="line"
id="tspan10763">tracker</tspan></text>
</g>
<g
id="g10677-3-0"
transform="translate(19.05,49.2125)">
<rect
y="26.987499"
x="19.049999"
height="25.400002"
width="203.2"
id="rect7301-5-9"
style="fill:none;stroke:#000000;stroke-width:1;paint-order:markers stroke fill;stop-color:#000000"/>
</g>
<g
id="g10677-3-0-0">
<rect
style="fill:none;stroke:#000000;stroke-width:1;paint-order:markers stroke fill;stop-color:#000000"
id="rect7301-5-9-6"
width="228.60001"
height="177.8"
x="25.4"
y="25.4"/>
</g>
<g
id="g10848"
transform="translate(-36.512503,9.5250004)">
<rect
y="9.5249996"
x="71.4375"
height="12.7"
width="41.275002"
id="rect10843"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.6;stroke-miterlimit:4;stroke-dasharray:none;paint-order:markers stroke fill;stop-color:#000000"/>
<text
id="text10672-6-3-1"
y="19.031397"
x="92.074997"
style="font-size:8.46667px;line-height:0;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.264583"
xml:space="preserve"><tspan
style="stroke-width:0.264583"
y="19.031397"
x="92.074997"
id="tspan10670-2-6-8"
sodipodi:role="line">scenario</tspan></text>
</g>
<g
id="g10677-3-0-0-2"
transform="translate(3.1749988,19.05)">
<rect
y="25.4"
x="28.574999"
height="136.52499"
width="215.90001"
id="rect7301-5-9-6-0"
style="fill:none;stroke:#000000;stroke-width:1;paint-order:markers stroke fill;stop-color:#000000"/>
</g>
<g
transform="translate(-28.575003,28.575)"
id="g10848-2">
<rect
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;paint-order:markers stroke fill;stop-color:#000000"
id="rect10843-3"
width="41.275002"
height="12.700001"
x="66.675003"
y="9.5249996"/>
<text
xml:space="preserve"
style="font-size:8.46667px;line-height:0;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.264583"
x="87.184349"
y="18.210775"
id="text10672-6-3-1-7"><tspan
sodipodi:role="line"
id="tspan10670-2-6-8-5"
x="87.184349"
y="18.210775"
style="stroke-width:0.264583">activity</tspan></text>
</g>
<g
transform="translate(42.862499,28.575)"
id="g10677-2">
<rect
style="fill:none;stroke:#000000;stroke-width:1;paint-order:markers stroke fill;stop-color:#000000"
id="rect7301-2"
width="25.4"
height="12.700001"
x="20.637501"
y="25.4"/>
<text
xml:space="preserve"
style="font-size:5.29167px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.264583"
x="33.152756"
y="33.209862"
id="text10672-8"><tspan
id="tspan10765-7"
sodipodi:role="line"
x="33.152756"
y="33.209862"
style="stroke-width:0.264583">input</tspan></text>
</g>
<g
transform="translate(214.3125,39.6875)"
id="g10677-31">
<rect
style="fill:none;stroke:#000000;stroke-width:1;paint-order:markers stroke fill;stop-color:#000000"
id="rect7301-9"
width="22.225"
height="12.700001"
x="4.7624998"
y="17.4625"/>
<text
xml:space="preserve"
style="font-size:5.29167px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.264583"
x="15.882751"
y="22.611023"
id="text10672-4"><tspan
id="tspan10765-8"
sodipodi:role="line"
x="15.882751"
y="22.611023"
style="stroke-width:0.264583">async</tspan>
<tspan
sodipodi:role="line"
x="15.882751"
y="27.902693"
style="stroke-width:0.264583"
id="tspan14012">count</tspan></text>
</g>
<g
transform="translate(114.3,57.15)"
id="g10677-3-9-4">
<rect
style="fill:none;stroke:#000000;stroke-width:1;paint-order:markers stroke fill;stop-color:#000000"
id="rect7301-5-1-5"
width="25.4"
height="12.699999"
x="25.4"
y="25.4"/>
<text
xml:space="preserve"
style="font-size:5.29167px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.264583"
x="38.031528"
y="31.076914"
id="text10672-6-2-0"><tspan
sodipodi:role="line"
id="tspan10670-2-7-3"
x="38.031528"
y="31.076914"
style="stroke-width:0.264583">stride</tspan>
<tspan
id="tspan10763-6"
sodipodi:role="line"
x="38.031528"
y="36.368584"
style="stroke-width:0.264583">tracker</tspan></text>
</g>
<g
id="g10677-31-1"
transform="translate(85.724998,61.912501)">
<rect
y="20.637499"
x="12.7"
height="12.7"
width="28.575001"
id="rect7301-9-0"
style="fill:none;stroke:#000000;stroke-width:1;paint-order:markers stroke fill;stop-color:#000000"/>
<text
id="text10672-4-6"
y="25.801523"
x="26.908693"
style="font-size:5.29167px;line-height:1;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.264583"
xml:space="preserve"><tspan
style="stroke-width:0.264583"
y="25.801523"
x="26.908693"
sodipodi:role="line"
id="tspan10765-8-3">cycle</tspan>
<tspan
style="stroke-width:0.264583"
y="31.093193"
x="26.908693"
sodipodi:role="line"
id="tspan12217">segment</tspan></text>
</g>
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker12791);stop-color:#000000;stop-opacity:1"
d="m 127,88.9 12.7,-1e-6"
id="path12719"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#g10677-31-1"
inkscape:connection-end="#g10677-3-9-4"/>
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker12937);stop-color:#000000;stop-opacity:1"
d="m 162.32187,82.55 19.84375,-12.7"
id="path12853"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#g10677-3-9-4"
inkscape:connection-end="#g10677-3-9"/>
<path
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#Arrow1Mstart);marker-end:url(#marker13786);stop-color:#000000;stop-opacity:1"
d="m 203.2,63.5 15.875,0"
id="path13043"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#g10677-3-9"
inkscape:connection-end="#g10677-31"/>
<g
id="g10848-2-5"
transform="matrix(0,-0.6153845,0.6153845,0,32.238463,142.63076)">
<rect
y="9.5249996"
x="66.675003"
height="12.700001"
width="41.275002"
id="rect10843-3-6"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;paint-order:markers stroke fill;stop-color:#000000"/>
<text
id="text10672-6-3-1-7-9"
y="18.210775"
x="87.184349"
style="font-size:8.46667px;line-height:0;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.264583"
xml:space="preserve"><tspan
style="stroke-width:0.264583"
y="18.210775"
x="87.184349"
id="tspan10670-2-6-8-5-3"
sodipodi:role="line">thread</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

BIN
sort_docs/testseq_early.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,45 @@
@startuml
scale 100 as 100 pixels
Title Rate Limit - **EARLY**
concise "clock" as C
concise "elapsed" as E
concise "scheduled" as S
concise "allocated" as A
C is the_past #red
E is elapsed #lightblue
S is scheduled #orange
A is allocated #yellow
@C
732 is future #white
E->C
@E
500 is unseen #white
@500 <-> @732: **error** = 232
A -> C
@S
0 is idle #grey
100 is scheduled #orange
600 is unscheduled #white
@500 <-> @600: **scheduling_delay** =\nelapsed - scheduled = -100
@A
300 is unallocated #white
@300 <-> @500: **wait_time** =\nelapsed - allocated = 200
concise "Ops" as O
@O
0 is op
+100 is op
+100 is op
+100 is op
+100 is op
+100 is op
+100 is op
+100 is op
+100 is op
@enduml

BIN
sort_docs/testseq_late.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,51 @@
@startuml
scale 100 as 100 pixels
Title Rate Limit **LATE**
concise "clock" as C
concise "elapsed" as E
concise "scheduled" as S
concise "allocated" as A
C is the_past #red
E is NOWTIME #lightblue
S is scheduled #orange
A is allocated #yellow
@0
S is idle #grey
@100
A is unallocated #white
S is scheduled #orange
@200
S is unscheduled #white
@500
E is unseen #white
A -> C
@632
C is future #white
E->C
@A
@100 <-> @500: **wait_time** =\nelapsed - allocated = 400
@E
@500 <-> @632: **error** = 132
@S
@200 <-> @500: **scheduling_delay** =\nelapsed - scheduled = 300
concise "Ops" as O
@O
0 is op
+100 is op
+100 is op
+100 is op
+100 is op
+100 is op
+100 is op
+100 is op
+100 is op
@enduml

16
sort_docs/todo.md Normal file
View File

@ -0,0 +1,16 @@
- convert core input to be equivalent
of `input=type:interval,cycles:N[..M]`
- Add doc support for input, input filters, outputs, output filters
- Build metadata scaffolding for parameters, so unused parameters may be
warned about.
- parameters should be part of the activity API
- parameters should not re-trigger def observers for non-change
evhandler
- parameters across all subsystems should be discoverable or
enumerable
- make stride auto-sizing uniformly apply after sequencing
- reimplement core activity and scenario logic as async/reactor with
monitors
- convert to Java 9
- add activity library commands
- add --list-input-filters and --list-output-filters