backport github actions breaking change fix
1
.nosqlbench/grafana_apikey
Normal file
@ -0,0 +1 @@
|
||||
eyJrIjoibVFjRkV5Z096VHE0MjhXYk1RM2p1cnFuUkhQMXVZNGwiLCJuIjoibm9zcWxiZW5jaC0xMC4xMC4xMDAuNTItMTYwNzMxMDE2MDM0OCIsImlkIjoxfQ==
|
@ -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++;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
61
sort_docs/design/opstate.puml
Normal 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
|
29
sort_docs/eb_iterates_cycles.puml
Normal 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
|
221
sort_docs/eb_iterates_cycles.svg
Normal 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"><cycle segment>[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
|
||||
& 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 |
42
sort_docs/eb_iterates_phases.puml
Normal 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
|
284
sort_docs/eb_iterates_phases.svg
Normal 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"><cycle segment>[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 |
38
sort_docs/eb_latency_details.puml
Normal 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
|
30
sort_docs/eb_latency_terms.puml
Normal 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
|
235
sort_docs/eb_latency_terms.svg
Normal 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 |
BIN
sort_docs/op_state_nomnoml.png
Normal file
After Width: | Height: | Size: 58 KiB |
78
sort_docs/opstate_nomnoml.svg
Normal 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 |
7
sort_docs/package_layout.md
Normal 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
82
sort_docs/rate_limiter_design.puml
Normal 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
|
47
sort_docs/ratelimiter_timelines.puml
Normal 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
|
540
sort_docs/research/multivariate.svg
Normal 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 |
611
sort_docs/research/op_tracking.svg
Normal 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
After Width: | Height: | Size: 25 KiB |
45
sort_docs/testseq_early.puml
Normal 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
After Width: | Height: | Size: 25 KiB |
51
sort_docs/testseq_late.puml
Normal 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
@ -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
|