<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Simulator on Joulie</title><link>https://joulie-k8s.github.io/Joulie/versions/v0.0.2/docs/simulator/</link><description>Recent content in Simulator on Joulie</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://joulie-k8s.github.io/Joulie/versions/v0.0.2/docs/simulator/index.xml" rel="self" type="application/rss+xml"/><item><title>Workload and Power Simulator</title><link>https://joulie-k8s.github.io/Joulie/versions/v0.0.2/docs/simulator/simulator/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://joulie-k8s.github.io/Joulie/versions/v0.0.2/docs/simulator/simulator/</guid><description>&lt;p&gt;This document defines the Joulie simulator design and how it integrates with Joulie.&lt;/p&gt;
&lt;h2 id="goals"&gt;Goals&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Keep Kubernetes scheduling real (real pod placement/lifecycle).&lt;/li&gt;
&lt;li&gt;Simulate hardware telemetry and control interfaces (RAPL/DVFS now, GPU later).&lt;/li&gt;
&lt;li&gt;Provide reproducible, comparable experiments across Joulie and WAO.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="design-choice-hybrid-simulation"&gt;Design choice: hybrid simulation&lt;/h2&gt;
&lt;p&gt;The simulator is not a fake scheduler.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pod placement and pod lifetime stay real in Kubernetes.&lt;/li&gt;
&lt;li&gt;Simulator reads cluster state (pods/nodes) and derives synthetic hardware state per node.&lt;/li&gt;
&lt;li&gt;Joulie reads telemetry and sends control intents through HTTP endpoints.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This gives one source of truth for workload location: Kubernetes API.&lt;/p&gt;</description></item><item><title>Simulator Algorithms</title><link>https://joulie-k8s.github.io/Joulie/versions/v0.0.2/docs/simulator/simulator-algorithms/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://joulie-k8s.github.io/Joulie/versions/v0.0.2/docs/simulator/simulator-algorithms/</guid><description>&lt;p&gt;This page documents the core simulator math and control/workload update loop implemented in &lt;code&gt;simulator/cmd/simulator/main.go&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="per-node-state"&gt;Per-Node State&lt;/h2&gt;
&lt;p&gt;Each simulated node tracks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CapWatts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TargetThrottlePct&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ThrottlePct&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FreqScale&lt;/code&gt; in &lt;code&gt;[f_min/f_max, 1]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CPUUtil&lt;/code&gt; in &lt;code&gt;[0,1]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CapSaturated&lt;/code&gt; flag&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="power-model"&gt;Power Model&lt;/h2&gt;
&lt;p&gt;At telemetry/control update time, simulator computes power:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;P = P_idle + (P_max - P_idle) * util^alpha * freqScale^beta&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;P_idle = BaseIdleW&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;P_max = PMaxW&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;util = clamp(CPUUtil, 0, 1)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;alpha = AlphaUtil&lt;/code&gt; (defaults to 1 if invalid)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;beta = BetaFreq&lt;/code&gt; (defaults to 1 if invalid)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then applies bounds/cap handling:&lt;/p&gt;</description></item></channel></rss>