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 de 22

Recomendados

Kapacitor - Real Time Data Processing Engine por
Kapacitor - Real Time Data Processing EngineKapacitor - Real Time Data Processing Engine
Kapacitor - Real Time Data Processing EnginePrashant Vats
1.9K visualizações21 slides
Node Interactive Debugging Node.js In Production por
Node Interactive Debugging Node.js In ProductionNode Interactive Debugging Node.js In Production
Node Interactive Debugging Node.js In ProductionYunong Xiao
7.3K visualizações103 slides
Hadoop cluster performance profiler por
Hadoop cluster performance profilerHadoop cluster performance profiler
Hadoop cluster performance profilerIhor Bobak
73 visualizações36 slides
XDP in Practice: DDoS Mitigation @Cloudflare por
XDP in Practice: DDoS Mitigation @CloudflareXDP in Practice: DDoS Mitigation @Cloudflare
XDP in Practice: DDoS Mitigation @CloudflareC4Media
2.1K visualizações68 slides
AMC Minor Technical Issues por
AMC Minor Technical IssuesAMC Minor Technical Issues
AMC Minor Technical IssuesApache Traffic Server
210 visualizações25 slides
Python database connection por
Python database connectionPython database connection
Python database connectionbaabtra.com - No. 1 supplier of quality freshers
1.6K visualizações11 slides

Mais conteúdo relacionado

Similar a Sequence: Pipeline modelling in Pharo

Ad Server Optimization por
Ad Server OptimizationAd Server Optimization
Ad Server OptimizationAbhishek Parwal
378 visualizações26 slides
Swift profiling middleware and tools por
Swift profiling middleware and toolsSwift profiling middleware and tools
Swift profiling middleware and toolszhang hua
1.4K visualizações20 slides
Debugging node in prod por
Debugging node in prodDebugging node in prod
Debugging node in prodYunong Xiao
186.8K visualizações107 slides
Inside the JVM - Follow the white rabbit! por
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 visualizações59 slides
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak por
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak   CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak PROIDEA
291 visualizações49 slides
Introduction to Chainer por
Introduction to ChainerIntroduction to Chainer
Introduction to ChainerSeiya Tokui
4.3K visualizações40 slides

Similar a Sequence: Pipeline modelling in Pharo(20)

Ad Server Optimization por Abhishek Parwal
Ad Server OptimizationAd Server Optimization
Ad Server Optimization
Abhishek Parwal378 visualizações
Swift profiling middleware and tools por zhang hua
Swift profiling middleware and toolsSwift profiling middleware and tools
Swift profiling middleware and tools
zhang hua1.4K visualizações
Debugging node in prod por Yunong Xiao
Debugging node in prodDebugging node in prod
Debugging node in prod
Yunong Xiao186.8K visualizações
Inside the JVM - Follow the white rabbit! por 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 visualizações
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak por PROIDEA
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak   CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
PROIDEA291 visualizações
Introduction to Chainer por Seiya Tokui
Introduction to ChainerIntroduction to Chainer
Introduction to Chainer
Seiya Tokui4.3K visualizações
HKG18-TR12 - LAVA for LITE Platforms and Tests por 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 visualizações
Scaling machine learning to millions of users with Apache Beam por 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
Tatiana Al-Chueyr212 visualizações
Security Monitoring with eBPF por Alex Maestretti
Security Monitoring with eBPFSecurity Monitoring with eBPF
Security Monitoring with eBPF
Alex Maestretti7K visualizações
Nexmark with beam por Etienne Chauchot
Nexmark with beamNexmark with beam
Nexmark with beam
Etienne Chauchot12.6K visualizações
On the benchmark of Chainer por Kenta Oono
On the benchmark of ChainerOn the benchmark of Chainer
On the benchmark of Chainer
Kenta Oono51K visualizações
[xp2013] Narrow Down What to Test por Zsolt Fabok
[xp2013] Narrow Down What to Test[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to Test
Zsolt Fabok830 visualizações
Microservices with Micronaut por QAware GmbH
Microservices with MicronautMicroservices with Micronaut
Microservices with Micronaut
QAware GmbH513 visualizações
Nt1330 Final Paper por Traci Webb
Nt1330 Final PaperNt1330 Final Paper
Nt1330 Final Paper
Traci Webb5 visualizações
Microservices with Micronaut por QAware GmbH
Microservices with MicronautMicroservices with Micronaut
Microservices with Micronaut
QAware GmbH2.8K visualizações
Container orchestration from theory to practice por Docker, Inc.
Container orchestration from theory to practiceContainer orchestration from theory to practice
Container orchestration from theory to practice
Docker, Inc.343 visualizações
Troubleshooting real production problems por Tier1 app
Troubleshooting real production problemsTroubleshooting real production problems
Troubleshooting real production problems
Tier1 app1.5K visualizações
VideoMR - A Map and Reduce Framework for Real-time Video Processing por 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
Matthias Trapp6 visualizações
Reactive & Realtime Web Applications with TurboGears2 por Alessandro Molina
Reactive & Realtime Web Applications with TurboGears2Reactive & Realtime Web Applications with TurboGears2
Reactive & Realtime Web Applications with TurboGears2
Alessandro Molina2.1K visualizações
UDP Report por James Dianics
UDP ReportUDP Report
UDP Report
James Dianics1.1K visualizações

Mais de ESUG

Workshop: Identifying concept inventories in agile programming por
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
12 visualizações16 slides
Technical documentation support in Pharo por
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
28 visualizações39 slides
The Pharo Debugger and Debugging tools: Advances and Roadmap por
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 visualizações44 slides
Migration process from monolithic to micro frontend architecture in mobile ap... por
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
20 visualizações35 slides
Analyzing Dart Language with Pharo: Report and early results por
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 visualizações30 slides
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6 por
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 visualizações35 slides

Mais de ESUG(20)

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

Último

Keep por
KeepKeep
KeepGeniusee
75 visualizações10 slides
El Arte de lo Possible por
El Arte de lo PossibleEl Arte de lo Possible
El Arte de lo PossibleNeo4j
39 visualizações35 slides
Generic or specific? Making sensible software design decisions por
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsBert Jan Schrijver
6 visualizações60 slides
Headless JS UG Presentation.pptx por
Headless JS UG Presentation.pptxHeadless JS UG Presentation.pptx
Headless JS UG Presentation.pptxJack Spektor
7 visualizações24 slides
Neo4j y GenAI por
Neo4j y GenAI Neo4j y GenAI
Neo4j y GenAI Neo4j
45 visualizações41 slides
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI... por
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üller
37 visualizações83 slides

Último(20)

Keep por Geniusee
KeepKeep
Keep
Geniusee75 visualizações
El Arte de lo Possible por Neo4j
El Arte de lo PossibleEl Arte de lo Possible
El Arte de lo Possible
Neo4j39 visualizações
Generic or specific? Making sensible software design decisions por 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
Bert Jan Schrijver6 visualizações
Headless JS UG Presentation.pptx por Jack Spektor
Headless JS UG Presentation.pptxHeadless JS UG Presentation.pptx
Headless JS UG Presentation.pptx
Jack Spektor7 visualizações
Neo4j y GenAI por Neo4j
Neo4j y GenAI Neo4j y GenAI
Neo4j y GenAI
Neo4j45 visualizações
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI... por 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üller37 visualizações
DSD-INT 2023 Simulating a falling apron in Delft3D 4 - Engineering Practice -... por 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 visualizações
A first look at MariaDB 11.x features and ideas on how to use them por Federico Razzoli
A first look at MariaDB 11.x features and ideas on how to use themA first look at MariaDB 11.x features and ideas on how to use them
A first look at MariaDB 11.x features and ideas on how to use them
Federico Razzoli45 visualizações
ict act 1.pptx por sanjaniarun08
ict act 1.pptxict act 1.pptx
ict act 1.pptx
sanjaniarun0813 visualizações
What Can Employee Monitoring Software Do?​ por wAnywhere
What Can Employee Monitoring Software Do?​What Can Employee Monitoring Software Do?​
What Can Employee Monitoring Software Do?​
wAnywhere21 visualizações
DSD-INT 2023 Wave-Current Interaction at Montrose Tidal Inlet System and Its ... por Deltares
DSD-INT 2023 Wave-Current Interaction at Montrose Tidal Inlet System and Its ...DSD-INT 2023 Wave-Current Interaction at Montrose Tidal Inlet System and Its ...
DSD-INT 2023 Wave-Current Interaction at Montrose Tidal Inlet System and Its ...
Deltares10 visualizações
DSD-INT 2023 Next-Generation Flood Inundation Mapping for Taiwan - Delft3D FM... por 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 visualizações
Consulting for Data Monetization Maximizing the Profit Potential of Your Data... por 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 visualizações
Unleash The Monkeys por Jacob Duijzer
Unleash The MonkeysUnleash The Monkeys
Unleash The Monkeys
Jacob Duijzer7 visualizações
SAP FOR CONTRACT MANUFACTURING.pdf por Virendra Rai, PMP
SAP FOR CONTRACT MANUFACTURING.pdfSAP FOR CONTRACT MANUFACTURING.pdf
SAP FOR CONTRACT MANUFACTURING.pdf
Virendra Rai, PMP11 visualizações
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge... por Deltares
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...
DSD-INT 2023 Delft3D FM Suite 2024.01 2D3D - New features + Improvements - Ge...
Deltares17 visualizações
DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the... por Deltares
DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the...DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the...
DSD-INT 2023 Leveraging the results of a 3D hydrodynamic model to improve the...
Deltares6 visualizações
Copilot Prompting Toolkit_All Resources.pdf por Riccardo Zamana
Copilot Prompting Toolkit_All Resources.pdfCopilot Prompting Toolkit_All Resources.pdf
Copilot Prompting Toolkit_All Resources.pdf
Riccardo Zamana8 visualizações
Software testing company in India.pptx por SakshiPatel82
Software testing company in India.pptxSoftware testing company in India.pptx
Software testing company in India.pptx
SakshiPatel827 visualizações
DSD-INT 2023 FloodAdapt - A decision-support tool for compound flood risk mit... por Deltares
DSD-INT 2023 FloodAdapt - A decision-support tool for compound flood risk mit...DSD-INT 2023 FloodAdapt - A decision-support tool for compound flood risk mit...
DSD-INT 2023 FloodAdapt - A decision-support tool for compound flood risk mit...
Deltares13 visualizações

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.