Skip to content

Commit c514463

Browse files
committed
Add the crank-scheduler to the benchmarks scripts folder for use as the new scheduling tool.
1 parent 24d264f commit c514463

File tree

12 files changed

+2236
-1
lines changed

12 files changed

+2236
-1
lines changed

build/benchmarks.template.liquid

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Do not change this file, it is generated using these steps:
2-
# - The file benchmarks.matrix.yml defines how each job is run in parallel
2+
# - The file benchmarks*.json defines how each pipeline set of jobs is run in parallel
33
# - Convert its content to json using https://jsonformatter.org/yaml-to-json
44
# - Use the template in benchmarks.template.liquid and the converted json using https://liquidjs.com/playground.html
55
# - Update this file with the result of the template generation
Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
# Complete Configuration Options Guide
2+
3+
This guide demonstrates all possible configuration options using `example_complete_features.json`.
4+
5+
## Machine Configuration Options
6+
7+
### 1. Single-Type Machine (Traditional)
8+
```json
9+
{
10+
"name": "single-type-machine",
11+
"capabilities": {
12+
"sut": {
13+
"priority": 1,
14+
"profiles": ["single-type-basic"],
15+
"default_profile": "single-type-basic"
16+
}
17+
},
18+
"preferred_partners": ["dedicated-load", "dedicated-db"]
19+
}
20+
```
21+
**Features:**
22+
- ✅ One machine type only (SUT)
23+
- ✅ Single profile available
24+
- ✅ Preferred partners for load/db roles
25+
26+
### 2. Multi-Type Machine (Advanced)
27+
```json
28+
{
29+
"name": "multi-type-machine",
30+
"capabilities": {
31+
"sut": {
32+
"priority": 1,
33+
"profiles": [
34+
"multi-sut-normal",
35+
"multi-sut-high-cpu",
36+
"multi-sut-low-memory"
37+
],
38+
"default_profile": "multi-sut-normal"
39+
},
40+
"load": {
41+
"priority": 2,
42+
"profiles": [
43+
"multi-load-normal",
44+
"multi-load-high-throughput",
45+
"multi-load-burst-mode"
46+
],
47+
"default_profile": "multi-load-normal"
48+
},
49+
"db": {
50+
"priority": 3,
51+
"profiles": [
52+
"multi-db-normal",
53+
"multi-db-memory-optimized"
54+
],
55+
"default_profile": "multi-db-normal"
56+
}
57+
}
58+
}
59+
```
60+
**Features:**
61+
- ✅ Multiple machine types (SUT, LOAD, DB)
62+
- ✅ Priority ordering (1=preferred, 2=secondary, 3=fallback)
63+
- ✅ Multiple sub-profiles per type
64+
- ✅ Default profile for each type
65+
66+
### 3. Specialized Machine
67+
```json
68+
{
69+
"name": "dedicated-load",
70+
"capabilities": {
71+
"load": {
72+
"priority": 1,
73+
"profiles": [
74+
"dedicated-load-standard",
75+
"dedicated-load-high-connections",
76+
"dedicated-load-low-latency"
77+
],
78+
"default_profile": "dedicated-load-standard"
79+
}
80+
}
81+
}
82+
```
83+
**Features:**
84+
- ✅ Dedicated to one role (LOAD only)
85+
- ✅ Multiple specialized profiles
86+
- ✅ No preferred partners needed
87+
88+
### 4. Specialized Machines (Dedicated Role)
89+
90+
```json
91+
{
92+
"name": "dedicated-db",
93+
"capabilities": {
94+
"db": {
95+
"priority": 1,
96+
"profiles": [
97+
"dedicated-db-standard",
98+
"dedicated-db-high-iops",
99+
"dedicated-db-large-dataset"
100+
],
101+
"default_profile": "dedicated-db-standard"
102+
}
103+
},
104+
"preferred_partners": []
105+
}
106+
```
107+
108+
**Features:**
109+
110+
- ✅ Dedicated to one role (DB only)
111+
- ✅ Multiple specialized profiles for different workloads
112+
- ✅ No preferred partners needed (self-contained)
113+
114+
## Scenario Configuration Options
115+
116+
### 1. Basic Scenario (Default Profiles)
117+
118+
```json
119+
{
120+
"name": "Simple Single Machine Test",
121+
"template": "simple-single.yml",
122+
"scenario_type": 1,
123+
"target_machines": ["single-type-machine", "multi-type-machine"],
124+
"estimated_runtime": 10.0,
125+
"description": "Basic single machine scenario with default profiles"
126+
}
127+
```
128+
**Result:** Uses default profiles for all machines
129+
130+
### 2. Custom Profile Selection
131+
```json
132+
{
133+
"name": "Triple Machine Test with Custom Profiles",
134+
"template": "triple-custom.yml",
135+
"scenario_type": 3,
136+
"target_machines": ["multi-type-machine"],
137+
"estimated_runtime": 45.0,
138+
"profile_overrides": {
139+
"multi-type-machine": {
140+
"sut": "multi-sut-high-cpu",
141+
"load": "multi-load-high-throughput",
142+
"db": "multi-db-memory-optimized"
143+
}
144+
}
145+
}
146+
```
147+
**Result:** Uses specific custom profiles for each machine type
148+
149+
### 3. Mixed Profile Usage
150+
```json
151+
{
152+
"name": "Mixed Profile Scenario",
153+
"template": "mixed-profiles.yml",
154+
"scenario_type": 2,
155+
"target_machines": ["single-type-machine", "multi-type-machine"],
156+
"profile_overrides": {
157+
"multi-type-machine": {
158+
"sut": "multi-sut-low-memory"
159+
}
160+
}
161+
}
162+
```
163+
**Result:**
164+
- `single-type-machine`: Uses default profile
165+
- `multi-type-machine` SUT: Uses custom profile
166+
- `multi-type-machine` LOAD: Uses default profile
167+
168+
## Configuration Properties Explained
169+
170+
### Machine Properties
171+
| Property | Required | Description |
172+
|----------|----------|-------------|
173+
| `name` || Unique machine identifier |
174+
| `capabilities` || Dict of machine types this machine can fulfill |
175+
| `preferred_partners` || List of preferred machines for other roles |
176+
177+
### Capability Properties
178+
| Property | Required | Description |
179+
|----------|----------|-------------|
180+
| `machine_type` || Key: "sut", "load", or "db" |
181+
| `priority` || 1=preferred, 2=secondary, 3=fallback |
182+
| `profiles` || List of available profile names |
183+
| `default_profile` || Which profile to use by default (defaults to first profile in list) |
184+
185+
### Scenario Properties
186+
| Property | Required | Description |
187+
|----------|----------|-------------|
188+
| `name` || Scenario identifier |
189+
| `template` || YAML template file |
190+
| `scenario_type` || 1=single, 2=dual, 3=triple machine |
191+
| `target_machines` || List of machines to run on |
192+
| `estimated_runtime` || Runtime in minutes |
193+
| `description` || Human-readable description |
194+
| `profile_overrides` || Custom profile overrides |
195+
196+
### Profile Overrides Structure
197+
```json
198+
"profile_overrides": {
199+
"machine-name": {
200+
"machine-type": "profile-name"
201+
}
202+
}
203+
```
204+
205+
## Testing the Configuration
206+
207+
Run these commands to test the example:
208+
209+
```bash
210+
# Test configuration loading and basic validation
211+
python main.py --config example_complete_features.json --list-jobs
212+
213+
# Test scheduling without YAML generation
214+
python main.py --config example_complete_features.json
215+
216+
# Test with template and YAML generation
217+
python main.py --config example_complete_features.json --template benchmarks.template.liquid --yaml-output ./output
218+
219+
# List jobs grouped by target machine
220+
python main.py --config example_complete_features.json --list-jobs-by-machine
221+
```
222+
223+
## Key Features Demonstrated
224+
225+
1.**Multi-type machines** - One machine can be SUT, LOAD, and DB
226+
2.**Priority-based selection** - Preferred roles vs fallback roles
227+
3.**Sub-profile support** - Multiple profiles per machine type
228+
4.**Default behavior** - No configuration change needed for existing setups
229+
5.**Custom overrides** - Specific profiles for specific scenarios
230+
6.**Backward compatibility** - Old single-type machines still work
231+
7.**Flexible scheduling** - Scheduler automatically picks best assignments

0 commit comments

Comments
 (0)