Sequence: Pipeline modelling in Pharo

E
ESUGESUG
Sequence: Pipeline modelling in Pharo
IWST 2023: International Workshop on Smalltalk Technologies,
August 29-31, 2023, Lyon, France
Dmitry Matveev
Intel Corporation
August 31, 2023
Outline
Introduction
Sequence overview
Implementation
Future
The background
What we did
▶ We developed platforms: SoC for IoT.
▶ Platforms bring various capabilities, e.g:
▶ Camera (MIPI), Media (codec), AI, DSP, etc.
▶ Capabilities are utilized by workloads.
▶ Workloads enable use-cases and their KPIs:
▶ "Handle N streams at K FPS while doing X".
The environemnt
How we did it
▶ Every component had its own team:
▶ Development, testing, benchmarking done individually;
▶ The integration team pulled all components together to make
a BKC:
▶ "Best-Known Conguration.
Pre-production hardware is fun
▶ A very limited number of units.
▶ May be not very stable in the beginning.
The problem
How to evaluate the system performance without having the
complete system ready?
▶ Simulate it!
Why it matters?
▶ Understand how every individual component contributes to the
overall performance:
▶ What (where) to optimize next?
▶ Understand the application ow:
▶ Are there execution gaps or stalls?
▶ How to reorganize the application ow to meet the criteria?
Seeking for a solution
Simulator expectations
▶ Allow to describe system resources;
▶ Allow to dene building blocks using that resources;
▶ Allow to build scenarios atop of these blocks;
▶ Collect information of interest;
▶ Present the interactive system trace for inspection;
▶ Provide rapid feedback for what-if? and trial-and-error
analysis.
Crafting the solution
Why Smalltalk
▶ There was no good out-of-the box solution;
▶ Pharo itself was closest to become a solution:
▶ Smalltalk is a nice language to describe things;
▶ Pharo Playground (Ctrl+G) is all we need for rapid feedback;
▶ Roassal is a nice visualization framework.
▶ Only a simulator engine itself was missing.
Sequence: A minimum example
| a b |
a := 'A' asSeqBlock latency: 20 ms.
b := 'B' asSeqBlock latency: 20 fps.
a  b.
(Sequence startingWith: a)
runFor: 500 m
Sequence: Data stream example
| s w g |
s := 'S' asSeqBlock latency: [ :f | (f data * 10) ms ].
w := 'W' asSeqBlock latency: 25 ms.
s  w.
g := PMPoissonGenerator new lambda: 5.
(Sequence startingWith: s)
runFor: 800 ms
on: [ g next ]
Sequence: Resource sharing example
| a b t |
t := SeqTarget new lanes: 2.
a := 'A' asSeqBlock latency: 25 ms; target: t; lanes: 2.
b := 'B' asSeqBlock latency: 30 ms; target: t; lanes: 1.
SeqNaiveMultiExecutor new
add: (Sequence startingWith: a);
add: (Sequence startingWith: b);
scheduler: SeqRoundRobinScheduler new;
runFor: 500 ms;
trace.
Sequence: Real-time processing example
| s1 a s2 b |
s1 := 'Src1' asSeqBlock latency: 30 fps; live.
a := 'A' asSeqBlock latency: 22 fps.
s2 := 'Src2' asSeqBlock latency: 30 fps; live.
b := 'B' asSeqBlock latency: 30 fps.
s1  a.
s2  b.
SeqNaiveMultiExecutor new
add: (Sequence startingWith: s1);
add: (Sequence startingWith: s2);
runFor: 500 ms;
trace.
Sequence: Advanced examples
Pipelining
| src a b c seq opts |
src := 'Src' asSeqBlock
latency: 30 fps;
live.
a := 'A' asSeqBlock latency: 33 ms.
b := 'B' asSeqBlock latency: 33 ms.
c := 'C' asSeqBlock latency: 33 ms.
src  a  b  c.
seq := Sequence startingWith: src.
opts := SeqExecOptions new
usePipelining;
dropFrames.
(SeqNaiveMultiExecutor new
scheduler: SeqRoundRobinScheduler new;
add: seq options: opts;
runFor: 500 ms;
trace) showFrameDrops; colorByFrames
Streams
| src a b c xpu seq opts |
src := 'Src' asSeqBlock
latency: 33 ms;
live.
a := 'A' asSeqBlock latency: 10 ms.
b := 'B' asSeqBlock latency: 45 ms.
c := 'C' asSeqBlock latency: 10 ms.
src  a  b  c.
xpu := SeqTarget new lanes: 2.
b target: xpu; streams: 2.
seq := Sequence startingWith: src.
opts := SeqExecOptions new
usePipelining;
dropFrames.
(SeqNaiveMultiExecutor new
scheduler: SeqRoundRobinScheduler new;
add: seq options: opts;
runFor: 500 ms;
trace) showFrameDrops; colorByFrames.
Sequence: Advanced examples
Pipelining example
Streams example
Sequence: Characteristics of a DES
Sequence is as Discrete Event Simulation (DES) system
▶ It registers Events that happen during the simulation;
▶ Events are essentially facts that particular blocks could execute;
▶ System state is dened by Targets which are free or locked at
the given time point;
▶ Targets are essentially the Resources;
▶ Simulation time is discrete, the current time pointer is
advanced by the coming events.
More on DES
▶ J. Banks, Introduction to Simulation (1999)
Sequence inside
▶ The core of Sequence is a simulation executor.
▶ There may be multiple but SeqNaiveMultiExecutor is the
most advanced at the time.
▶ Simulation executor represents sequences as running processes.
▶ Processes are running periodically with no termination criteria.
▶ The system-level termination criteria is simulation time
(#runFor:).
▶ Normally, a sequence object maps to a single execution
process, but there are exceptions:
▶ Sequences with live sources map to two processes, one for a
source block and one for the sequence;
▶ Pipelined sequences map to N interconnected processes: every
block gets its own process (or K processes if streams: k
property is assigned).
Sequence inside: Event streams
SeqEventStream: the heart of the simulation system
▶ Represents a running periodic process.
▶ FSM inside, handles one block (one target) at time.
▶ Provides compact API for the executor to manage:
▶ #canWork: answer executor if this particular stream can do the
work, depending on its state.
▶ #updateFrame:: sent implicitly within executor when stream's
input data is available (a new input frame is generated).
Stream updates its internal block stream based on this data.
▶ #advance: make next step (progress) in the process.
Internally, either lock or release the current resource for the
current block.
▶ #nextTick: answer the time of the next event in this stream.
▶ #updateTimePoint:: let the event stream know what is the
simulation time right now.
Sequence inside: Event stream state machine
#idle #ready #exec
Meaning No data available Data is available Data is available
Not entered execution yet Executing (may be blocked
waiting for a resource)
#canWork Asks canStartBlock This/next block can lock Lock acquired: true
its target No lock:
- See #canWork @ #ready
#advance Call startBlock Call startBlock if not yet Lock acquired: leave block
Move to #ready Enter a new block: - Release resource
- See #advance @ #exec - Record event
. . . If at the last block:
- Record completion
- Move to #idle
No lock:
- Peek next block
- Acquire a new lock
# i d l e
# r e a d y
# c a n S t a r t ?
# u p d a t e F r a m e :
# e x e c
# a d v a n c e
# a d v a n c e
(EOS)
# a d v a n c e
Sequence inside: Simulation executor loop
Simulation executor loop becomes straightforward with the
SeqEventStream abstraction dened above:
▶ Update time point for all streams;
▶ Ask which streams can work;
▶ Filter out streams which can work right now (time point is not
in the future);
▶ Let Scheduler decide which stream will be advanced;
▶ Advance the selected stream (#advance:) and update the
time point (sometimes with 0 increment).
▶ Repeat.
Note: advancing one stream invalidates invariants so some streams
which could work now may not work anymore in the next iteration.
Sequence inside: Scheduler
▶ User-congurable object (can implement your own);
▶ Integrated into:
▶ Executor loop: asked which stream to prefer if there're
multiple candidates to run right now.
▶ #decide: aCollectionOfStreams.
▶ Target (resource) locking: asked if a stream can lock this
resource.
▶ #askLockOn: aTarget for: aStream at: aSeqBlock:
targets consult with scheduler if an available resource can be
given on request;
▶ #waitlist: aStream to: aTarget: sent by a Stream to
inform it is interested in locking the target, if resource lock
request has been rejected.
▶ Available: SeqDumbScheduler, SeqRoundRobinScheduler,
SeqPriorityRRScheduler.
Next steps on Sequence
Short-term plan
▶ Extend test coverage, close the functionality gaps.
▶ Interoperability: export to Perfetto format.
▶ Prepare a formal release.
Mid-term plan
▶ Interoperability: import from Perfetto format.
▶ Introduce annotations: some way to mark parts of the
sequence we're especially interested in, to see it in the trace.
▶ Introduce monitors: custom hooks to probe and collect
simulation run-time information about the running processes
and resource state.
Sequence: Vision
Long-term vision
▶ Extend the time domain from milliseconds to arbitrary.
▶ Extend to model non-periodic processes.
▶ Consider Queues as the right abstraction to access targets?
▶ Composable simulations:
▶ What if a Sequence block is also simulation inside?
Thanks!
Sequence is already Open Source:
▶ Currently hosted at Github:
https://github.com/dmatveev/sequence.
▶ ~2.5KLOC of code, ~1.5KLOC of tests.
▶ MIT License.
Try it today!
Metacello new
baseline: 'Sequence';
repository: 'github://dmatveev/sequence';
load.
1 sur 22

Recommandé

Kapacitor - Real Time Data Processing Engine par
Kapacitor - Real Time Data Processing EngineKapacitor - Real Time Data Processing Engine
Kapacitor - Real Time Data Processing EnginePrashant Vats
1.9K vues21 diapositives
Node Interactive Debugging Node.js In Production par
Node Interactive Debugging Node.js In ProductionNode Interactive Debugging Node.js In Production
Node Interactive Debugging Node.js In ProductionYunong Xiao
7.3K vues103 diapositives
Hadoop cluster performance profiler par
Hadoop cluster performance profilerHadoop cluster performance profiler
Hadoop cluster performance profilerIhor Bobak
73 vues36 diapositives
XDP in Practice: DDoS Mitigation @Cloudflare par
XDP in Practice: DDoS Mitigation @CloudflareXDP in Practice: DDoS Mitigation @Cloudflare
XDP in Practice: DDoS Mitigation @CloudflareC4Media
2.1K vues68 diapositives
AMC Minor Technical Issues par
AMC Minor Technical IssuesAMC Minor Technical Issues
AMC Minor Technical IssuesApache Traffic Server
210 vues25 diapositives
Python database connection par
Python database connectionPython database connection
Python database connectionbaabtra.com - No. 1 supplier of quality freshers
1.6K vues11 diapositives

Contenu connexe

Similaire à Sequence: Pipeline modelling in Pharo

Ad Server Optimization par
Ad Server OptimizationAd Server Optimization
Ad Server OptimizationAbhishek Parwal
378 vues26 diapositives
Swift profiling middleware and tools par
Swift profiling middleware and toolsSwift profiling middleware and tools
Swift profiling middleware and toolszhang hua
1.4K vues20 diapositives
Debugging node in prod par
Debugging node in prodDebugging node in prod
Debugging node in prodYunong Xiao
186.8K vues107 diapositives
Inside the JVM - Follow the white rabbit! par
Inside the JVM - Follow the white rabbit!Inside the JVM - Follow the white rabbit!
Inside the JVM - Follow the white rabbit!Sylvain Wallez
1.5K vues59 diapositives
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak par
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak   CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak PROIDEA
291 vues49 diapositives
Introduction to Chainer par
Introduction to ChainerIntroduction to Chainer
Introduction to ChainerSeiya Tokui
4.3K vues40 diapositives

Similaire à Sequence: Pipeline modelling in Pharo(20)

Swift profiling middleware and tools par zhang hua
Swift profiling middleware and toolsSwift profiling middleware and tools
Swift profiling middleware and tools
zhang hua1.4K vues
Debugging node in prod par Yunong Xiao
Debugging node in prodDebugging node in prod
Debugging node in prod
Yunong Xiao186.8K vues
Inside the JVM - Follow the white rabbit! par Sylvain Wallez
Inside the JVM - Follow the white rabbit!Inside the JVM - Follow the white rabbit!
Inside the JVM - Follow the white rabbit!
Sylvain Wallez1.5K vues
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak par PROIDEA
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak   CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
PROIDEA291 vues
Introduction to Chainer par Seiya Tokui
Introduction to ChainerIntroduction to Chainer
Introduction to Chainer
Seiya Tokui4.3K vues
HKG18-TR12 - LAVA for LITE Platforms and Tests par Linaro
HKG18-TR12 - LAVA for LITE Platforms and TestsHKG18-TR12 - LAVA for LITE Platforms and Tests
HKG18-TR12 - LAVA for LITE Platforms and Tests
Linaro269 vues
Scaling machine learning to millions of users with Apache Beam par Tatiana Al-Chueyr
Scaling machine learning to millions of users with Apache BeamScaling machine learning to millions of users with Apache Beam
Scaling machine learning to millions of users with Apache Beam
On the benchmark of Chainer par Kenta Oono
On the benchmark of ChainerOn the benchmark of Chainer
On the benchmark of Chainer
Kenta Oono51K vues
[xp2013] Narrow Down What to Test par Zsolt Fabok
[xp2013] Narrow Down What to Test[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to Test
Zsolt Fabok830 vues
Microservices with Micronaut par QAware GmbH
Microservices with MicronautMicroservices with Micronaut
Microservices with Micronaut
QAware GmbH513 vues
Microservices with Micronaut par QAware GmbH
Microservices with MicronautMicroservices with Micronaut
Microservices with Micronaut
QAware GmbH2.8K vues
Container orchestration from theory to practice par Docker, Inc.
Container orchestration from theory to practiceContainer orchestration from theory to practice
Container orchestration from theory to practice
Docker, Inc.343 vues
Troubleshooting real production problems par Tier1 app
Troubleshooting real production problemsTroubleshooting real production problems
Troubleshooting real production problems
Tier1 app1.5K vues
VideoMR - A Map and Reduce Framework for Real-time Video Processing par Matthias Trapp
VideoMR - A Map and Reduce Framework for Real-time Video ProcessingVideoMR - A Map and Reduce Framework for Real-time Video Processing
VideoMR - A Map and Reduce Framework for Real-time Video Processing
Reactive & Realtime Web Applications with TurboGears2 par Alessandro Molina
Reactive & Realtime Web Applications with TurboGears2Reactive & Realtime Web Applications with TurboGears2
Reactive & Realtime Web Applications with TurboGears2
Alessandro Molina2.1K vues

Plus de ESUG

Workshop: Identifying concept inventories in agile programming par
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
9 vues16 diapositives
Technical documentation support in Pharo par
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
27 vues39 diapositives
The Pharo Debugger and Debugging tools: Advances and Roadmap par
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
56 vues44 diapositives
Migration process from monolithic to micro frontend architecture in mobile ap... par
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
19 vues35 diapositives
Analyzing Dart Language with Pharo: Report and early results par
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
106 vues30 diapositives
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6 par
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
37 vues35 diapositives

Plus de ESUG(20)

Workshop: Identifying concept inventories in agile programming par ESUG
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
ESUG9 vues
Technical documentation support in Pharo par ESUG
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
ESUG27 vues
The Pharo Debugger and Debugging tools: Advances and Roadmap par ESUG
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
ESUG56 vues
Migration process from monolithic to micro frontend architecture in mobile ap... par ESUG
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
ESUG19 vues
Analyzing Dart Language with Pharo: Report and early results par ESUG
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
ESUG106 vues
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6 par ESUG
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
ESUG37 vues
A Unit Test Metamodel for Test Generation par ESUG
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
ESUG49 vues
Creating Unit Tests Using Genetic Programming par ESUG
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
ESUG46 vues
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes par ESUG
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
ESUG52 vues
Exploring GitHub Actions through EGAD: An Experience Report par ESUG
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
ESUG17 vues
Pharo: a reflective language A first systematic analysis of reflective APIs par ESUG
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
ESUG57 vues
Garbage Collector Tuning par ESUG
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
ESUG20 vues
Improving Performance Through Object Lifetime Profiling: the DataFrame Case par ESUG
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
ESUG43 vues
Pharo DataFrame: Past, Present, and Future par ESUG
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
ESUG43 vues
thisContext in the Debugger par ESUG
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
ESUG36 vues
Websockets for Fencing Score par ESUG
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
ESUG18 vues
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript par ESUG
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ESUG46 vues
Advanced Object- Oriented Design Mooc par ESUG
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
ESUG85 vues
A New Architecture Reconciling Refactorings and Transformations par ESUG
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
ESUG28 vues
BioSmalltalk par ESUG
BioSmalltalkBioSmalltalk
BioSmalltalk
ESUG415 vues

Dernier

Consulting for Data Monetization Maximizing the Profit Potential of Your Data... par
Consulting for Data Monetization Maximizing the Profit Potential of Your Data...Consulting for Data Monetization Maximizing the Profit Potential of Your Data...
Consulting for Data Monetization Maximizing the Profit Potential of Your Data...Flexsin
15 vues10 diapositives
HarshithAkkapelli_Presentation.pdf par
HarshithAkkapelli_Presentation.pdfHarshithAkkapelli_Presentation.pdf
HarshithAkkapelli_Presentation.pdfharshithakkapelli
11 vues16 diapositives
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ... par
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ...Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ...
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ...Donato Onofri
711 vues34 diapositives
WebAssembly par
WebAssemblyWebAssembly
WebAssemblyJens Siebert
33 vues18 diapositives
What Can Employee Monitoring Software Do?​ par
What Can Employee Monitoring Software Do?​What Can Employee Monitoring Software Do?​
What Can Employee Monitoring Software Do?​wAnywhere
21 vues11 diapositives
Unleash The Monkeys par
Unleash The MonkeysUnleash The Monkeys
Unleash The MonkeysJacob Duijzer
7 vues28 diapositives

Dernier(20)

Consulting for Data Monetization Maximizing the Profit Potential of Your Data... par Flexsin
Consulting for Data Monetization Maximizing the Profit Potential of Your Data...Consulting for Data Monetization Maximizing the Profit Potential of Your Data...
Consulting for Data Monetization Maximizing the Profit Potential of Your Data...
Flexsin 15 vues
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ... par Donato Onofri
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ...Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ...
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ...
Donato Onofri711 vues
What Can Employee Monitoring Software Do?​ par wAnywhere
What Can Employee Monitoring Software Do?​What Can Employee Monitoring Software Do?​
What Can Employee Monitoring Software Do?​
wAnywhere21 vues
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra... par Marc Müller
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra....NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra...
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra...
Marc Müller38 vues
DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -... par Deltares
DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -...DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -...
DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -...
Deltares6 vues
Roadmap y Novedades de producto par Neo4j
Roadmap y Novedades de productoRoadmap y Novedades de producto
Roadmap y Novedades de producto
Neo4j50 vues
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI... par Marc Müller
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...
Marc Müller36 vues
Generic or specific? Making sensible software design decisions par Bert Jan Schrijver
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
Copilot Prompting Toolkit_All Resources.pdf par Riccardo Zamana
Copilot Prompting Toolkit_All Resources.pdfCopilot Prompting Toolkit_All Resources.pdf
Copilot Prompting Toolkit_All Resources.pdf
DSD-INT 2023 Next-Generation Flood Inundation Mapping for Taiwan - Delft3D FM... par Deltares
DSD-INT 2023 Next-Generation Flood Inundation Mapping for Taiwan - Delft3D FM...DSD-INT 2023 Next-Generation Flood Inundation Mapping for Taiwan - Delft3D FM...
DSD-INT 2023 Next-Generation Flood Inundation Mapping for Taiwan - Delft3D FM...
Deltares7 vues
DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J... par Deltares
DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J...DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J...
DSD-INT 2023 3D hydrodynamic modelling of microplastic transport in lakes - J...
Deltares9 vues

Sequence: Pipeline modelling in Pharo

  • 1. Sequence: Pipeline modelling in Pharo IWST 2023: International Workshop on Smalltalk Technologies, August 29-31, 2023, Lyon, France Dmitry Matveev Intel Corporation August 31, 2023
  • 3. The background What we did ▶ We developed platforms: SoC for IoT. ▶ Platforms bring various capabilities, e.g: ▶ Camera (MIPI), Media (codec), AI, DSP, etc. ▶ Capabilities are utilized by workloads. ▶ Workloads enable use-cases and their KPIs: ▶ "Handle N streams at K FPS while doing X".
  • 4. The environemnt How we did it ▶ Every component had its own team: ▶ Development, testing, benchmarking done individually; ▶ The integration team pulled all components together to make a BKC: ▶ "Best-Known Conguration. Pre-production hardware is fun ▶ A very limited number of units. ▶ May be not very stable in the beginning.
  • 5. The problem How to evaluate the system performance without having the complete system ready? ▶ Simulate it! Why it matters? ▶ Understand how every individual component contributes to the overall performance: ▶ What (where) to optimize next? ▶ Understand the application ow: ▶ Are there execution gaps or stalls? ▶ How to reorganize the application ow to meet the criteria?
  • 6. Seeking for a solution Simulator expectations ▶ Allow to describe system resources; ▶ Allow to dene building blocks using that resources; ▶ Allow to build scenarios atop of these blocks; ▶ Collect information of interest; ▶ Present the interactive system trace for inspection; ▶ Provide rapid feedback for what-if? and trial-and-error analysis.
  • 7. Crafting the solution Why Smalltalk ▶ There was no good out-of-the box solution; ▶ Pharo itself was closest to become a solution: ▶ Smalltalk is a nice language to describe things; ▶ Pharo Playground (Ctrl+G) is all we need for rapid feedback; ▶ Roassal is a nice visualization framework. ▶ Only a simulator engine itself was missing.
  • 8. Sequence: A minimum example | a b | a := 'A' asSeqBlock latency: 20 ms. b := 'B' asSeqBlock latency: 20 fps. a b. (Sequence startingWith: a) runFor: 500 m
  • 9. Sequence: Data stream example | s w g | s := 'S' asSeqBlock latency: [ :f | (f data * 10) ms ]. w := 'W' asSeqBlock latency: 25 ms. s w. g := PMPoissonGenerator new lambda: 5. (Sequence startingWith: s) runFor: 800 ms on: [ g next ]
  • 10. Sequence: Resource sharing example | a b t | t := SeqTarget new lanes: 2. a := 'A' asSeqBlock latency: 25 ms; target: t; lanes: 2. b := 'B' asSeqBlock latency: 30 ms; target: t; lanes: 1. SeqNaiveMultiExecutor new add: (Sequence startingWith: a); add: (Sequence startingWith: b); scheduler: SeqRoundRobinScheduler new; runFor: 500 ms; trace.
  • 11. Sequence: Real-time processing example | s1 a s2 b | s1 := 'Src1' asSeqBlock latency: 30 fps; live. a := 'A' asSeqBlock latency: 22 fps. s2 := 'Src2' asSeqBlock latency: 30 fps; live. b := 'B' asSeqBlock latency: 30 fps. s1 a. s2 b. SeqNaiveMultiExecutor new add: (Sequence startingWith: s1); add: (Sequence startingWith: s2); runFor: 500 ms; trace.
  • 12. Sequence: Advanced examples Pipelining | src a b c seq opts | src := 'Src' asSeqBlock latency: 30 fps; live. a := 'A' asSeqBlock latency: 33 ms. b := 'B' asSeqBlock latency: 33 ms. c := 'C' asSeqBlock latency: 33 ms. src a b c. seq := Sequence startingWith: src. opts := SeqExecOptions new usePipelining; dropFrames. (SeqNaiveMultiExecutor new scheduler: SeqRoundRobinScheduler new; add: seq options: opts; runFor: 500 ms; trace) showFrameDrops; colorByFrames Streams | src a b c xpu seq opts | src := 'Src' asSeqBlock latency: 33 ms; live. a := 'A' asSeqBlock latency: 10 ms. b := 'B' asSeqBlock latency: 45 ms. c := 'C' asSeqBlock latency: 10 ms. src a b c. xpu := SeqTarget new lanes: 2. b target: xpu; streams: 2. seq := Sequence startingWith: src. opts := SeqExecOptions new usePipelining; dropFrames. (SeqNaiveMultiExecutor new scheduler: SeqRoundRobinScheduler new; add: seq options: opts; runFor: 500 ms; trace) showFrameDrops; colorByFrames.
  • 13. Sequence: Advanced examples Pipelining example Streams example
  • 14. Sequence: Characteristics of a DES Sequence is as Discrete Event Simulation (DES) system ▶ It registers Events that happen during the simulation; ▶ Events are essentially facts that particular blocks could execute; ▶ System state is dened by Targets which are free or locked at the given time point; ▶ Targets are essentially the Resources; ▶ Simulation time is discrete, the current time pointer is advanced by the coming events. More on DES ▶ J. Banks, Introduction to Simulation (1999)
  • 15. Sequence inside ▶ The core of Sequence is a simulation executor. ▶ There may be multiple but SeqNaiveMultiExecutor is the most advanced at the time. ▶ Simulation executor represents sequences as running processes. ▶ Processes are running periodically with no termination criteria. ▶ The system-level termination criteria is simulation time (#runFor:). ▶ Normally, a sequence object maps to a single execution process, but there are exceptions: ▶ Sequences with live sources map to two processes, one for a source block and one for the sequence; ▶ Pipelined sequences map to N interconnected processes: every block gets its own process (or K processes if streams: k property is assigned).
  • 16. Sequence inside: Event streams SeqEventStream: the heart of the simulation system ▶ Represents a running periodic process. ▶ FSM inside, handles one block (one target) at time. ▶ Provides compact API for the executor to manage: ▶ #canWork: answer executor if this particular stream can do the work, depending on its state. ▶ #updateFrame:: sent implicitly within executor when stream's input data is available (a new input frame is generated). Stream updates its internal block stream based on this data. ▶ #advance: make next step (progress) in the process. Internally, either lock or release the current resource for the current block. ▶ #nextTick: answer the time of the next event in this stream. ▶ #updateTimePoint:: let the event stream know what is the simulation time right now.
  • 17. Sequence inside: Event stream state machine #idle #ready #exec Meaning No data available Data is available Data is available Not entered execution yet Executing (may be blocked waiting for a resource) #canWork Asks canStartBlock This/next block can lock Lock acquired: true its target No lock: - See #canWork @ #ready #advance Call startBlock Call startBlock if not yet Lock acquired: leave block Move to #ready Enter a new block: - Release resource - See #advance @ #exec - Record event . . . If at the last block: - Record completion - Move to #idle No lock: - Peek next block - Acquire a new lock # i d l e # r e a d y # c a n S t a r t ? # u p d a t e F r a m e : # e x e c # a d v a n c e # a d v a n c e (EOS) # a d v a n c e
  • 18. Sequence inside: Simulation executor loop Simulation executor loop becomes straightforward with the SeqEventStream abstraction dened above: ▶ Update time point for all streams; ▶ Ask which streams can work; ▶ Filter out streams which can work right now (time point is not in the future); ▶ Let Scheduler decide which stream will be advanced; ▶ Advance the selected stream (#advance:) and update the time point (sometimes with 0 increment). ▶ Repeat. Note: advancing one stream invalidates invariants so some streams which could work now may not work anymore in the next iteration.
  • 19. Sequence inside: Scheduler ▶ User-congurable object (can implement your own); ▶ Integrated into: ▶ Executor loop: asked which stream to prefer if there're multiple candidates to run right now. ▶ #decide: aCollectionOfStreams. ▶ Target (resource) locking: asked if a stream can lock this resource. ▶ #askLockOn: aTarget for: aStream at: aSeqBlock: targets consult with scheduler if an available resource can be given on request; ▶ #waitlist: aStream to: aTarget: sent by a Stream to inform it is interested in locking the target, if resource lock request has been rejected. ▶ Available: SeqDumbScheduler, SeqRoundRobinScheduler, SeqPriorityRRScheduler.
  • 20. Next steps on Sequence Short-term plan ▶ Extend test coverage, close the functionality gaps. ▶ Interoperability: export to Perfetto format. ▶ Prepare a formal release. Mid-term plan ▶ Interoperability: import from Perfetto format. ▶ Introduce annotations: some way to mark parts of the sequence we're especially interested in, to see it in the trace. ▶ Introduce monitors: custom hooks to probe and collect simulation run-time information about the running processes and resource state.
  • 21. Sequence: Vision Long-term vision ▶ Extend the time domain from milliseconds to arbitrary. ▶ Extend to model non-periodic processes. ▶ Consider Queues as the right abstraction to access targets? ▶ Composable simulations: ▶ What if a Sequence block is also simulation inside?
  • 22. Thanks! Sequence is already Open Source: ▶ Currently hosted at Github: https://github.com/dmatveev/sequence. ▶ ~2.5KLOC of code, ~1.5KLOC of tests. ▶ MIT License. Try it today! Metacello new baseline: 'Sequence'; repository: 'github://dmatveev/sequence'; load.