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

Recomendados

Kapacitor - Real Time Data Processing Engine von
Kapacitor - Real Time Data Processing EngineKapacitor - Real Time Data Processing Engine
Kapacitor - Real Time Data Processing EnginePrashant Vats
1.9K views21 Folien
Node Interactive Debugging Node.js In Production von
Node Interactive Debugging Node.js In ProductionNode Interactive Debugging Node.js In Production
Node Interactive Debugging Node.js In ProductionYunong Xiao
7.3K views103 Folien
Hadoop cluster performance profiler von
Hadoop cluster performance profilerHadoop cluster performance profiler
Hadoop cluster performance profilerIhor Bobak
74 views36 Folien
XDP in Practice: DDoS Mitigation @Cloudflare von
XDP in Practice: DDoS Mitigation @CloudflareXDP in Practice: DDoS Mitigation @Cloudflare
XDP in Practice: DDoS Mitigation @CloudflareC4Media
2.1K views68 Folien
AMC Minor Technical Issues von
AMC Minor Technical IssuesAMC Minor Technical Issues
AMC Minor Technical IssuesApache Traffic Server
210 views25 Folien

Más contenido relacionado

Similar a Sequence: Pipeline modelling in Pharo

Ad Server Optimization von
Ad Server OptimizationAd Server Optimization
Ad Server OptimizationAbhishek Parwal
379 views26 Folien
Swift profiling middleware and tools von
Swift profiling middleware and toolsSwift profiling middleware and tools
Swift profiling middleware and toolszhang hua
1.4K views20 Folien
Debugging node in prod von
Debugging node in prodDebugging node in prod
Debugging node in prodYunong Xiao
186.8K views107 Folien
Inside the JVM - Follow the white rabbit! von
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 views59 Folien
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak von
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak   CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak
CONFidence 2015: DTrace + OSX = Fun - Andrzej Dyjak PROIDEA
291 views49 Folien
Introduction to Chainer von
Introduction to ChainerIntroduction to Chainer
Introduction to ChainerSeiya Tokui
4.3K views40 Folien

Similar a Sequence: Pipeline modelling in Pharo(20)

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

Más de ESUG

Workshop: Identifying concept inventories in agile programming von
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
12 views16 Folien
Technical documentation support in Pharo von
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
31 views39 Folien
The Pharo Debugger and Debugging tools: Advances and Roadmap von
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 views44 Folien
Migration process from monolithic to micro frontend architecture in mobile ap... von
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
22 views35 Folien
Analyzing Dart Language with Pharo: Report and early results von
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
107 views30 Folien
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6 von
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 views35 Folien

Más de ESUG(20)

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

Último

tecnologia18.docx von
tecnologia18.docxtecnologia18.docx
tecnologia18.docxnosi6702
5 views5 Folien
FOSSLight Community Day 2023-11-30 von
FOSSLight Community Day 2023-11-30FOSSLight Community Day 2023-11-30
FOSSLight Community Day 2023-11-30Shane Coughlan
5 views18 Folien
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI... von
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
41 views83 Folien
360 graden fabriek von
360 graden fabriek360 graden fabriek
360 graden fabriekinfo33492
122 views25 Folien
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra... von
.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üller
40 views62 Folien
Generic or specific? Making sensible software design decisions von
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 views60 Folien

Último(20)

tecnologia18.docx von nosi6702
tecnologia18.docxtecnologia18.docx
tecnologia18.docx
nosi67025 views
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI... von 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üller41 views
360 graden fabriek von info33492
360 graden fabriek360 graden fabriek
360 graden fabriek
info33492122 views
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra... von 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üller40 views
Generic or specific? Making sensible software design decisions von 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
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P... von NimaTorabi2
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
NimaTorabi212 views
Unmasking the Dark Art of Vectored Exception Handling: Bypassing XDR and EDR ... von 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 Onofri860 views
Copilot Prompting Toolkit_All Resources.pdf von Riccardo Zamana
Copilot Prompting Toolkit_All Resources.pdfCopilot Prompting Toolkit_All Resources.pdf
Copilot Prompting Toolkit_All Resources.pdf
Riccardo Zamana10 views
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft... von Deltares
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...
DSD-INT 2023 Process-based modelling of salt marsh development coupling Delft...
Deltares7 views
Headless JS UG Presentation.pptx von Jack Spektor
Headless JS UG Presentation.pptxHeadless JS UG Presentation.pptx
Headless JS UG Presentation.pptx
Jack Spektor8 views
Myths and Facts About Hospice Care: Busting Common Misconceptions von Care Coordinations
Myths and Facts About Hospice Care: Busting Common MisconceptionsMyths and Facts About Hospice Care: Busting Common Misconceptions
Myths and Facts About Hospice Care: Busting Common Misconceptions
AI and Ml presentation .pptx von FayazAli87
AI and Ml presentation .pptxAI and Ml presentation .pptx
AI and Ml presentation .pptx
FayazAli8712 views
Ports-and-Adapters Architecture for Embedded HMI von Burkhard Stubert
Ports-and-Adapters Architecture for Embedded HMIPorts-and-Adapters Architecture for Embedded HMI
Ports-and-Adapters Architecture for Embedded HMI
Burkhard Stubert21 views
Fleet Management Software in India von Fleetable
Fleet Management Software in India Fleet Management Software in India
Fleet Management Software in India
Fleetable11 views
Airline Booking Software von SharmiMehta
Airline Booking SoftwareAirline Booking Software
Airline Booking Software
SharmiMehta6 views

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.