removed old docs
@ -1,61 +0,0 @@
|
||||
@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
|
@ -1,29 +0,0 @@
|
||||
@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
|
@ -1,183 +0,0 @@
|
||||
<?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>
|
Before Width: | Height: | Size: 11 KiB |
@ -1,42 +0,0 @@
|
||||
@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
|
Before Width: | Height: | Size: 14 KiB |
@ -1,38 +0,0 @@
|
||||
@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
|
@ -1,30 +0,0 @@
|
||||
@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
|
Before Width: | Height: | Size: 11 KiB |
@ -1,175 +0,0 @@
|
||||
## RateLimiter Design
|
||||
|
||||
The nosqlbench rate limiter is based on a hybrid design, combining ideas
|
||||
from well-known algorithms with a heavy dose of mechanical sympathy. The
|
||||
resulting implementation provides the following:
|
||||
|
||||
1. A basic design that can be explained in one page (this page!)
|
||||
2. High throughput, compared to other rate limiters tested.
|
||||
3. Graceful degradation with increasing concurrency.
|
||||
4. Clearly defined behavioral semantics.
|
||||
5. Efficient burst capability, for tunable catch-up rates.
|
||||
6. Efficient calculation of wait time.
|
||||
|
||||
## Parameters
|
||||
|
||||
**op rate** - In simplest terms, users simply need to configure the *op rate*.
|
||||
For example, `cyclerate=12000` specifies an op rate of 12000 per second.
|
||||
|
||||
**burst rate** - Additionally, users may specify a burst rate which can be used
|
||||
to recover unused time when a client is able to go faster than the strict
|
||||
limit. The burst rate is multiplied by the _op rate_ to arrive at the maximum
|
||||
rate when wait time is available to recover. For example, `cyclerate=12000,1.1`
|
||||
specifies that a client may operate at 12000 ops/s _when it is caught up_,
|
||||
while allowing it to go at a rate of up to 13200 ops/s _when it is behind
|
||||
schedule_.
|
||||
|
||||
## Design Principles
|
||||
|
||||
The core design of the rate limiter is based on the [token
|
||||
bucket](https://en.wikipedia.org/wiki/Token_bucket) algorithm as established in
|
||||
the telecom industry for rate metering. Additional refinements have been
|
||||
added to allow for flexible and reliable use on non-realtime systems.
|
||||
|
||||
The unit of scheduling used in this design is the token, corresponding directly
|
||||
to a nanosecond of time. The schedule time that is made available to callers is
|
||||
stored in a pool of tokens which is set to a configured size. The size of the
|
||||
token pool determines how many grants are allowed to be dispatched before the
|
||||
next one is forced to wait for available tokens.
|
||||
|
||||
At some regular frequency, a filler thread adds tokens (nanoseconds of time to
|
||||
be distributed to waiting ops) to the pool. The callers which are waiting for
|
||||
these tokens consume a number of tokens serially. If the pool does not contain
|
||||
the requested number of tokens, then the caller is blocked using basic
|
||||
synchronization primitives. When the pool is filled any blocked callers are
|
||||
unblocked.
|
||||
|
||||
## Design Details
|
||||
|
||||
In fact, there are three pools. The _active_ pool, the _bursting_ pool, and the
|
||||
_waiting_ pool. The active pool has a limited size based on the number of
|
||||
operations that are allowed to be granted concurrently.
|
||||
|
||||
The bursting pool is sized according to the relative burst rate and the size of the
|
||||
active pool. For example, with an op rate of 1000 ops/s and a burst rate of 1.1,
|
||||
the active pool can be sized to 1E9 nanos (one second of nanos), and the burst
|
||||
pool can be sized to 1E8 (1/10 of that), thus yielding a combined pool size of
|
||||
1E9 + 1E8, or 1100000000 ns.
|
||||
|
||||
The waiting pool is where all extra tokens are held in reserve. It is unlimited
|
||||
except by the size of a long value. The size of the waiting pool is a direct
|
||||
measure of wait time in nanoseconds.
|
||||
|
||||
Within the pools, no tokens are created nor destroyed. They are added by the
|
||||
filler based on the passage of time, and consumed by callers when they become
|
||||
available. In between these operations, the net sum of tokens is preserved.
|
||||
|
||||
The filler thread adds tokens to the pool according to the system real-time
|
||||
clock, at some estimated but unreliable interval. The frequency of filling is set
|
||||
high enough to give a reliable perception of time passing smoothly, but low
|
||||
enough to avoid wasting too much thread time in calling overhead. (It is set to
|
||||
1K/s by default). Each time filling occurs, the real-time clock is
|
||||
check-pointed, and the time delta is fed into the pool filling logic as
|
||||
explained below.
|
||||
|
||||
![RateLimiterDesign](hybrid_ratelimiter_sketch.png)
|
||||
|
||||
During pool filling, the following steps are taken:
|
||||
1) tokens are added to the active pool until it is full.
|
||||
2) Any extra tokens are added to the waiting pool.
|
||||
3) If the waiting pool has any tokens, and there is room in the bursting pool,
|
||||
some tokens are moved from the waiting pool to the bursting pool.
|
||||
|
||||
When a caller asks for a number of tokens, the combined total from the active
|
||||
and burst pools is available to that caller.
|
||||
|
||||
## Bursting Logic
|
||||
|
||||
Tokens in the waiting pool represent time that has not been claimed by a caller.
|
||||
Tokens accumulate in the waiting pool as a side-effect of continuous filling
|
||||
outpacing continuous draining, thus creating a backlog of operations. The pool
|
||||
sizes determine both the maximum instantaneously available operations as well as
|
||||
the rate at which unclaimed time can be back-filled back into the active or
|
||||
burst pools.
|
||||
|
||||
### Normalizing for Jitter
|
||||
|
||||
Since it is not possible to schedule the filler thread to trigger on a strict
|
||||
and reliable schedule (as in a real-time system), the method of moving tokens
|
||||
from the waiting pool to the bursting pool must account for differences in
|
||||
timing. Thus, tokens which are activated for bursting are scaled according to
|
||||
the amount of time added in the last fill, relative to the maximum active pool.
|
||||
This means that a full pool fill will allow a full burst pool fill, presuming
|
||||
wait time is positive by that amount. It also means that the same effect can be
|
||||
achieved by ten consecutive fills of a tenth the time each. In effect, bursting
|
||||
is normalized to the passage of time and the burst rate, with a maximum cap
|
||||
imposed when operations are unclaimed by callers.
|
||||
|
||||
## Mechanical Trade-offs
|
||||
|
||||
In this implementation, it is relatively easy to explain how accuracy and
|
||||
performance trade-off. They are competing concerns. Consider these two extremes
|
||||
of an isochronous configuration:
|
||||
|
||||
### Slow Isochronous
|
||||
|
||||
For example, the rate limiter could be configured for strict isochronous
|
||||
behavior by setting the active pool size to *one* op of nanos and the burst rate
|
||||
to 1.0, thus disabling bursting. If the op rate requested is 1 op/s, this
|
||||
configuration will work relatively well, although *any* caller which doesn't
|
||||
show up (or isn't already waiting) when the tokens become available will incur a
|
||||
waittime penalty. The odds of this are relatively low for a high-velocity
|
||||
client.
|
||||
|
||||
### Fast Isochronous
|
||||
|
||||
However, if the op rate for this type of configuration is set to 1E8 operations
|
||||
per second, then the filler thread will be adding 100 ops worth of time when
|
||||
there is only *one* op worth of active pool space. This is due to the fact that
|
||||
filling can only occur at a maximal frequency which has been set to 1K fills/s
|
||||
on average. That will create artificial wait time, since the token consumers and
|
||||
producers would not have enough pool space to hold the tokens needed during
|
||||
fill. It is not possible on most systems to fill the pool at arbitrarily high
|
||||
fill frequencies. Thus, it is important for users to understand the limits of
|
||||
the machinery when using high rates. In most scenarios, these limits will not be
|
||||
onerous.
|
||||
|
||||
### Boundary Rules
|
||||
|
||||
Taking these effects into account, the default configuration makes some
|
||||
reasonable trade-offs according to the rules below. These rules should work well
|
||||
for most rates below 50M ops/s. The net effect of these rules is to increase
|
||||
work bulking within the token pools as rates go higher.
|
||||
|
||||
Trying to go above 50M ops/s while also forcing isochronous behavior will result
|
||||
in artificial wait-time. For this reason, the pool size itself is not
|
||||
user-configurable at this time.
|
||||
|
||||
- The pool size will always be at least as big as two ops.
|
||||
This rule ensures that there is adequate buffer
|
||||
space for tokens when callers are accessing the token pools near the rate of
|
||||
the filler thread. If this were not ensured, then artificial wait time would
|
||||
be injected due to actual overflow error.
|
||||
- The pool size will always be at least as big as 1E6 nanos, or 1/1000 of a second.
|
||||
This rule ensures that the filler thread has a reasonably attainable
|
||||
update frequency which will prevent underflow in the active or burst pools.
|
||||
- The number of ops that can fit in the pool will determine how many ops
|
||||
can be dispatched between fills. For example, an op rate of 1E6 will mean
|
||||
that up to 1000 ops worth of tokens may be present between fills, and
|
||||
up to 1000 ops may be allowed to start at any time before the next fill.
|
||||
|
||||
In practical terms, this means that rates slower than 1K ops/S will have their
|
||||
strictness controlled by the burst rate in general, and rates faster than 1K
|
||||
ops/S will automatically include some op bulking between fills.
|
||||
|
||||
## History
|
||||
|
||||
A CAS-oriented method which compensated for RTC calling overhead was used
|
||||
previously. This method afforded very high performance, but it was difficult to
|
||||
reason about.
|
||||
|
||||
This implementation replaces that previous version. Basic synchronization
|
||||
primitives (implicit locking via synchronized methods) performed surprisingly
|
||||
well -- well enough to discard the complexity of the previous implementation.
|
||||
|
||||
Further, this version is much easier to study and reason about.
|
Before Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 24 KiB |
@ -1,578 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="297mm"
|
||||
height="210mm"
|
||||
viewBox="0 0 297 210"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.3 (unknown)"
|
||||
sodipodi:docname="hybrid_ratelimiter_sketch.svg"
|
||||
inkscape:export-filename="/home/jshook/IdeaProjects/nosqlbench/docs/hybrid_ratelimiter_sketch.png"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001">
|
||||
<defs
|
||||
id="defs2">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 105 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="297 : 105 : 1"
|
||||
inkscape:persp3d-origin="148.5 : 70 : 1"
|
||||
id="perspective1025" />
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="marker2159"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path2157"
|
||||
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:#ededed;stroke-width:1pt;stroke-opacity:1;fill:#ededed;fill-opacity:1"
|
||||
transform="scale(0.8) rotate(180) translate(12.5,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible;"
|
||||
id="marker2131"
|
||||
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:#ededed;stroke-width:1pt;stroke-opacity:1;fill:#ededed;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="path2129" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="marker2087"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path2085"
|
||||
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:#969696;stroke-width:1pt;stroke-opacity:1;fill:#969696;fill-opacity:1"
|
||||
transform="scale(0.8) rotate(180) translate(12.5,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible;"
|
||||
id="marker2083"
|
||||
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:#969696;stroke-width:1pt;stroke-opacity:1;fill:#969696;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="path2081" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="marker1640"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path1638"
|
||||
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>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="marker1501"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path1499"
|
||||
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>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible;"
|
||||
id="marker1475"
|
||||
refX="0.0"
|
||||
refY="0.0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
inkscape:collect="always">
|
||||
<path
|
||||
transform="scale(0.8) rotate(180) translate(12.5,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="path1473" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible;"
|
||||
id="marker1467"
|
||||
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:#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="path1465" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="marker1435"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always">
|
||||
<path
|
||||
id="path1433"
|
||||
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>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="marker1431"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always">
|
||||
<path
|
||||
id="path1171"
|
||||
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>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="marker4804"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4802"
|
||||
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:#7d7d7d;stroke-width:1pt;stroke-opacity:1;fill:#7d7d7d;fill-opacity:1"
|
||||
transform="scale(0.8) rotate(180) translate(12.5,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible;"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path4529"
|
||||
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:#7d7d7d;stroke-width:1pt;stroke-opacity:1;fill:#7d7d7d;fill-opacity:1"
|
||||
transform="scale(0.8) rotate(180) translate(12.5,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="marker1431-1"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1171-0"
|
||||
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.8,0,0,-0.8,-10,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="marker1435-1"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1433-3"
|
||||
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.8,0,0,-0.8,-10,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:isstock="true"
|
||||
style="overflow:visible"
|
||||
id="marker1475-7"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto"
|
||||
inkscape:stockid="Arrow1Lend">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,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="path1473-2" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="marker1640-5"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1638-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.8,0,0,-0.8,-10,0)" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6568543"
|
||||
inkscape:cx="382.87291"
|
||||
inkscape:cy="497.31295"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer3"
|
||||
showgrid="true"
|
||||
inkscape:window-width="3840"
|
||||
inkscape:window-height="1965"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="2160"
|
||||
inkscape:window-maximized="1">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid815"
|
||||
dotted="false" />
|
||||
</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:groupmode="layer"
|
||||
id="layer1"
|
||||
inkscape:label="dividers"
|
||||
style="display:none">
|
||||
<path
|
||||
style="display:inline;fill:none;stroke:#ededed;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 110.06667,74.533333 V 104.16667"
|
||||
id="path2056"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="90.650002"
|
||||
inkscape:export-ydpi="90.650002" />
|
||||
<path
|
||||
style="display:inline;fill:none;stroke:#ededed;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 101.6,74.533333 V 104.16667"
|
||||
id="path2056-0"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="90.650002"
|
||||
inkscape:export-ydpi="90.650002" />
|
||||
<path
|
||||
style="display:inline;fill:none;stroke:#ededed;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 67.733337,74.533333 V 104.16667"
|
||||
id="path2056-4"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="90.650002"
|
||||
inkscape:export-ydpi="90.650002" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="braces"
|
||||
style="display:inline">
|
||||
<rect
|
||||
style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.02645833;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect1104"
|
||||
width="79.375"
|
||||
height="29.104174"
|
||||
x="55.5625"
|
||||
y="75.062492" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4994-6-0"
|
||||
d="m 105.83333,91.443669 -0.10942,-0.38556 c -0.0398,-0.611433 -0.21108,-0.916913 -0.51363,-0.916913 l -2.4042,0.02088 c -0.36621,0 -0.65803,-0.253876 -0.87563,-0.761074 -0.22026,-0.50027 -0.33045,-1.22274 -0.33045,-2.167673 0.10032,0.0014 0.14342,0.479619 0.14342,0.479619 l 0.0397,0.385576 c 0.11676,0.799027 0.42061,1.209085 0.91155,1.229929 l 2.28875,0.08334 c 0.34568,0.01924 0.72562,0.473633 0.84998,1.150679 0.1244,-0.6769 0.50408,-1.131532 0.84972,-1.150679 l 2.28875,-0.08334 c 0.49094,-0.02088 0.79479,-0.430902 0.91155,-1.229929 l 0.0397,-0.385576 c 0,0 0.0431,-0.478151 0.14342,-0.479619 0,0.944933 -0.11019,1.667403 -0.33045,2.167669 -0.21761,0.507198 -0.50942,0.761074 -0.87563,0.761074 l -2.40421,-0.02088 c -0.30254,0 -0.47382,0.30548 -0.51363,0.916913 -0.10942,0.38556 -0.10942,0.38556 -0.10942,0.38556 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.08687019px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.08199883px;word-spacing:8.54225349px;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001" />
|
||||
<path
|
||||
sodipodi:nodetypes="cccccccccccccccccccccccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4994-6-0-4-0"
|
||||
d="m 84.66671,91.466666 -0.109422,-0.387697 c -0.03981,-0.614826 -0.211084,-0.921986 -0.513626,-0.921986 l -1.318321,0.01142 -13.785928,0.0098 c -0.36621,0 -0.658025,-0.255279 -0.875631,-0.765298 -0.22026,-0.503039 -0.330448,-1.229504 -0.330448,-2.179673 0.100315,0.0014 0.143415,0.482277 0.143415,0.482277 l 0.03974,0.387713 c 0.116761,0.803447 0.420616,1.215788 0.911549,1.236746 l 13.888567,0.04338 1.100229,0.04028 c 0.345685,0.01941 0.725625,0.476259 0.849979,1.157057 0.124404,-0.680651 0.504082,-1.137811 0.849718,-1.157057 l 1.096705,-0.04012 13.892054,-0.04355 c 0.49093,-0.02104 0.79478,-0.433299 0.91155,-1.236746 l 0.0397,-0.387713 c 0,0 0.0431,-0.480793 0.14342,-0.482277 0,0.950169 -0.11019,1.676634 -0.33045,2.179673 -0.2176,0.510019 -0.50942,0.765298 -0.87563,0.765298 l -13.7631,-0.0098 -1.341102,-0.01142 c -0.302541,0 -0.473827,0.30716 -0.513632,0.921986 l -0.109422,0.387697 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.08687019px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.08199883px;word-spacing:8.54225349px;display:inline;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccccccscccscccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4994-6-0-0"
|
||||
d="m 114.30004,91.443669 -0.10942,-0.38556 c -0.0398,-0.611433 -0.21109,-0.916913 -0.51363,-0.916913 l -2.4042,0.02088 c -0.36621,0 -0.65803,-0.253876 -0.87563,-0.761074 -0.22026,-0.500266 -0.33045,-1.222736 -0.33045,-2.167669 0.10031,0.0014 0.14341,0.479619 0.14341,0.479619 l 0.0397,0.385576 c 0.11676,0.799027 0.42061,1.209085 0.91155,1.229929 l 2.28875,0.08334 c 0.34568,0.01924 0.72562,0.473633 0.84998,1.150679 0.1244,-0.6769 0.50408,-1.131532 0.84971,-1.150679 0,0 1.5263,-0.04501 2.28876,-0.08334 1.02037,-0.05121 14.26874,-0.418154 14.26874,-0.418154 l 1.64269,0.89159 -1.66189,0.849203 c 0,0 -13.46931,-0.440515 -14.3609,-0.48902 -0.80025,-0.04355 -2.40421,-0.02088 -2.40421,-0.02088 -0.30254,0 -0.47382,0.30548 -0.51363,0.916913 L 114.3,91.443669 Z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.08687019px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.08199883px;word-spacing:8.54225349px;display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001" />
|
||||
<path
|
||||
d="m 131.01288,90.188575 q -0.0482,-0.05595 -0.12433,-0.186487 -0.10412,0.186487 -0.19581,0.268851 -0.11499,0.09946 -0.29371,0.09946 -0.2098,0 -0.3481,-0.156957 -0.14609,-0.164729 -0.14609,-0.436687 0,-0.261081 0.14609,-0.438241 0.13053,-0.156961 0.35121,-0.156961 0.11344,0 0.19736,0.04662 0.0979,0.05129 0.16473,0.139865 0.0622,0.07926 0.12432,0.186483 0.10412,-0.186483 0.19581,-0.268847 0.11501,-0.09946 0.29372,-0.09946 0.2098,0 0.34811,0.156958 0.14608,0.164729 0.14608,0.436686 0,0.261082 -0.14608,0.438242 -0.13054,0.156957 -0.35122,0.156957 -0.11344,0 -0.19737,-0.04662 -0.0839,-0.04196 -0.16472,-0.139864 z m -0.63094,-0.02176 q 0.25642,0 0.41026,-0.372972 -0.19736,-0.407159 -0.41026,-0.407159 -0.15541,0 -0.23466,0.111893 -0.0855,0.119661 -0.0855,0.278174 0,0.174053 0.0855,0.281281 0.087,0.108783 0.23466,0.108783 z m 1.01324,-0.777021 q -0.23156,0 -0.41028,0.372971 0.19581,0.40716 0.41028,0.40716 0.1554,0 0.23466,-0.111893 0.0855,-0.119662 0.0855,-0.278174 0,-0.174054 -0.0855,-0.281281 -0.087,-0.108783 -0.23466,-0.108783 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;vector-effect:none;fill:#050023;fill-opacity:1;stroke:none;stroke-width:0.72470975;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path1109"
|
||||
inkscape:connector-curvature="0"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001" />
|
||||
<text
|
||||
id="text1114"
|
||||
y="93.535225"
|
||||
x="80.366043"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
xml:space="preserve"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001"><tspan
|
||||
style="font-size:2.82222199px;stroke-width:0.26458332"
|
||||
y="93.535225"
|
||||
x="80.366043"
|
||||
id="tspan1112"
|
||||
sodipodi:role="line">active</tspan></text>
|
||||
<text
|
||||
id="text1118"
|
||||
y="93.233032"
|
||||
x="102.11585"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
xml:space="preserve"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001"><tspan
|
||||
style="font-size:2.82222199px;stroke-width:0.26458332"
|
||||
y="93.233032"
|
||||
x="102.11585"
|
||||
id="tspan1116"
|
||||
sodipodi:role="line">burst</tspan></text>
|
||||
<text
|
||||
id="text1122"
|
||||
y="93.195877"
|
||||
x="111.30794"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
xml:space="preserve"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001"><tspan
|
||||
style="font-size:2.82222199px;stroke-width:0.26458332"
|
||||
y="93.195877"
|
||||
x="111.30794"
|
||||
id="tspan1120"
|
||||
sodipodi:role="line">wait</tspan></text>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker1431);marker-end:url(#marker1435)"
|
||||
d="m 67.733333,78.766667 h 6.330709 c 1.0669,0.04027 2.110809,0.928831 2.135958,2.126243 v 4.223757"
|
||||
id="path1166"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1475)"
|
||||
d="m 74.083333,78.766667 c 2.116667,0 3.006299,0.06907 4.313132,0.04208 2.036868,-0.04208 21.782585,-0.238843 35.903535,-0.04208 1.21139,0.02829 2.06952,1.009 2.11667,2.116663 v 4.233339"
|
||||
id="path1437"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="csccc"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001" />
|
||||
<path
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1501)"
|
||||
d="m 112.18333,89.35 v -6.352517 c 0,-2.11415 -4.23333,-2.11415 -4.23333,-0.0943 v 4.33015"
|
||||
id="path1477"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccc"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1507"
|
||||
style="font-style:normal;font-weight:normal;font-size:medium;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.1089268"
|
||||
d="m 58.538652,77.608182 -1.021989,2.044587 h 2.04647 z m -1.704976,2.349641 1.420813,-2.710985 h 0.570818 l 1.418321,2.710985 z"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1509"
|
||||
style="font-style:normal;font-weight:normal;font-size:medium;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.08632495"
|
||||
d="m 59.14259,79.943673 v -0.328037 h 0.248615 v -0.587008 l 0.176103,-0.03798 q 0.210634,-0.04489 0.338395,-0.162291 0.131229,-0.117407 0.165744,-0.390189 0.04144,-0.328033 0.196821,-0.580103 0.155385,-0.255522 0.404002,-0.400548 0.252067,-0.145021 0.57665,-0.145021 0.321128,0 0.569745,0.145021 0.252067,0.14502 0.407452,0.400548 0.15884,0.25207 0.200276,0.580103 0.03452,0.272787 0.162287,0.390189 0.131214,0.117406 0.341848,0.162291 l 0.176104,0.03798 v 0.587008 h 0.248619 v 0.328037 H 62.143245 V 79.805556 H 60.35114 v 0.138117 z m 2.10633,-0.618087 q 0.186462,0 0.352205,-0.06905 0.165745,-0.07252 0.290053,-0.196822 0.12431,-0.12431 0.193369,-0.290053 0.07252,-0.165742 0.07252,-0.352205 0,-0.186464 -0.07252,-0.352205 -0.06905,-0.165744 -0.193369,-0.290052 -0.12431,-0.12431 -0.290053,-0.193368 -0.165743,-0.07252 -0.352205,-0.07252 -0.186463,0 -0.352207,0.07252 -0.165743,0.06905 -0.29005,0.193368 -0.12431,0.12431 -0.196821,0.290052 -0.06905,0.165741 -0.06905,0.352205 0,0.186463 0.06905,0.352205 0.07252,0.165745 0.196821,0.290053 0.12431,0.12431 0.29005,0.196822 0.165744,0.06905 0.352207,0.06905 z m 0,-0.756206 q -0.06561,0 -0.110503,-0.04489 -0.04489,-0.04489 -0.04489,-0.110502 l -0.334939,-0.196817 0.07252,-0.120859 0.334942,0.189915 0.01032,-0.0034 v -0.690601 h 0.145021 v 0.690601 q 0.03452,0.02071 0.05524,0.05524 0.02416,0.03452 0.02416,0.07941 0,0.06216 -0.04489,0.107036 -0.04489,0.04489 -0.107035,0.04489 z m 0.393642,-0.770019 q -0.02416,0 -0.04489,-0.01727 -0.01726,-0.02073 -0.01726,-0.04144 0,-0.02416 0.01726,-0.04144 0.02073,-0.01726 0.04144,-0.01726 0.02763,0 0.04144,0.02073 0.01728,0.02073 0.01728,0.03799 0,0.02416 -0.01728,0.04144 -0.01724,0.01727 -0.03798,0.01727 z m -0.787285,0 q -0.02073,0 -0.04144,-0.01727 -0.01726,-0.01726 -0.01726,-0.04144 0,-0.02416 0.01726,-0.04144 0.01727,-0.01726 0.04144,-0.01726 0.02416,0 0.04144,0.01726 0.01727,0.01727 0.01727,0.04144 0,0.03452 -0.02416,0.04834 -0.02416,0.01032 -0.03452,0.01032 z m 1.073886,0.286597 q -0.02418,0 -0.04144,-0.01727 -0.01727,-0.01726 -0.01727,-0.04144 0,-0.02416 0.01387,-0.04144 0.01726,-0.02073 0.04489,-0.02073 0.02073,0 0.03798,0.01727 0.01727,0.01727 0.01727,0.04489 0,0.03108 -0.02416,0.04489 -0.02073,0.01387 -0.0311,0.01387 z m -1.360485,0 q -0.02761,0 -0.04489,-0.01727 -0.01387,-0.02073 -0.01387,-0.04144 0,-0.02761 0.01727,-0.04489 0.02073,-0.01727 0.04144,-0.01727 0.02073,0 0.03798,0.01727 0.02073,0.01727 0.02073,0.04489 0,0.02763 -0.01727,0.04489 -0.01726,0.01387 -0.04144,0.01387 z m 0.680242,0.39019 q 0.02418,0 0.04144,-0.01727 0.01727,-0.01727 0.01727,-0.04144 0,-0.02418 -0.01727,-0.04144 -0.01726,-0.01727 -0.04144,-0.01727 -0.02418,0 -0.04144,0.01727 -0.01726,0.01727 -0.01726,0.04144 0,0.02416 0.01726,0.04144 0.01727,0.01727 0.04144,0.01727 z m 0.78383,0 q -0.02418,0 -0.04144,-0.01727 -0.01387,-0.01727 -0.01387,-0.04144 0,-0.02418 0.01387,-0.04144 0.01727,-0.01727 0.04144,-0.01727 0.02418,0 0.04144,0.01727 0.01727,0.01727 0.01727,0.04144 0,0.02416 -0.01727,0.04144 -0.01727,0.01727 -0.04144,0.01727 z m -1.567662,0 q -0.02763,0 -0.04489,-0.01727 -0.01387,-0.01727 -0.01387,-0.04144 0,-0.02418 0.01387,-0.04144 0.01726,-0.01727 0.04489,-0.01727 0.02416,0 0.03798,0.01727 0.01727,0.01727 0.01727,0.04144 0,0.02416 -0.01727,0.04144 -0.01387,0.01727 -0.03798,0.01727 z m 0.1036,0.393642 q -0.02073,0 -0.04144,-0.01728 -0.01726,-0.01726 -0.01726,-0.04144 0,-0.03108 0.02416,-0.04489 0.02416,-0.01727 0.03452,-0.01727 0.02073,0 0.03799,0.01727 0.02073,0.01726 0.02073,0.04489 0,0.02073 -0.01726,0.04144 -0.01387,0.01728 -0.04144,0.01728 z m 1.360484,0 q -0.02763,0 -0.04489,-0.01728 -0.01387,-0.02073 -0.01387,-0.04144 0,-0.02416 0.01727,-0.04144 0.01726,-0.01726 0.04144,-0.01726 0.05524,0 0.05524,0.05524 0,0.02763 -0.01727,0.04489 -0.01728,0.01728 -0.03798,0.01728 z m -0.286601,0.2866 q -0.02416,0 -0.04489,-0.01387 -0.01726,-0.01727 -0.01726,-0.04489 0,-0.02416 0.01726,-0.04144 0.01727,-0.01727 0.04489,-0.01727 0.02073,0 0.03798,0.01727 0.01727,0.01387 0.01727,0.04144 0,0.02073 -0.01727,0.04144 -0.01387,0.01726 -0.03798,0.01726 z m -0.787285,0 q -0.02416,0 -0.04144,-0.01727 -0.01726,-0.02073 -0.01726,-0.04144 0,-0.02761 0.01726,-0.04144 0.02073,-0.01726 0.04144,-0.01726 0.03452,0 0.04489,0.02073 0.01387,0.02073 0.01387,0.03799 0,0.02763 -0.01727,0.04489 -0.01727,0.01387 -0.04144,0.01387 z m 0.393643,0.103599 q -0.02418,0 -0.04144,-0.01387 -0.01726,-0.01726 -0.01726,-0.04489 0,-0.02416 0.01726,-0.03799 0.01727,-0.01727 0.04144,-0.01727 0.02418,0 0.04144,0.01727 0.01726,0.01387 0.01726,0.03799 0,0.02763 -0.01726,0.04489 -0.01727,0.01387 -0.04144,0.01387 z"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
x="77.238121"
|
||||
y="83.363823"
|
||||
id="text1532"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1530"
|
||||
x="77.238121"
|
||||
y="83.363823"
|
||||
style="font-size:2.82222223px;stroke-width:0.26458332">1</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
x="117.45479"
|
||||
y="85.480492"
|
||||
id="text1532-0"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1530-9"
|
||||
x="117.45479"
|
||||
y="85.480492"
|
||||
style="font-size:2.82222223px;stroke-width:0.26458332">2</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
x="109.41487"
|
||||
y="84.546974"
|
||||
id="text1532-0-7"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1530-9-5"
|
||||
x="109.41487"
|
||||
y="84.546974"
|
||||
style="font-size:2.82222223px;stroke-width:0.26458332">3</tspan></text>
|
||||
<text
|
||||
id="text1114-3"
|
||||
y="78.380775"
|
||||
x="68.256477"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
xml:space="preserve"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001"><tspan
|
||||
style="font-size:2.82222199px;stroke-width:0.26458332"
|
||||
y="78.380775"
|
||||
x="68.256477"
|
||||
id="tspan1112-8"
|
||||
sodipodi:role="line">refill</tspan></text>
|
||||
<flowRoot
|
||||
xml:space="preserve"
|
||||
id="flowRoot1875"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.66666698px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
|
||||
transform="scale(0.26458333)"
|
||||
inkscape:export-xdpi="90.650002"
|
||||
inkscape:export-ydpi="90.650002"><flowRegion
|
||||
id="flowRegion1877"
|
||||
style="font-size:10.66666698px"><rect
|
||||
id="rect1879"
|
||||
width="200"
|
||||
height="40"
|
||||
x="304"
|
||||
y="257.70078"
|
||||
style="font-size:10.66666698px" /></flowRegion><flowPara
|
||||
id="flowPara1881" /></flowRoot> <text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:3.52777767px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
x="141.81667"
|
||||
y="110.51666"
|
||||
id="text1897"
|
||||
inkscape:export-xdpi="90.650002"
|
||||
inkscape:export-ydpi="90.650002"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1895"
|
||||
x="141.81667"
|
||||
y="113.63792"
|
||||
style="stroke-width:0.26458332" /></text>
|
||||
<text
|
||||
id="text1114-0"
|
||||
y="98.310852"
|
||||
x="85.58918"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;letter-spacing:0px;word-spacing:0px;display:inline;opacity:1;vector-effect:none;fill:#949494;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;"
|
||||
xml:space="preserve"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001"><tspan
|
||||
style="font-style:italic;font-weight:bold;font-size:2.82222199px;vector-effect:none;fill:#949494;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;"
|
||||
y="98.310852"
|
||||
x="85.58918"
|
||||
id="tspan1112-9"
|
||||
sodipodi:role="line">available</tspan></text>
|
||||
<g
|
||||
id="g1956"
|
||||
transform="translate(0,-2.559597)"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001">
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.08687019px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.08199883px;word-spacing:8.54225349px;display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.71470124"
|
||||
d="m 84.666564,98.702477 -0.109422,-0.19385 c -0.03981,-0.30741 -0.211084,-0.46099 -0.513626,-0.46099 l -9.784987,0.0057 -5.319262,0.005 c -0.36621,0 -0.658025,-0.12764 -0.875631,-0.382645 -0.22026,-0.25152 -0.330448,-0.614755 -0.330448,-1.08984 0.100315,5e-4 0.143415,0.24114 0.143415,0.24114 l 0.03974,0.193855 c 0.116761,0.401725 0.420616,0.607895 0.911549,0.618375 l 5.421901,0.0217 9.566895,0.02015 c 0.345685,0.0097 0.725625,0.238125 0.849979,0.578525 0.124404,-0.340325 0.504082,-0.568905 0.849718,-0.578525 l 1.096705,-0.02005 22.35871,-0.02175 c 0.49093,-0.0105 0.79479,-0.21665 0.91155,-0.618375 l 0.0397,-0.193855 c 0,0 0.0431,-0.240395 0.14342,-0.24114 0,0.475085 -0.11018,0.83832 -0.33044,1.08984 -0.21761,0.255005 -0.50942,0.382645 -0.87563,0.382645 l -22.229766,-0.005 -1.341102,-0.0057 c -0.302541,0 -0.473827,0.15358 -0.513632,0.46099 l -0.109422,0.19385 z"
|
||||
id="path4994-6-0-4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccccccccccccccccccc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccsc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path1616"
|
||||
d="m 84.674306,98.542354 -0.0076,1.833906 c 0,0 0,2.11667 -2.116667,2.11667 H 63.5"
|
||||
style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker-end:url(#marker1640)" />
|
||||
</g>
|
||||
<path
|
||||
sodipodi:nodetypes="ccccccccsscssc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path4994-6-0-4-4"
|
||||
d="m 116.5919,95.49374 -5.31926,0.005 c -0.36621,0 -0.65803,-0.12764 -0.87563,-0.382645 -0.22026,-0.25152 -0.33045,-0.614755 -0.33045,-1.08984 0.10031,5e-4 0.14341,0.24114 0.14341,0.24114 l 0.0397,0.193855 c 0.11676,0.401725 0.42062,0.607895 0.91155,0.618375 l 5.4219,0.0217 c 2.93565,0.0045 9.63606,0.08367 13.81362,0.09876 0.65243,0.0024 0.12011,-0.218605 0.80418,-0.201947 0.74349,0.0181 1.46534,0.200354 2.04745,0.330975 -0.51415,0.110172 -1.32169,0.36346 -2.02005,0.362679 -0.66603,-7.44e-4 -0.16383,-0.155869 -0.82576,-0.15706 -4.20173,-0.0076 -9.95511,0.0051 -13.81066,-0.04099 z"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.08687019px;line-height:1.25;font-family:OpenSymbol;-inkscape-font-specification:OpenSymbol;letter-spacing:10.08199883px;word-spacing:8.54225349px;display:inline;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.1;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001" />
|
||||
<text
|
||||
id="text1114-0-7"
|
||||
y="98.230682"
|
||||
x="111.64234"
|
||||
style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.82222199px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;display:inline;opacity:1;vector-effect:none;fill:#949494;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-variant-east_asian:normal;"
|
||||
xml:space="preserve"
|
||||
inkscape:export-xdpi="188.85001"
|
||||
inkscape:export-ydpi="188.85001"><tspan
|
||||
style="font-style:italic;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:2.82222199px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:OpenSymbol;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:0px;word-spacing:0px;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;vector-effect:none;fill:#949494;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;font-variant-east_asian:normal;"
|
||||
y="98.230682"
|
||||
x="111.64234"
|
||||
id="tspan1112-9-1"
|
||||
sodipodi:role="line">in-reserve</tspan></text>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 58 KiB |
@ -1,43 +0,0 @@
|
||||
<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>
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,8 +0,0 @@
|
||||
|
||||
- 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. ...
|
@ -1,82 +0,0 @@
|
||||
@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
|
@ -1,47 +0,0 @@
|
||||
@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
|
@ -1,533 +0,0 @@
|
||||
<?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>
|
Before Width: | Height: | Size: 24 KiB |
@ -1,607 +0,0 @@
|
||||
<?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>
|
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 25 KiB |
@ -1,45 +0,0 @@
|
||||
@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
|
Before Width: | Height: | Size: 25 KiB |
@ -1,51 +0,0 @@
|
||||
@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
|
@ -1,11 +0,0 @@
|
||||
- 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
|