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 vistas21 diapositivas
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 vistas103 diapositivas
Hadoop cluster performance profiler por
Hadoop cluster performance profilerHadoop cluster performance profiler
Hadoop cluster performance profilerIhor Bobak
74 vistas36 diapositivas
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 vistas68 diapositivas
AMC Minor Technical Issues por
AMC Minor Technical IssuesAMC Minor Technical Issues
AMC Minor Technical IssuesApache Traffic Server
210 vistas25 diapositivas
Python database connection por
Python database connectionPython database connection
Python database connectionbaabtra.com - No. 1 supplier of quality freshers
1.6K vistas11 diapositivas

Más contenido relacionado

Similar a Sequence: Pipeline modelling in Pharo

Ad Server Optimization por
Ad Server OptimizationAd Server Optimization
Ad Server OptimizationAbhishek Parwal
379 vistas26 diapositivas
Swift profiling middleware and tools por
Swift profiling middleware and toolsSwift profiling middleware and tools
Swift profiling middleware and toolszhang hua
1.4K vistas20 diapositivas
Debugging node in prod por
Debugging node in prodDebugging node in prod
Debugging node in prodYunong Xiao
186.8K vistas107 diapositivas
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 vistas59 diapositivas
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 vistas49 diapositivas
Introduction to Chainer por
Introduction to ChainerIntroduction to Chainer
Introduction to ChainerSeiya Tokui
4.3K vistas40 diapositivas

Similar a Sequence: Pipeline modelling in Pharo(20)

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 vistas
Debugging node in prod por Yunong Xiao
Debugging node in prodDebugging node in prod
Debugging node in prod
Yunong Xiao186.8K vistas
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 vistas
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 vistas
Introduction to Chainer por Seiya Tokui
Introduction to ChainerIntroduction to Chainer
Introduction to Chainer
Seiya Tokui4.3K vistas
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 vistas
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 vistas
On the benchmark of Chainer por Kenta Oono
On the benchmark of ChainerOn the benchmark of Chainer
On the benchmark of Chainer
Kenta Oono51K vistas
[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 Fabok831 vistas
Microservices with Micronaut por QAware GmbH
Microservices with MicronautMicroservices with Micronaut
Microservices with Micronaut
QAware GmbH513 vistas
Nt1330 Final Paper por Traci Webb
Nt1330 Final PaperNt1330 Final Paper
Nt1330 Final Paper
Traci Webb5 vistas
Microservices with Micronaut por QAware GmbH
Microservices with MicronautMicroservices with Micronaut
Microservices with Micronaut
QAware GmbH2.8K vistas
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.344 vistas
Troubleshooting real production problems por Tier1 app
Troubleshooting real production problemsTroubleshooting real production problems
Troubleshooting real production problems
Tier1 app1.5K vistas
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 vistas
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 vistas

Más 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 vistas16 diapositivas
Technical documentation support in Pharo por
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
31 vistas39 diapositivas
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 vistas44 diapositivas
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
23 vistas35 diapositivas
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
107 vistas30 diapositivas
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
38 vistas35 diapositivas

Más 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 vistas
Technical documentation support in Pharo por ESUG
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
ESUG31 vistas
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 vistas
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...
ESUG23 vistas
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
ESUG107 vistas
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
ESUG38 vistas
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
ESUG53 vistas
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
ESUG48 vistas
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 vistas
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 vistas
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 vistas
Garbage Collector Tuning por ESUG
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
ESUG20 vistas
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 vistas
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 vistas
thisContext in the Debugger por ESUG
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
ESUG36 vistas
Websockets for Fencing Score por ESUG
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
ESUG18 vistas
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 vistas
Advanced Object- Oriented Design Mooc por ESUG
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
ESUG85 vistas
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 vistas
BioSmalltalk por ESUG
BioSmalltalkBioSmalltalk
BioSmalltalk
ESUG415 vistas

Último

DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation por
DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook AutomationDRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation
DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook AutomationHCLSoftware
6 vistas8 diapositivas
FOSSLight Community Day 2023-11-30 por
FOSSLight Community Day 2023-11-30FOSSLight Community Day 2023-11-30
FOSSLight Community Day 2023-11-30Shane Coughlan
6 vistas18 diapositivas
FIMA 2023 Neo4j & FS - Entity Resolution.pptx por
FIMA 2023 Neo4j & FS - Entity Resolution.pptxFIMA 2023 Neo4j & FS - Entity Resolution.pptx
FIMA 2023 Neo4j & FS - Entity Resolution.pptxNeo4j
17 vistas26 diapositivas
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
42 vistas83 diapositivas
Fleet Management Software in India por
Fleet Management Software in India Fleet Management Software in India
Fleet Management Software in India Fleetable
12 vistas1 diapositiva
Flask-Python.pptx por
Flask-Python.pptxFlask-Python.pptx
Flask-Python.pptxTriloki Gupta
7 vistas12 diapositivas

Último(20)

DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation por HCLSoftware
DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook AutomationDRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation
DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation
HCLSoftware6 vistas
FOSSLight Community Day 2023-11-30 por Shane Coughlan
FOSSLight Community Day 2023-11-30FOSSLight Community Day 2023-11-30
FOSSLight Community Day 2023-11-30
Shane Coughlan6 vistas
FIMA 2023 Neo4j & FS - Entity Resolution.pptx por Neo4j
FIMA 2023 Neo4j & FS - Entity Resolution.pptxFIMA 2023 Neo4j & FS - Entity Resolution.pptx
FIMA 2023 Neo4j & FS - Entity Resolution.pptx
Neo4j17 vistas
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üller42 vistas
Fleet Management Software in India por Fleetable
Fleet Management Software in India Fleet Management Software in India
Fleet Management Software in India
Fleetable12 vistas
Software evolution understanding: Automatic extraction of software identifier... por Ra'Fat Al-Msie'deen
Software evolution understanding: Automatic extraction of software identifier...Software evolution understanding: Automatic extraction of software identifier...
Software evolution understanding: Automatic extraction of software identifier...
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports por Ra'Fat Al-Msie'deen
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug ReportsBushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports
BushraDBR: An Automatic Approach to Retrieving Duplicate Bug Reports
Sprint 226 por ManageIQ
Sprint 226Sprint 226
Sprint 226
ManageIQ10 vistas
Gen Apps on Google Cloud PaLM2 and Codey APIs in Action por Márton Kodok
Gen Apps on Google Cloud PaLM2 and Codey APIs in ActionGen Apps on Google Cloud PaLM2 and Codey APIs in Action
Gen Apps on Google Cloud PaLM2 and Codey APIs in Action
Márton Kodok15 vistas
Myths and Facts About Hospice Care: Busting Common Misconceptions por 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
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
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 Zamana16 vistas

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.