gitgreen 1.1.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +209 -0
- package/data/cpu_physical_specs.json +105 -0
- package/data/source/GCP Machine types - Bare Metal Power Profiles.csv +22 -0
- package/data/source/GCP Machine types - CPU Profiles.csv +22 -0
- package/data/source/GCP Machine types - Dell R740 LCA.csv +37 -0
- package/data/source/GCP Machine types - Instances.csv +183 -0
- package/data/source/GCP Machine types - Machine Ratios.csv +29 -0
- package/data/source/GCP Machine types - Memory Ratios.csv +22 -0
- package/data/source/GCP Machine types - Scope 3 Ratios.csv +10 -0
- package/dist/init.js +107 -0
- package/dist/lib/carbon/power-profile-repository.js +50 -4
- package/dist/lib/integrations/db-setup.js +0 -32
- package/dist/lib/integrations/output-integrations.js +2 -0
- package/package.json +2 -1
- package/scripts/build_power_profiles.py +268 -0
- package/scripts/stress.sh +38 -0
package/README.md
CHANGED
|
@@ -178,6 +178,79 @@ gitgreen migrate --scope all # convenience wrapper (used by the GitLab comp
|
|
|
178
178
|
|
|
179
179
|
The GitLab component automatically runs `gitgreen migrate --scope job` and `--scope runner` before calculating emissions, so pipelines stay in sync even when you change versions.
|
|
180
180
|
|
|
181
|
+
### Table schemas
|
|
182
|
+
|
|
183
|
+
#### Job table (per-job emissions)
|
|
184
|
+
|
|
185
|
+
| Column | Type | Description |
|
|
186
|
+
|--------|------|-------------|
|
|
187
|
+
| `id` | BIGSERIAL | Auto-incrementing primary key |
|
|
188
|
+
| `ingested_at` | TIMESTAMPTZ | When the record was inserted |
|
|
189
|
+
| `provider` | TEXT | Cloud provider (`gcp` or `aws`) |
|
|
190
|
+
| `region` | TEXT | Cloud region/zone where the job ran |
|
|
191
|
+
| `machine_type` | TEXT | Instance type (e.g., `e2-standard-4`, `t3.medium`) |
|
|
192
|
+
| `cpu_points` | INT | Number of CPU metric data points collected |
|
|
193
|
+
| `ram_points` | INT | Number of RAM metric data points collected |
|
|
194
|
+
| `runtime_seconds` | INT | Total job duration in seconds |
|
|
195
|
+
| `total_emissions` | DOUBLE | Total carbon emissions in gCO2eq (cpu + ram + scope3) |
|
|
196
|
+
| `cpu_emissions` | DOUBLE | Emissions from CPU usage in gCO2eq |
|
|
197
|
+
| `ram_emissions` | DOUBLE | Emissions from RAM usage in gCO2eq |
|
|
198
|
+
| `scope3_emissions` | DOUBLE | Embodied carbon (manufacturing, shipping, disposal) in gCO2eq |
|
|
199
|
+
| `carbon_intensity` | DOUBLE | Grid carbon intensity in gCO2eq/kWh from Electricity Maps |
|
|
200
|
+
| `pue` | DOUBLE | Power Usage Effectiveness of the data center |
|
|
201
|
+
| `carbon_budget` | DOUBLE | Configured carbon budget threshold in gCO2eq |
|
|
202
|
+
| `over_budget` | BOOLEAN | Whether total emissions exceeded the budget |
|
|
203
|
+
| `gitlab_project_id` | BIGINT | GitLab project ID |
|
|
204
|
+
| `gitlab_pipeline_id` | BIGINT | GitLab pipeline ID |
|
|
205
|
+
| `gitlab_job_id` | BIGINT | GitLab job ID |
|
|
206
|
+
| `gitlab_job_name` | TEXT | Name of the GitLab job |
|
|
207
|
+
| `runner_id` | TEXT | GitLab runner ID |
|
|
208
|
+
| `runner_description` | TEXT | Runner description from GitLab |
|
|
209
|
+
| `runner_tags` | TEXT | Comma-separated runner tags |
|
|
210
|
+
| `runner_version` | TEXT | GitLab runner version |
|
|
211
|
+
| `runner_revision` | TEXT | GitLab runner revision |
|
|
212
|
+
| `payload` | JSONB | Full calculation result as JSON (for extensibility) |
|
|
213
|
+
|
|
214
|
+
#### Job timeseries table
|
|
215
|
+
|
|
216
|
+
| Column | Type | Description |
|
|
217
|
+
|--------|------|-------------|
|
|
218
|
+
| `id` | BIGSERIAL | Auto-incrementing primary key |
|
|
219
|
+
| `job_id` | BIGINT | Foreign key to the job table |
|
|
220
|
+
| `metric` | TEXT | Metric name: `cpu`, `ram_used`, or `ram_size` |
|
|
221
|
+
| `ts` | TIMESTAMPTZ | Timestamp of the data point |
|
|
222
|
+
| `value` | DOUBLE | Metric value (CPU utilization %, RAM bytes used, or RAM bytes total) |
|
|
223
|
+
|
|
224
|
+
#### Runner inventory table
|
|
225
|
+
|
|
226
|
+
| Column | Type | Description |
|
|
227
|
+
|--------|------|-------------|
|
|
228
|
+
| `id` | BIGSERIAL | Auto-incrementing primary key |
|
|
229
|
+
| `ingested_at` | TIMESTAMPTZ | When the record was inserted |
|
|
230
|
+
| `runner_id` | TEXT | GitLab runner ID |
|
|
231
|
+
| `runner_description` | TEXT | Runner description |
|
|
232
|
+
| `runner_version` | TEXT | GitLab runner version |
|
|
233
|
+
| `runner_revision` | TEXT | GitLab runner revision |
|
|
234
|
+
| `runner_platform` | TEXT | OS platform (e.g., `linux`) |
|
|
235
|
+
| `runner_architecture` | TEXT | CPU architecture (e.g., `amd64`) |
|
|
236
|
+
| `runner_executor` | TEXT | Executor type (e.g., `docker`, `shell`) |
|
|
237
|
+
| `runner_tags` | TEXT | Comma-separated runner tags |
|
|
238
|
+
| `machine_type` | TEXT | Instance type |
|
|
239
|
+
| `provider` | TEXT | Cloud provider |
|
|
240
|
+
| `region` | TEXT | Cloud region |
|
|
241
|
+
| `gcp_project_id` | TEXT | GCP project ID (if applicable) |
|
|
242
|
+
| `gcp_instance_id` | TEXT | GCP instance ID |
|
|
243
|
+
| `gcp_zone` | TEXT | GCP zone |
|
|
244
|
+
| `aws_region` | TEXT | AWS region (if applicable) |
|
|
245
|
+
| `aws_instance_id` | TEXT | AWS EC2 instance ID |
|
|
246
|
+
| `last_job_machine_type` | TEXT | Machine type from most recent job |
|
|
247
|
+
| `last_job_region` | TEXT | Region from most recent job |
|
|
248
|
+
| `last_job_provider` | TEXT | Provider from most recent job |
|
|
249
|
+
| `last_job_runtime_seconds` | INT | Runtime of most recent job |
|
|
250
|
+
| `last_job_total_emissions` | DOUBLE | Emissions from most recent job in gCO2eq |
|
|
251
|
+
| `last_job_recorded_at` | TIMESTAMPTZ | When the most recent job was recorded |
|
|
252
|
+
| `payload` | JSONB | Full runner metadata as JSON |
|
|
253
|
+
|
|
181
254
|
## Adding a provider
|
|
182
255
|
1. Extend `CloudProvider` and the provider guard in `src/index.ts` so the calculator accepts the new key.
|
|
183
256
|
2. Add machine power data (`<provider>_machine_power_profiles.json`) and, if needed, CPU profiles to `data/`, then update `PowerProfileRepository.loadMachineData` to load it.
|
|
@@ -274,6 +347,142 @@ gitgreen --provider aws \
|
|
|
274
347
|
|
|
275
348
|
This is useful for testing before integrating into your CI/CD pipeline.
|
|
276
349
|
|
|
350
|
+
## Carbon Calculation Methodology
|
|
351
|
+
|
|
352
|
+
GitGreen's carbon calculations are based on the methodology developed by [re:cinq](https://re-cinq.com/blog/cloud-cpu-energy-consumption) and [Teads](https://github.com/re-cinq/emissions-data), adapted for CI/CD workloads.
|
|
353
|
+
|
|
354
|
+
### Formula
|
|
355
|
+
|
|
356
|
+
The total carbon emissions for a CI job are calculated as:
|
|
357
|
+
|
|
358
|
+
```
|
|
359
|
+
E_total = E_operational + E_embodied
|
|
360
|
+
|
|
361
|
+
E_operational = (P_cpu + P_ram) × runtime_hours × PUE × carbon_intensity
|
|
362
|
+
E_embodied = scope3_emissions_hourly × runtime_hours
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
Where:
|
|
366
|
+
- **P_cpu**: CPU power consumption in kW, interpolated from utilization
|
|
367
|
+
- **P_ram**: RAM power consumption (0.5 W/GB × used GB)
|
|
368
|
+
- **PUE**: Power Usage Effectiveness of the data center (typically 1.1-1.2 for hyperscalers)
|
|
369
|
+
- **carbon_intensity**: Grid carbon intensity in gCO2eq/kWh from Electricity Maps API
|
|
370
|
+
- **scope3_emissions_hourly**: Amortized embodied carbon from manufacturing
|
|
371
|
+
|
|
372
|
+
### CPU Power Interpolation
|
|
373
|
+
|
|
374
|
+
CPU power is not linear with utilization. We use **cubic spline interpolation** across 4 measured points:
|
|
375
|
+
|
|
376
|
+
| Utilization | Power Ratio (of TDP) |
|
|
377
|
+
|-------------|---------------------|
|
|
378
|
+
| 0% (idle) | ~1.7% |
|
|
379
|
+
| 10% | ~3.4% |
|
|
380
|
+
| 50% | ~16.9% |
|
|
381
|
+
| 100% | 100% |
|
|
382
|
+
|
|
383
|
+
Power at any utilization is calculated as:
|
|
384
|
+
```
|
|
385
|
+
P_cpu(util) = CubicSpline([0, 10, 50, 100], [W_idle, W_10, W_50, W_100])(util)
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
The power values are derived from CPU TDP (Thermal Design Power) multiplied by empirically measured ratios from the [re:cinq emissions-data](https://github.com/re-cinq/emissions-data) project.
|
|
389
|
+
|
|
390
|
+
### Physical vCPU Correction
|
|
391
|
+
|
|
392
|
+
Cloud VMs share physical CPUs. To accurately estimate power for a VM, we scale by the ratio of VM vCPUs to physical CPU threads:
|
|
393
|
+
|
|
394
|
+
```
|
|
395
|
+
P_vm = TDP × ratio × (vm_vcpus / physical_threads)
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
Physical thread counts are sourced from official specifications:
|
|
399
|
+
|
|
400
|
+
| CPU | Cores | Threads | TDP | Source |
|
|
401
|
+
|-----|-------|---------|-----|--------|
|
|
402
|
+
| Intel Xeon Gold 6268CL | 24 | 48 | 205W | [eBay/Intel](https://www.ebay.com/p/2321792675) |
|
|
403
|
+
| Intel Xeon Gold 6253CL | 18 | 36 | 205W | [PassMark](https://www.cpubenchmark.net/cpu.php?cpu=Intel+Xeon+Gold+6253CL) |
|
|
404
|
+
| Intel Xeon Platinum 8481C | 56 | 112 | 350W | [TechPowerUp](https://www.techpowerup.com/cpu-specs/xeon-platinum-8481c.c3992) |
|
|
405
|
+
| Intel Xeon Platinum 8373C | 36 | 72 | 300W | [Wikipedia](https://en.wikipedia.org/wiki/List_of_Intel_Xeon_processors_(Ice_Lake-based)) |
|
|
406
|
+
| AMD EPYC 7B12 | 64 | 128 | 240W | [Newegg](https://www.newegg.com/p/1FR-00G6-00026) |
|
|
407
|
+
| Ampere Altra Q64-30 | 64 | 64 | 180W | [Ampere](https://amperecomputing.com/en/briefs/ampere-altra-family-product-brief) |
|
|
408
|
+
|
|
409
|
+
**Example:** For `n2-standard-80` (80 vCPUs, Xeon Gold 6268CL with 48 threads):
|
|
410
|
+
- Old (inflated): 205W × 80 = 16,400W at 100%
|
|
411
|
+
- Corrected: 205W × (80/48) = 342W at 100%
|
|
412
|
+
|
|
413
|
+
### Scope 3 (Embodied Carbon)
|
|
414
|
+
|
|
415
|
+
Scope 3 emissions represent the carbon footprint of manufacturing, shipping, and disposing of hardware. Based on Dell PowerEdge R740 LCA data:
|
|
416
|
+
|
|
417
|
+
| Component | Emissions (kgCO2eq) |
|
|
418
|
+
|-----------|---------------------|
|
|
419
|
+
| Base server (1 socket, low DRAM) | ~1000 |
|
|
420
|
+
| Per additional CPU | ~100 |
|
|
421
|
+
| Per 32GB DIMM | ~44 |
|
|
422
|
+
| Per SSD | ~50-100 |
|
|
423
|
+
|
|
424
|
+
These are amortized over a 6-year server lifespan (~0.019 gCO2eq/hour conversion factor) and allocated proportionally to VM resources.
|
|
425
|
+
|
|
426
|
+
### Data Sources
|
|
427
|
+
|
|
428
|
+
| Data | Source |
|
|
429
|
+
|------|--------|
|
|
430
|
+
| CPU power ratios | [re:cinq emissions-data](https://github.com/re-cinq/emissions-data) |
|
|
431
|
+
| GCP machine specs | [Google Cloud CPU Platforms](https://cloud.google.com/compute/docs/cpu-platforms) |
|
|
432
|
+
| Carbon intensity | [Electricity Maps API](https://www.electricitymaps.com/) |
|
|
433
|
+
| PUE values | [Google Data Center Efficiency](https://www.google.com/about/datacenters/efficiency/) |
|
|
434
|
+
| Scope 3 LCA data | Dell PowerEdge R740 Life Cycle Assessment |
|
|
435
|
+
|
|
436
|
+
### Accuracy & Limitations
|
|
437
|
+
|
|
438
|
+
#### What's grounded in real research
|
|
439
|
+
|
|
440
|
+
| Component | Methodology | Source |
|
|
441
|
+
|-----------|-------------|--------|
|
|
442
|
+
| CPU power ratios | Measured at 0%, 10%, 50%, 100% utilization | [re:cinq/Teads](https://github.com/re-cinq/emissions-data) |
|
|
443
|
+
| Physical CPU specs | Official vendor specifications | Intel ARK, TechPowerUp, AMD, Ampere |
|
|
444
|
+
| Carbon intensity | Real-time grid data | [Electricity Maps API](https://www.electricitymaps.com/) |
|
|
445
|
+
| PUE values | Published data center efficiency | [Google](https://www.google.com/about/datacenters/efficiency/) |
|
|
446
|
+
| Scope 3 methodology | Life cycle assessment | Dell PowerEdge R740 LCA |
|
|
447
|
+
|
|
448
|
+
#### Expected accuracy
|
|
449
|
+
|
|
450
|
+
- **Relative accuracy**: Excellent for comparing jobs (A vs B) and tracking trends
|
|
451
|
+
- **Absolute accuracy**: ±15-25% for CPU-bound workloads
|
|
452
|
+
|
|
453
|
+
#### Known limitations
|
|
454
|
+
|
|
455
|
+
| Limitation | Impact | Notes |
|
|
456
|
+
|------------|--------|-------|
|
|
457
|
+
| RAM uses fixed 0.5 W/GB | Low | Industry standard estimate for DDR4 |
|
|
458
|
+
| Scope 3 only for some AWS types | Medium | GCP scope 3 data not yet available |
|
|
459
|
+
| No GPU modeling | High (if using GPUs) | GPU-heavy jobs will be underestimated |
|
|
460
|
+
| No network I/O modeling | Low | Typically <5% of job power |
|
|
461
|
+
| No storage I/O modeling | Low | Typically <5% of job power |
|
|
462
|
+
| Multi-tenant overhead | Low | Actual power may be 5-10% lower due to shared resources |
|
|
463
|
+
| CPU specs may be incomplete | Medium | Falls back to unscaled profile if CPU not in database |
|
|
464
|
+
|
|
465
|
+
#### What this means for you
|
|
466
|
+
|
|
467
|
+
- **CI/CD optimization**: The relative comparisons are reliable - if job A shows 2x the emissions of job B, that's meaningful
|
|
468
|
+
- **Absolute reporting**: Use the numbers for directional guidance, not precise carbon accounting
|
|
469
|
+
- **Trend tracking**: Week-over-week and month-over-month trends are accurate
|
|
470
|
+
- **GPU workloads**: Currently underestimated - GPU power not modeled
|
|
471
|
+
|
|
472
|
+
### Source Data
|
|
473
|
+
|
|
474
|
+
Raw source data files are available in `data/`:
|
|
475
|
+
- `cpu_physical_specs.json` - Physical CPU specs with thread counts and sources (our research)
|
|
476
|
+
- `cpu_power_profiles.json` - TDP and power ratios per CPU type
|
|
477
|
+
- `gcp_machine_power_profiles.json` - GCP machine type to power mappings
|
|
478
|
+
- `aws_machine_power_profiles.json` - AWS instance type to power mappings
|
|
479
|
+
|
|
480
|
+
Original re:cinq data in `data/source/`:
|
|
481
|
+
- `GCP Machine types - CPU Profiles.csv` - TDP and power ratios per CPU
|
|
482
|
+
- `GCP Machine types - Instances.csv` - Machine type to CPU mappings
|
|
483
|
+
- `GCP Machine types - Scope 3 Ratios.csv` - Embodied carbon factors
|
|
484
|
+
- `GCP Machine types - Dell R740 LCA.csv` - Life cycle assessment reference
|
|
485
|
+
|
|
277
486
|
## License
|
|
278
487
|
|
|
279
488
|
MIT License - see [LICENSE](LICENSE) file for details.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
{
|
|
2
|
+
"_metadata": {
|
|
3
|
+
"description": "Physical CPU specifications with vCPU counts for accurate power-per-vCPU calculations",
|
|
4
|
+
"last_updated": "2025-01-22",
|
|
5
|
+
"methodology": "Power per VM vCPU = (TDP / physical_vcpus) * vm_vcpus * utilization_ratio"
|
|
6
|
+
},
|
|
7
|
+
"Intel Xeon Gold 6268CL": {
|
|
8
|
+
"cores": 24,
|
|
9
|
+
"threads": 48,
|
|
10
|
+
"tdp_watts": 205,
|
|
11
|
+
"architecture": "Cascade Lake",
|
|
12
|
+
"source": "https://www.ebay.com/p/2321792675",
|
|
13
|
+
"source_name": "eBay Product Listing (SRF80)"
|
|
14
|
+
},
|
|
15
|
+
"Intel Xeon Gold 6253CL": {
|
|
16
|
+
"cores": 18,
|
|
17
|
+
"threads": 36,
|
|
18
|
+
"tdp_watts": 205,
|
|
19
|
+
"architecture": "Cascade Lake",
|
|
20
|
+
"source": "https://www.cpubenchmark.net/cpu.php?cpu=Intel+Xeon+Gold+6253CL+@+3.10GHz&id=4539",
|
|
21
|
+
"source_name": "PassMark CPU Benchmark"
|
|
22
|
+
},
|
|
23
|
+
"Intel Xeon Platinum 8481C": {
|
|
24
|
+
"cores": 56,
|
|
25
|
+
"threads": 112,
|
|
26
|
+
"tdp_watts": 350,
|
|
27
|
+
"architecture": "Sapphire Rapids",
|
|
28
|
+
"source": "https://www.techpowerup.com/cpu-specs/xeon-platinum-8481c.c3992",
|
|
29
|
+
"source_name": "TechPowerUp CPU Database"
|
|
30
|
+
},
|
|
31
|
+
"Intel Xeon Platinum 8373C": {
|
|
32
|
+
"cores": 36,
|
|
33
|
+
"threads": 72,
|
|
34
|
+
"tdp_watts": 300,
|
|
35
|
+
"architecture": "Ice Lake",
|
|
36
|
+
"source": "https://en.wikipedia.org/wiki/List_of_Intel_Xeon_processors_(Ice_Lake-based)",
|
|
37
|
+
"source_name": "Wikipedia - Intel Xeon Ice Lake"
|
|
38
|
+
},
|
|
39
|
+
"Intel Xeon Platinum 8280L": {
|
|
40
|
+
"cores": 28,
|
|
41
|
+
"threads": 56,
|
|
42
|
+
"tdp_watts": 205,
|
|
43
|
+
"architecture": "Cascade Lake",
|
|
44
|
+
"source": "https://ark.intel.com/content/www/us/en/ark/products/192472/intel-xeon-platinum-8280l-processor-38-5m-cache-2-70-ghz.html",
|
|
45
|
+
"source_name": "Intel ARK"
|
|
46
|
+
},
|
|
47
|
+
"Intel Xeon Platinum 8273CL": {
|
|
48
|
+
"cores": 28,
|
|
49
|
+
"threads": 56,
|
|
50
|
+
"tdp_watts": 165,
|
|
51
|
+
"architecture": "Cascade Lake",
|
|
52
|
+
"source": "https://en.wikipedia.org/wiki/List_of_Intel_Xeon_processors_(Cascade_Lake-based)",
|
|
53
|
+
"source_name": "Wikipedia - Intel Xeon Cascade Lake"
|
|
54
|
+
},
|
|
55
|
+
"Intel Xeon Scalable Platinum 8173M": {
|
|
56
|
+
"cores": 28,
|
|
57
|
+
"threads": 56,
|
|
58
|
+
"tdp_watts": 165,
|
|
59
|
+
"architecture": "Skylake",
|
|
60
|
+
"source": "https://en.wikipedia.org/wiki/List_of_Intel_Xeon_processors#702Skylake-based_703Xeon_Scalable",
|
|
61
|
+
"source_name": "Wikipedia - Intel Xeon Skylake"
|
|
62
|
+
},
|
|
63
|
+
"Intel Skylake": {
|
|
64
|
+
"cores": 28,
|
|
65
|
+
"threads": 56,
|
|
66
|
+
"tdp_watts": 150,
|
|
67
|
+
"architecture": "Skylake",
|
|
68
|
+
"source": "https://cloud.google.com/compute/docs/cpu-platforms",
|
|
69
|
+
"source_name": "Google Cloud CPU Platforms",
|
|
70
|
+
"note": "Generic Skylake profile for e2 instances, estimated from typical Skylake server CPUs"
|
|
71
|
+
},
|
|
72
|
+
"Intel Xeon E7-8880V4": {
|
|
73
|
+
"cores": 22,
|
|
74
|
+
"threads": 44,
|
|
75
|
+
"tdp_watts": 150,
|
|
76
|
+
"architecture": "Broadwell",
|
|
77
|
+
"source": "https://www.intel.com/content/www/us/en/products/sku/93792/intel-xeon-processor-e78880-v4-55m-cache-2-20-ghz/specifications.html",
|
|
78
|
+
"source_name": "Intel ARK"
|
|
79
|
+
},
|
|
80
|
+
"AMD EPYC 7B12": {
|
|
81
|
+
"cores": 64,
|
|
82
|
+
"threads": 128,
|
|
83
|
+
"tdp_watts": 240,
|
|
84
|
+
"architecture": "Rome (Zen 2)",
|
|
85
|
+
"source": "https://www.newegg.com/p/1FR-00G6-00026",
|
|
86
|
+
"source_name": "Newegg Product Listing"
|
|
87
|
+
},
|
|
88
|
+
"AMD EPYC 7B13": {
|
|
89
|
+
"cores": 64,
|
|
90
|
+
"threads": 128,
|
|
91
|
+
"tdp_watts": 225,
|
|
92
|
+
"architecture": "Milan (Zen 3)",
|
|
93
|
+
"source": "https://www.amd.com/en/products/cpu/amd-epyc-7b13",
|
|
94
|
+
"source_name": "AMD Product Page"
|
|
95
|
+
},
|
|
96
|
+
"Q64-30": {
|
|
97
|
+
"cores": 64,
|
|
98
|
+
"threads": 64,
|
|
99
|
+
"tdp_watts": 180,
|
|
100
|
+
"architecture": "ARM Neoverse N1",
|
|
101
|
+
"source": "https://amperecomputing.com/en/briefs/ampere-altra-family-product-brief",
|
|
102
|
+
"source_name": "Ampere Altra Family Product Brief",
|
|
103
|
+
"note": "ARM cores have no hyperthreading, threads = cores"
|
|
104
|
+
}
|
|
105
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Vendor,Product Name,Region,Test Date,Total Number of vCPU,Memory Quantity (in GB),Number of CPU,CPU Vendor,CPU name,CPU Launch Year,CPU Total Cores,CPU Total Threads,CPU Base Frequency (in GHz),CPU Max Frequency (in GHz),CPU Cache L3 (in MB),CPU TDP L1 (in Watts),Turbostress repeat,PkgWatt Idle,PkgWatt CPUStress 10%,PkgWatt CPUStress 20%,PkgWatt CPUStress 30%,PkgWatt CPUStress 40%,PkgWatt CPUStress 50%,PkgWatt CPUStress 60%,PkgWatt CPUStress 70%,PkgWatt CPUStress 80%,PkgWatt CPUStress 90%,PkgWatt CPUStress 100%,PkgWatt ipsec 100%,PkgWatt VMStress 100%,PkgWatt maximize 100%,PkgWatt Average 100%,RAMWatt Idle,RAMWatt CPUStress 10%,RAMWatt CPUStress 20%,RAMWatt CPUStress 30%,RAMWatt CPUStress 40%,RAMWatt CPUStress 50%,RAMWatt CPUStress 60%,RAMWatt CPUStress 70%,RAMWatt CPUStress 80%,RAMWatt CPUStress 90%,RAMWatt CPUStress 100%,RAMWatt ipsec 100%,RAMWatt VMStress 100%,RAMWatt maximize 100%,PkgTmp Idle,PkgTmp CPUStress 10%,PkgTmp CPUStress 20%,PkgTmp CPUStress 30%,PkgTmp CPUStress 40%,PkgTmp CPUStress 50%,PkgTmp CPUStress 60%,PkgTmp CPUStress 70%,PkgTmp CPUStress 80%,PkgTmp CPUStress 90%,PkgTmp CPUStress 100%,PkgTmp ipsec 100%,PkgTmp VMStress 100%,PkgTmp maximize 100%
|
|
2
|
+
,,,,,,,Intel,Xeon Platinum 8481C,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
3
|
+
AWS,c5.metal,Paris,Jun-21,96,192,2,Intel,Xeon Platinum 8275CL,2019,24,48,3,"3,9","35,75",240,60,58,176,241,299,375,448,520,562,590,607,617,618,553,719,627,37,66,70,69,72,77,81,83,86,88,90,89,210,210,48,57,62,68,74,78,85,86,86,85,87,86,81,87
|
|
4
|
+
,,,,,,,Intel,Xeon Platinum 8373C,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
5
|
+
,,,,,,,Intel,Xeon Platinum 8280L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
6
|
+
,,,,,,,Intel,Xeon Platinum 8273CL,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
7
|
+
AWS,r5.metal,North Virginia,Jun-21,96,768,2,Intel,Xeon Platinum 8259CL,2019,24,48,"2,5","3,5","35,75",210,60,55,138,178,224,272,307,344,375,401,426,440,428,402,512,445,119,198,211,217,228,235,248,258,265,272,277,276,510,510,41,47,52,57,61,64,67,69,71,73,73,72,70,75
|
|
8
|
+
,,,,,,,Intel,Xeon Scalable Platinum 8173M,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
9
|
+
,,,,,,,Intel,Xeon Gold 6268CL,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
10
|
+
,,,,,,,Intel,Xeon Gold 6253CL,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
11
|
+
Cherry Servers,2xIntelGold6230R,,,104,256,2,Intel,Xeon Gold 6230R,2020,26,52,2.1,4,35.75,150,60,38,113,134,160,178,203,221,234,243,247,252,271,249,268,260,7,38,37,38,37,40,41,42,42,43,43,38,151,143,47,51,54,58,59,62,63,64,64,65,66,69,64,65
|
|
12
|
+
,,,,,,,Intel,Xeon E7-8880V4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
13
|
+
,,,,,,,Intel,Xeon E5-2696V4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
14
|
+
AWS,i3.metal,Oregon,Apr-21,72,512,2,Intel,Xeon E5-2686 v4,2016,18,36,2.3,3,45,145,60,35,100,126,152,178,205,223,238,250,263,272,292,254,307,281, 11 , 18 , 18 , 18 , 19 , 20 , 20 , 21 , 21 , 22 , 22 , 22 , 52 , 57 , 21 , 24 , 26 , 27 , 28 , 29 , 31 , 32 , 32 , 33 , 34 , 36 , 32 , 32
|
|
15
|
+
,,,,,,,Intel,Xeon E5-2696V3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
16
|
+
,,,,,,,Intel,Xeon E5-2696V2,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
17
|
+
Hardbricks (on premise),HP DL380 Gen8,,,32,96,2,Intel,Xeon E5-2660,2012,8,16,2.2,2,20,95,60,28,57,88,110,125,136,146,151,156,157,168,201,165,173,177,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,N/A,51,56,65,73,80,81,80,80,80,80,80,80,79,81
|
|
18
|
+
,,,,,,,Intel,Xeon E5-2689,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
19
|
+
,,,,,,,AMD, EPYC 9B14,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
20
|
+
,,,,,,,AMD, EPYC 7B13,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
21
|
+
,,,,,,,AMD, EPYC 7B12,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
22
|
+
,,,,,,,Ampere Altra,Q64-30,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Processor SKU,Base frequency (GHz),All-core turbo frequency (GHz),Single-core max turbo frequency (GHz),vCPUs,TDP (W),Memory Type,Memory Speed (MHz),Max Memory Size (GB),Processor Family,DDR Watts/GB,IDLE ratio,10% ratio,50% Ratio,,Sources
|
|
2
|
+
AMD EPYC 7B12,2.25,2.70,3.30,,240,DDR4,2933,,Rome,0.338,0.017,0.034,0.169,,
|
|
3
|
+
AMD EPYC 7B13,2.45,2.80,3.50,,,DDR4,,,Milan,0.338,0.017,0.034,0.169,,
|
|
4
|
+
AMD EPYC 9B14,2.60,3.30,3.70,,,DDR5,4800,2880,Genoa,0.281,0.014,0.028,0.141,,
|
|
5
|
+
Intel Xeon E5-2689,2.60,3.20,3.60,,115,DDR3/DDR4,,1500,Sandy Bridge,0.356,0.018,0.036,0.178,"DDR4 1600/1866/2133/2400 DDR3-800, DDR3-1066, DDR3-1333, DDR3-1600",https://www.intel.com/content/www/us/en/support/articles/000055192/processors.html
|
|
6
|
+
Intel Xeon E5-2696V2,2.50,3.10,3.50,,,DDR3,,,Ivy Bridge,0.375,0.019,0.038,0.188,,
|
|
7
|
+
Intel Xeon E5-2696V3,2.30,2.80,3.80,,145,DDR3/DDR4,2133,,Broadwell,0.356,0.018,0.036,0.178,,
|
|
8
|
+
Intel Xeon E5-2696V4,2.20,2.80,3.70,,150,DDR4,,,Broadwell,0.338,0.017,0.034,0.169,,
|
|
9
|
+
Intel Xeon E7-8880V4,2.20,2.60,3.30,,150,DDR3/DDR4,,3000,Broadwell,0.356,0.018,0.036,0.178,DDR4-1333/1600/1866 DDR3-1066/1333/1600,https://www.intel.com/content/www/us/en/products/sku/93792/intel-xeon-processor-e78880-v4-55m-cache-2-20-ghz/specifications.html
|
|
10
|
+
Intel Xeon Gold 6253CL,3.10,3.80,3.90,,205,DDR4,2933,,Cascade Lake,0.338,0.017,0.034,0.169,,
|
|
11
|
+
Intel Xeon Gold 6268CL,2.80,3.40,3.90,,205,DDR4,2933,1000,Cascade Lake,0.338,0.017,0.034,0.169,,
|
|
12
|
+
Intel Xeon Platinum 8273CL,2.20,2.90,3.70,,165,DDR4,2933,,Cascade Lake,0.338,0.017,0.034,0.169,,
|
|
13
|
+
Intel Xeon Platinum 8280L,2.50,3.40,4.00,,205,DDR4,2933,4500,Cascade Lake,0.338,0.017,0.034,0.169,,https://ark.intel.com/content/www/us/en/ark/products/192472/intel-xeon-platinum-8280l-processor-38-5m-cache-2-70-ghz.html
|
|
14
|
+
Intel Xeon Platinum 8373C,2.60,3.40,3.50,,300,DDR4,3200,6000,Ice Lake,0.338,0.017,0.034,0.169,,
|
|
15
|
+
Intel Xeon Platinum 8481C,1.90,3.00,3.30,,350,DDR5,4400,4000,Sapphire Rapids,0.281,0.014,0.028,0.141,,
|
|
16
|
+
Intel Xeon Scalable Platinum 8173M,2.00,2.70,3.50,,165,DDR4,2666,1536,Skylake,0.338,0.017,0.034,0.169,,
|
|
17
|
+
Intel Xeon Platinum EMR60C,2.10,3.30,4.00,,,DDR5,,,Emerald Rapids,0.281,0.014,0.028,0.141,,
|
|
18
|
+
Q64-30,3.00,3.00,3.00,,180,DDR4,3200,,ARM,0.338,0.017,0.034,0.169,,https://amperecomputing.com/briefs/ampere-altra-family-product-brief
|
|
19
|
+
,,,,,,,,,,,,,,,
|
|
20
|
+
,,,,,,,,,,0.600,0.200,0.300,0.400,,
|
|
21
|
+
,,,,,,,,,,,,,,,
|
|
22
|
+
https://cloud.google.com/compute/docs/cpu-platforms,,,,,,,,,,,,,,,
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
Source,Dell PowerEdge R740 Life-Cycle Assessment,,,,,,,
|
|
2
|
+
Description,"The Dell PowerEdge R740 is 2U, 2-socket platform: 2x Intel Xeon 140W CPUs, 12x 32GB DIMMs, 1x 400GB SSD, 8x 3.84TB SDDs, and 2x 1100W PSUs.",,,,,,,
|
|
3
|
+
,,,,,,,,
|
|
4
|
+
,,,,,,,,
|
|
5
|
+
,Total Scope 3 Emissions (kg CO2e),4288,,,,,,
|
|
6
|
+
,,Distribution,kg CO2e,Comment,,,,
|
|
7
|
+
,8*3.84TB Solid State Drives,78.80%,3379,,,,,
|
|
8
|
+
,PWB Mixed,13.80%,592,Includes: RAM (12*32GB) - Riser card 1 - Riser card 2 - Riser card 3 - Ethernet card - HDD Controller - Q-logic - Intel Ethernet X710,,,,
|
|
9
|
+
,Mainboard,4.10%,176,Includes: CPU with housing - Mainboard PWB - Connectors - Transport,,,,
|
|
10
|
+
,1*400GB Solid State Drive,1.50%,64,,,,,
|
|
11
|
+
,Chassis,0.80%,34,,,,,
|
|
12
|
+
,PSU,0.70%,30,,,,,
|
|
13
|
+
,Fans,0.30%,13,,,,,
|
|
14
|
+
,,,,,,,,
|
|
15
|
+
,PWB Mixed Scope 3 Distribution,592,,,,,,
|
|
16
|
+
Memory (in GB),,Distribution,kg CO2e,,,,,
|
|
17
|
+
384,12*32GB DIMMs Memory,90%,533,"The twelve 32GB RAM bars used within the configuration account for around 33% of the total mass of the mixed PWB. But analogous to the mass vs. carbon footprint discussions in chapter 4.2.1, they account for over 90% of the total GWP impact of the PWB Mixed due to their high capacity per RAM bar and the associated complexity and density of the built-in chips and dies.",,,,
|
|
18
|
+
,Riser card 1 - Riser card 2 - Riser card 3 - Ethernet card - HDD Controller - Q-logic - Intel Ethernet X710,10%,59,,,,,
|
|
19
|
+
,,,,,,,,
|
|
20
|
+
,Mainboard Scope 3 Distribution,176,,,,,,
|
|
21
|
+
,,Distribution,kg CO2e,,,,,
|
|
22
|
+
,Mainboard PWB,62%,109,,,,,
|
|
23
|
+
,2*Xeon CPUs with housing,27%,47,2*Xeon 140 W TDP,,,,
|
|
24
|
+
,Mainboard Connectors - Transport,11%,20,,,,,
|
|
25
|
+
,,,,,,,,
|
|
26
|
+
,R740 Manufacturing Emissions Distribution,,,,PowerEdge R740 Manufacturing Footprint Comparison (kgCO2eq),,,
|
|
27
|
+
,Parts,Emissions (kgCO2eq),,,R740 Product Carbon Footprint ,#REF!,R740 Life Cycle Assessment (adapted),550
|
|
28
|
+
,8*3.84TB Solid State Drives,3379,,,32 GB Memory,,1*32GB DIMM,44
|
|
29
|
+
,12*32GB DIMMs Memory,533,,,"x2 300GB 2,5"" HDD x1 1TB 2,5"" HDD",,3*400GB Solid State Drive,193
|
|
30
|
+
,Mainboard PWB,109,,,2 CPUs,,2*Xeon CPUs with housing,47
|
|
31
|
+
,1*400GB Solid State Drive,64,,,,,"Other (chassis, PSU, mainboard, cards, etc.)",265
|
|
32
|
+
,Riser card 1 - Riser card 2 - Riser card 3 - Ethernet card - HDD Controller - Q-logic - Intel Ethernet X710,59,,,,,Chassis,34
|
|
33
|
+
,2*Xeon CPUs with housing,47,,,,,PSU,30
|
|
34
|
+
,Chassis,34,,,,,Mainboard Connectors - Transport,20
|
|
35
|
+
,PSU,30,,,,,Fans,13
|
|
36
|
+
,Mainboard Connectors - Transport,20,,,,,Mainboard PWB,109
|
|
37
|
+
,Fans,13,,,,,Riser card 1 - Riser card 2 - Riser card 3 - Ethernet card - HDD Controller - Q-logic - Intel Ethernet X710,59
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
Instance type,Release Date,Instance vCPU,Platform Total Number of vCPU,Platform CPU Name,Instance Memory (in GB),Platform Memory (in GB),Storage Info (Type and Size in GB),Storage Type,Platform Storage Drive Quantity,Platform GPU Quantity,Platform GPU Name,Instance Number of GPU,Instance GPU memory (in GB),PkgWatt @ Idle,PkgWatt @ 10%,PkgWatt @ 50%,PkgWatt @ 100%,RAMWatt @ Idle,RAMWatt @ 10%,RAMWatt @ 50%,RAMWatt @ 100%,GPUWatt @ Idle,GPUWatt @ 10%,GPUWatt @ 50%,GPUWatt @ 100%,Delta Full Machine,Instance @ Idle,Instance @ 10%,Instance @ 50%,Instance @ 100%,Platform Additional Memory Scope 3 Emissions,Platform Additional Storage Scope 3 Emissions,Platform Additional GPU Scope 3 Emissions,Platform Additional CPU Scope 3 Emissions,Total Platform Scope 3 Emissions (kgCO₂eq),Instance Hourly Manufacturing Emissions (gCO₂eq),Hardware Information on GCP Documentation & Comments
|
|
2
|
+
t2d-standard-1,,1,60,EPYC 7B13,4,240,,,,,,,,,,,,0.06,0.11,0.56,1.13,,,,,,,,,,310.67,0.0,0.0,,1310.7,0.4,
|
|
3
|
+
t2d-standard-2,,2,60,EPYC 7B13,8,240,,,,,,,,,,,,0.11,0.23,1.13,2.25,,,,,,,,,,310.67,0.0,0.0,,1310.7,0.8,
|
|
4
|
+
t2d-standard-4,,4,60,EPYC 7B13,16,240,,,,,,,,,,,,0.23,0.45,2.25,4.50,,,,,,,,,,310.67,0.0,0.0,,1310.7,1.7,
|
|
5
|
+
t2d-standard-8,,8,60,EPYC 7B13,32,240,,,,,,,,,,,,0.45,0.90,4.50,9.00,,,,,,,,,,310.67,0.0,0.0,,1310.7,3.4,
|
|
6
|
+
t2d-standard-16,,16,60,EPYC 7B13,64,240,,,,,,,,,,,,0.90,1.80,9.00,18.00,,,,,,,,,,310.67,0.0,0.0,,1310.7,6.7,
|
|
7
|
+
t2d-standard-32,,32,60,EPYC 7B13,128,240,,,,,,,,,,,,1.80,3.60,18.00,36.00,,,,,,,,,,310.67,0.0,0.0,,1310.7,13.5,
|
|
8
|
+
t2d-standard-48,,48,60,EPYC 7B13,192,240,,,,,,,,,,,,2.70,5.40,27.00,54.00,,,,,,,,,,310.67,0.0,0.0,,1310.7,20.2,
|
|
9
|
+
t2d-standard-60,,60,60,EPYC 7B13,240,240,,,,,,,,,,,,3.38,6.75,33.75,67.50,,,,,,,,,,310.67,0.0,0.0,,1310.7,25.3,
|
|
10
|
+
c2d-standard-2,,2,112,EPYC 7B13,8,896,,,,,,,,,,,,0.11,0.23,1.13,2.25,,,,,,,,,,1220.47,0.0,0.0,,2220.5,0.8,
|
|
11
|
+
c2d-standard-4,,4,112,EPYC 7B13,16,896,,,,,,,,,,,,0.23,0.45,2.25,4.50,,,,,,,,,,1220.47,0.0,0.0,,2220.5,1.5,
|
|
12
|
+
c2d-standard-8,,8,112,EPYC 7B13,32,896,,,,,,,,,,,,0.45,0.90,4.50,9.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,3.1,
|
|
13
|
+
c2d-standard-16,,16,112,EPYC 7B13,64,896,,,,,,,,,,,,0.90,1.80,9.00,18.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,6.1,
|
|
14
|
+
c2d-standard-32,,32,112,EPYC 7B13,128,896,,,,,,,,,,,,1.80,3.60,18.00,36.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,12.2,
|
|
15
|
+
c2d-standard-56,,56,112,EPYC 7B13,224,896,,,,,,,,,,,,3.15,6.30,31.50,63.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,21.4,
|
|
16
|
+
c2d-standard-112,,112,112,EPYC 7B13,448,896,,,,,,,,,,,,6.30,12.60,63.00,126.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,42.8,
|
|
17
|
+
n2d-standard-2,,2,224,EPYC 7B13 / EPYC 7B12,8,896,,,,,,,,,,,,0.11,0.23,1.13,2.25,,,,,,,,,,1220.47,0.0,0.0,,2220.5,0.4,
|
|
18
|
+
n2d-standard-4,,4,224,EPYC 7B13 / EPYC 7B12,16,896,,,,,,,,,,,,0.23,0.45,2.25,4.50,,,,,,,,,,1220.47,0.0,0.0,,2220.5,0.8,
|
|
19
|
+
n2d-standard-8,,8,224,EPYC 7B13 / EPYC 7B12,32,896,,,,,,,,,,,,0.45,0.90,4.50,9.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,1.5,
|
|
20
|
+
n2d-standard-16,,16,224,EPYC 7B13 / EPYC 7B12,64,896,,,,,,,,,,,,0.90,1.80,9.00,18.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,3.1,
|
|
21
|
+
n2d-standard-32,,32,224,EPYC 7B13 / EPYC 7B12,128,896,,,,,,,,,,,,1.80,3.60,18.00,36.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,6.1,
|
|
22
|
+
n2d-standard-48,,48,224,EPYC 7B13 / EPYC 7B12,192,896,,,,,,,,,,,,2.70,5.40,27.00,54.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,9.2,
|
|
23
|
+
n2d-standard-64,,64,224,EPYC 7B13 / EPYC 7B12,256,896,,,,,,,,,,,,3.60,7.20,36.00,72.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,12.2,
|
|
24
|
+
n2d-standard-80,,80,224,EPYC 7B13 / EPYC 7B12,320,896,,,,,,,,,,,,4.50,9.00,45.00,90.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,15.3,
|
|
25
|
+
n2d-standard-96,,96,224,EPYC 7B13 / EPYC 7B12,384,896,,,,,,,,,,,,5.40,10.80,54.00,108.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,18.4,
|
|
26
|
+
n2d-standard-128,,128,224,EPYC 7B13 / EPYC 7B12,512,896,,,,,,,,,,,,7.20,14.40,72.00,144.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,24.5,
|
|
27
|
+
n2d-standard-224,,224,224,EPYC 7B13 / EPYC 7B12,896,896,,,,,,,,,,,,12.60,25.20,126.00,252.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,42.8,
|
|
28
|
+
n2d-highmem-2,,2,224,EPYC 7B13 / EPYC 7B12,16,896,,,,,,,,,,,,0.23,0.45,2.25,4.50,,,,,,,,,,1220.47,0.0,0.0,,2220.5,0.4,
|
|
29
|
+
n2d-highmem-4,,4,224,EPYC 7B13 / EPYC 7B12,32,896,,,,,,,,,,,,0.45,0.90,4.50,9.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,0.8,
|
|
30
|
+
n2d-highmem-8,,8,224,EPYC 7B13 / EPYC 7B12,64,896,,,,,,,,,,,,0.90,1.80,9.00,18.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,1.5,
|
|
31
|
+
n2d-highmem-16,,16,224,EPYC 7B13 / EPYC 7B12,128,896,,,,,,,,,,,,1.80,3.60,18.00,36.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,3.1,
|
|
32
|
+
n2d-highmem-32,,32,224,EPYC 7B13 / EPYC 7B12,256,896,,,,,,,,,,,,3.60,7.20,36.00,72.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,6.1,
|
|
33
|
+
n2d-highmem-48,,48,224,EPYC 7B13 / EPYC 7B12,384,896,,,,,,,,,,,,5.40,10.80,54.00,108.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,9.2,
|
|
34
|
+
n2d-highmem-64,,64,224,EPYC 7B13 / EPYC 7B12,512,896,,,,,,,,,,,,7.20,14.40,72.00,144.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,12.2,
|
|
35
|
+
n2d-highmem-80,,80,224,EPYC 7B13 / EPYC 7B12,640,896,,,,,,,,,,,,9.00,18.00,90.00,180.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,15.3,
|
|
36
|
+
n2d-highmem-96,,96,224,EPYC 7B13 / EPYC 7B12,768,896,,,,,,,,,,,,10.80,21.60,108.00,216.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,18.4,
|
|
37
|
+
n2d-highcpu-2,,2,224,EPYC 7B13 / EPYC 7B12,2,896,,,,,,,,,,,,0.03,0.06,0.28,0.56,,,,,,,,,,1220.47,0.0,0.0,,2220.5,0.4,
|
|
38
|
+
n2d-highcpu-4,,4,224,EPYC 7B13 / EPYC 7B12,4,896,,,,,,,,,,,,0.06,0.11,0.56,1.13,,,,,,,,,,1220.47,0.0,0.0,,2220.5,0.8,
|
|
39
|
+
n2d-highcpu-8,,8,224,EPYC 7B13 / EPYC 7B12,8,896,,,,,,,,,,,,0.11,0.23,1.13,2.25,,,,,,,,,,1220.47,0.0,0.0,,2220.5,1.5,
|
|
40
|
+
n2d-highcpu-16,,16,224,EPYC 7B13 / EPYC 7B12,16,896,,,,,,,,,,,,0.23,0.45,2.25,4.50,,,,,,,,,,1220.47,0.0,0.0,,2220.5,3.1,
|
|
41
|
+
n2d-highcpu-32,,32,224,EPYC 7B13 / EPYC 7B12,32,896,,,,,,,,,,,,0.45,0.90,4.50,9.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,6.1,
|
|
42
|
+
n2d-highcpu-48,,48,224,EPYC 7B13 / EPYC 7B12,48,896,,,,,,,,,,,,0.68,1.35,6.75,13.50,,,,,,,,,,1220.47,0.0,0.0,,2220.5,9.2,
|
|
43
|
+
n2d-highcpu-64,,64,224,EPYC 7B13 / EPYC 7B12,64,896,,,,,,,,,,,,0.90,1.80,9.00,18.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,12.2,
|
|
44
|
+
n2d-highcpu-80,,80,224,EPYC 7B13 / EPYC 7B12,80,896,,,,,,,,,,,,1.13,2.25,11.25,22.50,,,,,,,,,,1220.47,0.0,0.0,,2220.5,15.3,
|
|
45
|
+
n2d-highcpu-96,,96,224,EPYC 7B13 / EPYC 7B12,96,896,,,,,,,,,,,,1.35,2.70,13.50,27.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,18.4,
|
|
46
|
+
n2d-highcpu-128,,128,224,EPYC 7B13 / EPYC 7B12,128,896,,,,,,,,,,,,1.80,3.60,18.00,36.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,24.5,
|
|
47
|
+
n2d-highcpu-224,,224,224,EPYC 7B13 / EPYC 7B12,224,896,,,,,,,,,,,,3.15,6.30,31.50,63.00,,,,,,,,,,1220.47,0.0,0.0,,2220.5,42.8,
|
|
48
|
+
c3d-standard-4,,4,360,EPYC 9B14,16,2880,,,,,,,,,,,,0.23,0.45,2.25,4.50,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,1.1,
|
|
49
|
+
c3d-standard-8,,8,360,EPYC 9B14,32,2880,,,,,,,,,,,,0.45,0.90,4.50,9.00,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,2.1,
|
|
50
|
+
c3d-standard-16,,16,360,EPYC 9B14,64,2880,,,,,,,,,,,,0.90,1.80,9.00,18.00,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,4.3,
|
|
51
|
+
c3d-standard-30,,30,360,EPYC 9B14,120,2880,,,,,,,,,,,,1.69,3.38,16.88,33.75,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,8.0,
|
|
52
|
+
c3d-standard-60,,60,360,EPYC 9B14,240,2880,,,,,,,,,,,,3.38,6.75,33.75,67.50,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,16.0,
|
|
53
|
+
c3d-standard-90,,90,360,EPYC 9B14,360,2880,,,,,,,,,,,,5.06,10.13,50.63,101.25,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,24.0,
|
|
54
|
+
c3d-standard-180,,180,360,EPYC 9B14,720,2880,,,,,,,,,,,,10.13,20.25,101.25,202.50,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,48.0,
|
|
55
|
+
c3d-standard-360,,360,360,EPYC 9B14,1440,2880,,,,,,,,,,,,20.25,40.50,202.50,405.00,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,95.9,
|
|
56
|
+
c3d-highcpu-4,,4,360,EPYC 9B14,8,2880,,,,,,,,,,,,0.11,0.23,1.13,2.25,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,1.1,
|
|
57
|
+
c3d-highcpu-8,,8,360,EPYC 9B14,16,2880,,,,,,,,,,,,0.23,0.45,2.25,4.50,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,2.1,
|
|
58
|
+
c3d-highcpu-16,,16,360,EPYC 9B14,32,2880,,,,,,,,,,,,0.45,0.90,4.50,9.00,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,4.3,
|
|
59
|
+
c3d-highcpu-30,,30,360,EPYC 9B14,59,2880,,,,,,,,,,,,0.83,1.66,8.30,16.59,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,8.0,
|
|
60
|
+
c3d-highcpu-60,,60,360,EPYC 9B14,118,2880,,,,,,,,,,,,1.66,3.32,16.59,33.19,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,16.0,
|
|
61
|
+
c3d-highcpu-90,,90,360,EPYC 9B14,177,2880,,,,,,,,,,,,2.49,4.98,24.89,49.78,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,24.0,
|
|
62
|
+
c3d-highcpu-180,,180,360,EPYC 9B14,354,2880,,,,,,,,,,,,4.98,9.96,49.78,99.56,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,48.0,
|
|
63
|
+
c3d-highcpu-360,,360,360,EPYC 9B14,708,2880,,,,,,,,,,,,9.96,19.91,99.56,199.13,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,95.9,
|
|
64
|
+
c3d-highmem-4,,4,360,EPYC 9B14,32,2880,,,,,,,,,,,,0.45,0.90,4.50,9.00,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,1.1,
|
|
65
|
+
c3d-highmem-8,,8,360,EPYC 9B14,64,2880,,,,,,,,,,,,0.90,1.80,9.00,18.00,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,2.1,
|
|
66
|
+
c3d-highmem-16,,16,360,EPYC 9B14,128,2880,,,,,,,,,,,,1.80,3.60,18.00,36.00,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,4.3,
|
|
67
|
+
c3d-highmem-30,,30,360,EPYC 9B14,240,2880,,,,,,,,,,,,3.38,6.75,33.75,67.50,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,8.0,
|
|
68
|
+
c3d-highmem-60,,60,360,EPYC 9B14,480,2880,,,,,,,,,,,,6.75,13.50,67.50,135.00,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,16.0,
|
|
69
|
+
c3d-highmem-90,,90,360,EPYC 9B14,720,2880,,,,,,,,,,,,10.13,20.25,101.25,202.50,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,24.0,
|
|
70
|
+
c3d-highmem-180,,180,360,EPYC 9B14,1440,2880,,,,,,,,,,,,20.25,40.50,202.50,405.00,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,48.0,
|
|
71
|
+
c3d-highmem-360,,360,360,EPYC 9B14,2880,2880,,,,,,,,,,,,40.50,81.00,405.00,810.00,,,,,,,,,,3972.0816,0.0,0.0,,4972.1,95.9,
|
|
72
|
+
t2a-standard-1,,1,48,Q64-30,4,192,,,,,,,,,,,,0.07,0.14,0.68,1.35,,,,,,,,,,244.09,0.0,0.0,,1244.1,0.5,
|
|
73
|
+
t2a-standard-2,,2,48,Q64-30,8,192,,,,,,,,,,,,0.14,0.27,1.35,2.70,,,,,,,,,,244.09,0.0,0.0,,1244.1,1.0,
|
|
74
|
+
t2a-standard-4,,4,48,Q64-30,16,192,,,,,,,,,,,,0.27,0.54,2.70,5.40,,,,,,,,,,244.09,0.0,0.0,,1244.1,2.0,
|
|
75
|
+
t2a-standard-8,,8,48,Q64-30,32,192,,,,,,,,,,,,0.54,1.08,5.40,10.80,,,,,,,,,,244.09,0.0,0.0,,1244.1,4.0,
|
|
76
|
+
t2a-standard-16,,16,48,Q64-30,64,192,,,,,,,,,,,,1.08,2.16,10.80,21.60,,,,,,,,,,244.09,0.0,0.0,,1244.1,8.0,
|
|
77
|
+
t2a-standard-32,,32,48,Q64-30,128,192,,,,,,,,,,,,2.16,4.32,21.60,43.20,,,,,,,,,,244.09,0.0,0.0,,1244.1,16.0,
|
|
78
|
+
t2a-standard-48,,48,48,Q64-30,192,192,,,,,,,,,,,,3.24,6.48,32.40,64.80,,,,,,,,,,244.09,0.0,0.0,,1244.1,24.0,
|
|
79
|
+
m1-ultramem-40,,40,160,Xeon E7-8880V4,961,3844,,,,,,,,,,,,16.22,32.43,162.17,324.34,,,,,,,,,,5309.05,0.0,0.0,,6309.1,30.4,
|
|
80
|
+
m1-ultramem-80,,80,160,Xeon E7-8880V4,1922,3844,,,,,,,,,,,,32.43,64.87,324.34,648.68,,,,,,,,,,5309.05,0.0,0.0,,6309.1,60.9,
|
|
81
|
+
m1-ultramem-160,,160,160,Xeon E7-8880V4,3844,3844,,,,,,,,,,,,64.87,129.74,648.68,1297.35,,,,,,,,,,5309.05,0.0,0.0,,6309.1,121.7,
|
|
82
|
+
m1-megamem-96,,96,160,Xeon E7-8880V4,1433.6,3844,,,,,,,,,,,,24.19,48.38,241.92,483.84,,,,,,,,,,5309.05,0.0,0.0,,6309.1,73.0,
|
|
83
|
+
c2-standard-4,,4,60,Xeon Gold 6253CL,16,240,,,,,,,,,,,,0.27,0.54,2.70,5.40,,,,,,,,,,310.67,0.0,0.0,,1310.7,1.7,
|
|
84
|
+
c2-standard-8,,8,60,Xeon Gold 6253CL,32,240,,,,,,,,,,,,0.54,1.08,5.40,10.80,,,,,,,,,,310.67,0.0,0.0,,1310.7,3.4,
|
|
85
|
+
c2-standard-16,,16,60,Xeon Gold 6253CL,64,240,,,,,,,,,,,,1.08,2.16,10.80,21.60,,,,,,,,,,310.67,0.0,0.0,,1310.7,6.7,
|
|
86
|
+
c2-standard-30,,30,60,Xeon Gold 6253CL,120,240,,,,,,,,,,,,2.03,4.05,20.25,40.50,,,,,,,,,,310.67,0.0,0.0,,1310.7,12.6,
|
|
87
|
+
c2-standard-60,,60,60,Xeon Gold 6253CL,240,240,,,,,,,,,,,,4.05,8.10,40.50,81.00,,,,,,,,,,310.67,0.0,0.0,,1310.7,25.3,
|
|
88
|
+
n2-standard-2,,2,128,Xeon Gold 6268CL,8,864,,,,,,,,,,,,0.14,0.27,1.35,2.70,,,,,,,,,,1176.09,0.0,0.0,,2176.1,0.7,
|
|
89
|
+
n2-standard-4,,4,128,Xeon Gold 6268CL,16,864,,,,,,,,,,,,0.27,0.54,2.70,5.40,,,,,,,,,,1176.09,0.0,0.0,,2176.1,1.3,
|
|
90
|
+
n2-standard-8,,8,128,Xeon Gold 6268CL,32,864,,,,,,,,,,,,0.54,1.08,5.40,10.80,,,,,,,,,,1176.09,0.0,0.0,,2176.1,2.6,
|
|
91
|
+
n2-standard-16,,16,128,Xeon Gold 6268CL,64,864,,,,,,,,,,,,1.08,2.16,10.80,21.60,,,,,,,,,,1176.09,0.0,0.0,,2176.1,5.2,
|
|
92
|
+
n2-standard-32,,32,128,Xeon Gold 6268CL,128,864,,,,,,,,,,,,2.16,4.32,21.60,43.20,,,,,,,,,,1176.09,0.0,0.0,,2176.1,10.5,
|
|
93
|
+
n2-standard-48,,48,128,Xeon Gold 6268CL,192,864,,,,,,,,,,,,3.24,6.48,32.40,64.80,,,,,,,,,,1176.09,0.0,0.0,,2176.1,15.7,
|
|
94
|
+
n2-standard-64,,64,128,Xeon Gold 6268CL,256,864,,,,,,,,,,,,4.32,8.64,43.20,86.40,,,,,,,,,,1176.09,0.0,0.0,,2176.1,21.0,
|
|
95
|
+
n2-standard-80,,80,128,Xeon Gold 6268CL,320,864,,,,,,,,,,,,5.40,10.80,54.00,108.00,,,,,,,,,,1176.09,0.0,0.0,,2176.1,26.2,
|
|
96
|
+
n2-highmem-2,,2,128,Xeon Gold 6268CL,16,864,,,,,,,,,,,,0.27,0.54,2.70,5.40,,,,,,,,,,1176.09,0.0,0.0,,2176.1,0.7,
|
|
97
|
+
n2-highmem-4,,4,128,Xeon Gold 6268CL,32,864,,,,,,,,,,,,0.54,1.08,5.40,10.80,,,,,,,,,,1176.09,0.0,0.0,,2176.1,1.3,
|
|
98
|
+
n2-highmem-8,,8,128,Xeon Gold 6268CL,64,864,,,,,,,,,,,,1.08,2.16,10.80,21.60,,,,,,,,,,1176.09,0.0,0.0,,2176.1,2.6,
|
|
99
|
+
n2-highmem-16,,16,128,Xeon Gold 6268CL,128,864,,,,,,,,,,,,2.16,4.32,21.60,43.20,,,,,,,,,,1176.09,0.0,0.0,,2176.1,5.2,
|
|
100
|
+
n2-highmem-32,,32,128,Xeon Gold 6268CL,256,864,,,,,,,,,,,,4.32,8.64,43.20,86.40,,,,,,,,,,1176.09,0.0,0.0,,2176.1,10.5,
|
|
101
|
+
n2-highmem-48,,48,128,Xeon Gold 6268CL,384,864,,,,,,,,,,,,6.48,12.96,64.80,129.60,,,,,,,,,,1176.09,0.0,0.0,,2176.1,15.7,
|
|
102
|
+
n2-highmem-64,,64,128,Xeon Gold 6268CL,512,864,,,,,,,,,,,,8.64,17.28,86.40,172.80,,,,,,,,,,1176.09,0.0,0.0,,2176.1,21.0,
|
|
103
|
+
n2-highmem-80,,80,128,Xeon Gold 6268CL,640,864,,,,,,,,,,,,10.80,21.60,108.00,216.00,,,,,,,,,,1176.09,0.0,0.0,,2176.1,26.2,
|
|
104
|
+
n2-highcpu-2,,2,128,Xeon Gold 6268CL,2,864,,,,,,,,,,,,0.03,0.07,0.34,0.68,,,,,,,,,,1176.09,0.0,0.0,,2176.1,0.7,
|
|
105
|
+
n2-highcpu-4,,4,128,Xeon Gold 6268CL,4,864,,,,,,,,,,,,0.07,0.14,0.68,1.35,,,,,,,,,,1176.09,0.0,0.0,,2176.1,1.3,
|
|
106
|
+
n2-highcpu-8,,8,128,Xeon Gold 6268CL,8,864,,,,,,,,,,,,0.14,0.27,1.35,2.70,,,,,,,,,,1176.09,0.0,0.0,,2176.1,2.6,
|
|
107
|
+
n2-highcpu-16,,16,128,Xeon Gold 6268CL,16,864,,,,,,,,,,,,0.27,0.54,2.70,5.40,,,,,,,,,,1176.09,0.0,0.0,,2176.1,5.2,
|
|
108
|
+
n2-highcpu-32,,32,128,Xeon Gold 6268CL,32,864,,,,,,,,,,,,0.54,1.08,5.40,10.80,,,,,,,,,,1176.09,0.0,0.0,,2176.1,10.5,
|
|
109
|
+
n2-highcpu-48,,48,128,Xeon Gold 6268CL,48,864,,,,,,,,,,,,0.81,1.62,8.10,16.20,,,,,,,,,,1176.09,0.0,0.0,,2176.1,15.7,
|
|
110
|
+
n2-highcpu-64,,64,128,Xeon Gold 6268CL,64,864,,,,,,,,,,,,1.08,2.16,10.80,21.60,,,,,,,,,,1176.09,0.0,0.0,,2176.1,21.0,
|
|
111
|
+
n2-highcpu-80,,80,128,Xeon Gold 6268CL,80,864,,,,,,,,,,,,1.35,2.70,13.50,27.00,,,,,,,,,,1176.09,0.0,0.0,,2176.1,26.2,
|
|
112
|
+
m2-ultramem-208,,208,416,Xeon Platinum 8280L,5888,11776,,,,,,,,,,,,99.36,198.72,993.60,1987.20,,,,,,,,,,16309.94,0.0,0.0,,17309.9,167.0,
|
|
113
|
+
m2-ultramem-416,,416,416,Xeon Platinum 8280L,11776,11776,,,,,,,,,,,,198.72,397.44,1987.20,3974.40,,,,,,,,,,16309.94,0.0,0.0,,17309.9,333.9,
|
|
114
|
+
m2-megamem-416,,416,416,Xeon Platinum 8280L,5888,11776,,,,,,,,,,,,99.36,198.72,993.60,1987.20,,,,,,,,,,16309.94,0.0,0.0,,17309.9,333.9,
|
|
115
|
+
m2-hypermem-416,,416,416,Xeon Platinum 8280L,8832,11776,,,,,,,,,,,,149.04,298.08,1490.40,2980.80,,,,,,,,,,16309.94,0.0,0.0,,17309.9,333.9,
|
|
116
|
+
n2-standard-96,,96,128,Xeon Platinum 8373C,384,864,,,,,,,,,,,,6.48,12.96,64.80,129.60,,,,,,,,,,1176.09,0.0,0.0,,2176.1,31.5,
|
|
117
|
+
n2-standard-128,,128,128,Xeon Platinum 8373C,512,864,,,,,,,,,,,,8.64,17.28,86.40,172.80,,,,,,,,,,1176.09,0.0,0.0,,2176.1,42.0,
|
|
118
|
+
n2-highmem-96,,96,128,Xeon Platinum 8373C,768,864,,,,,,,,,,,,12.96,25.92,129.60,259.20,,,,,,,,,,1176.09,0.0,0.0,,2176.1,31.5,
|
|
119
|
+
n2-highmem-128,,128,128,Xeon Platinum 8373C,864,864,,,,,,,,,,,,14.58,29.16,145.80,291.60,,,,,,,,,,1176.09,0.0,0.0,,2176.1,42.0,
|
|
120
|
+
n2-highcpu-96,,96,128,Xeon Platinum 8373C,96,864,,,,,,,,,,,,1.62,3.24,16.20,32.40,,,,,,,,,,1176.09,0.0,0.0,,2176.1,31.5,
|
|
121
|
+
m3-ultramem-32,,32,128,Xeon Platinum 8373C ,976,3904,,,,,,,,,,,,16.47,32.94,164.70,329.40,,,,,,,,,,5392.27,0.0,0.0,,6392.3,30.8,
|
|
122
|
+
m3-ultramem-64,,64,128,Xeon Platinum 8373C ,1952,3904,,,,,,,,,,,,32.94,65.88,329.40,658.80,,,,,,,,,,5392.27,0.0,0.0,,6392.3,61.7,
|
|
123
|
+
m3-ultramem-128,,128,128,Xeon Platinum 8373C ,3904,3904,,,,,,,,,,,,65.88,131.76,658.80,1317.60,,,,,,,,,,5392.27,0.0,0.0,,6392.3,123.3,
|
|
124
|
+
m3-megamem-64,,64,128,Xeon Platinum 8373C ,976,3904,,,,,,,,,,,,16.47,32.94,164.70,329.40,,,,,,,,,,5392.27,0.0,0.0,,6392.3,61.7,
|
|
125
|
+
m3-megamem-128,,128,128,Xeon Platinum 8373C ,"1,952",3904,,,,,,,,,,,,32.94,65.88,329.40,658.80,,,,,,,,,,5392.27,0.0,0.0,,6392.3,123.3,
|
|
126
|
+
c3-standard-4,,4,176,Xeon Platinum 8481C,16,1408,,,,,,,,,,,,0.27,0.54,2.70,5.40,,,,,,,,,,1930.5648,0.0,0.0,,2930.6,1.3,
|
|
127
|
+
c3-standard-8,,8,176,Xeon Platinum 8481C,32,1408,,,,,,,,,,,,0.54,1.08,5.40,10.80,,,,,,,,,,1930.5648,0.0,0.0,,2930.6,2.6,
|
|
128
|
+
c3-standard-22,,22,176,Xeon Platinum 8481C,88,1408,,,,,,,,,,,,1.49,2.97,14.85,29.70,,,,,,,,,,1930.5648,0.0,0.0,,2930.6,7.1,
|
|
129
|
+
c3-standard-44,,44,176,Xeon Platinum 8481C,176,1408,,,,,,,,,,,,2.97,5.94,29.70,59.40,,,,,,,,,,1930.5648,0.0,0.0,,2930.6,14.1,
|
|
130
|
+
c3-standard-88,,88,176,Xeon Platinum 8481C,352,1408,,,,,,,,,,,,5.94,11.88,59.40,118.80,,,,,,,,,,1930.5648,0.0,0.0,,2930.6,28.3,
|
|
131
|
+
c3-standard-176,,176,176,Xeon Platinum 8481C,704,1408,,,,,,,,,,,,11.88,23.76,118.80,237.60,,,,,,,,,,1930.5648,0.0,0.0,,2930.6,56.5,
|
|
132
|
+
c3-highcpu-4,,4,176,Xeon Platinum 8481C,8,1408,,,,,,,,,,,,0.14,0.27,1.35,2.70,,,,,,,,,,1930.56,0.0,0.0,,2930.6,1.3,
|
|
133
|
+
c3-highcpu-8,,8,176,Xeon Platinum 8481C,16,1408,,,,,,,,,,,,0.27,0.54,2.70,5.40,,,,,,,,,,1930.56,0.0,0.0,,2930.6,2.6,
|
|
134
|
+
c3-highcpu-22,,22,176,Xeon Platinum 8481C,44,1408,,,,,,,,,,,,0.74,1.49,7.43,14.85,,,,,,,,,,1930.56,0.0,0.0,,2930.6,7.1,
|
|
135
|
+
c3-highcpu-44,,44,176,Xeon Platinum 8481C,88,1408,,,,,,,,,,,,1.49,2.97,14.85,29.70,,,,,,,,,,1930.56,0.0,0.0,,2930.6,14.1,
|
|
136
|
+
c3-highcpu-88,,88,176,Xeon Platinum 8481C,176,1408,,,,,,,,,,,,2.97,5.94,29.70,59.40,,,,,,,,,,1930.56,0.0,0.0,,2930.6,28.3,
|
|
137
|
+
c3-highcpu-176,,176,176,Xeon Platinum 8481C,352,1408,,,,,,,,,,,,5.94,11.88,59.40,118.80,,,,,,,,,,1930.56,0.0,0.0,,2930.6,56.5,
|
|
138
|
+
c3-highmem-4,,4,176,Xeon Platinum 8481C,32,1408,,,,,,,,,,,,0.54,1.08,5.40,10.80,,,,,,,,,,1930.56,0.0,0.0,,2930.6,1.3,
|
|
139
|
+
c3-highmem-8,,8,176,Xeon Platinum 8481C,64,1408,,,,,,,,,,,,1.08,2.16,10.80,21.60,,,,,,,,,,1930.56,0.0,0.0,,2930.6,2.6,
|
|
140
|
+
c3-highmem-22,,22,176,Xeon Platinum 8481C,176,1408,,,,,,,,,,,,2.97,5.94,29.70,59.40,,,,,,,,,,1930.56,0.0,0.0,,2930.6,7.1,
|
|
141
|
+
c3-highmem-44,,44,176,Xeon Platinum 8481C,352,1408,,,,,,,,,,,,5.94,11.88,59.40,118.80,,,,,,,,,,1930.56,0.0,0.0,,2930.6,14.1,
|
|
142
|
+
c3-highmem-88,,88,176,Xeon Platinum 8481C,704,1408,,,,,,,,,,,,11.88,23.76,118.80,237.60,,,,,,,,,,1930.56,0.0,0.0,,2930.6,28.3,
|
|
143
|
+
c3-highmem-176,,176,176,Xeon Platinum 8481C,1408,1408,,,,,,,,,,,,23.76,47.52,237.60,475.20,,,,,,,,,,1930.56,0.0,0.0,,2930.6,56.5,
|
|
144
|
+
h3-standard-88,,88,88,Xeon Platinum 8481C,352,352,,,,,,,,,,,,5.94,11.88,59.40,118.80,,,,,,,,,,466.00,0.0,0.0,,1466.0,28.3,
|
|
145
|
+
e2-standard-2,,2,32,Xeon Scalable Platinum 8173M / EPYC 7B13,8,128,,,,,,,,,,,,0.14,0.27,1.35,2.70,,,,,,,,,,155.33,0.0,0.0,,1155.3,1.4,
|
|
146
|
+
e2-standard-4,,4,32,Xeon Scalable Platinum 8173M / EPYC 7B13,16,128,,,,,,,,,,,,0.27,0.54,2.70,5.40,,,,,,,,,,155.33,0.0,0.0,,1155.3,2.8,
|
|
147
|
+
e2-standard-8,,8,32,Xeon Scalable Platinum 8173M / EPYC 7B13,32,128,,,,,,,,,,,,0.54,1.08,5.40,10.80,,,,,,,,,,155.33,0.0,0.0,,1155.3,5.6,
|
|
148
|
+
e2-standard-16,,16,32,Xeon Scalable Platinum 8173M / EPYC 7B13,64,128,,,,,,,,,,,,1.08,2.16,10.80,21.60,,,,,,,,,,155.33,0.0,0.0,,1155.3,11.1,
|
|
149
|
+
e2-standard-32,,32,32,Xeon Scalable Platinum 8173M / EPYC 7B13,128,128,,,,,,,,,,,,2.16,4.32,21.60,43.20,,,,,,,,,,155.33,0.0,0.0,,1155.3,22.3,
|
|
150
|
+
e2-highmem-2,,2,32,Xeon Scalable Platinum 8173M / EPYC 7B13,16,128,,,,,,,,,,,,0.27,0.54,2.70,5.40,,,,,,,,,,155.33,0.0,0.0,,1155.3,1.4,
|
|
151
|
+
e2-highmem-4,,4,32,Xeon Scalable Platinum 8173M / EPYC 7B13,32,128,,,,,,,,,,,,0.54,1.08,5.40,10.80,,,,,,,,,,155.33,0.0,0.0,,1155.3,2.8,
|
|
152
|
+
e2-highmem-8,,8,32,Xeon Scalable Platinum 8173M / EPYC 7B13,64,128,,,,,,,,,,,,1.08,2.16,10.80,21.60,,,,,,,,,,155.33,0.0,0.0,,1155.3,5.6,
|
|
153
|
+
e2-highmem-16,,16,32,Xeon Scalable Platinum 8173M / EPYC 7B13,128,128,,,,,,,,,,,,2.16,4.32,21.60,43.20,,,,,,,,,,155.33,0.0,0.0,,1155.3,11.1,
|
|
154
|
+
e2-highcpu-2,,2,32,Xeon Scalable Platinum 8173M / EPYC 7B13,2,128,,,,,,,,,,,,0.03,0.07,0.34,0.68,,,,,,,,,,155.33,0.0,0.0,,1155.3,1.4,
|
|
155
|
+
e2-highcpu-4,,4,32,Xeon Scalable Platinum 8173M / EPYC 7B13,4,128,,,,,,,,,,,,0.07,0.14,0.68,1.35,,,,,,,,,,155.33,0.0,0.0,,1155.3,2.8,
|
|
156
|
+
e2-highcpu-8,,8,32,Xeon Scalable Platinum 8173M / EPYC 7B13,8,128,,,,,,,,,,,,0.14,0.27,1.35,2.70,,,,,,,,,,155.33,0.0,0.0,,1155.3,5.6,
|
|
157
|
+
e2-highcpu-16,,16,32,Xeon Scalable Platinum 8173M / EPYC 7B13,16,128,,,,,,,,,,,,0.27,0.54,2.70,5.40,,,,,,,,,,155.33,0.0,0.0,,1155.3,11.1,
|
|
158
|
+
e2-micro,,0.25,32,Xeon Scalable Platinum 8173M / EPYC 7B13,1,128,,,,,,,,,,,,0.02,0.03,0.17,0.34,,,,,,,,,,155.33,0.0,0.0,,1155.3,0.2,
|
|
159
|
+
e2-small,,0.5,32,Xeon Scalable Platinum 8173M / EPYC 7B13,2,128,,,,,,,,,,,,0.03,0.07,0.34,0.68,,,,,,,,,,155.33,0.0,0.0,,1155.3,0.3,
|
|
160
|
+
e2-highcpu-32,,32,32,Xeon Scalable Platinum 8173M / EPYC 7B13,32,128,,,,,,,,,,,,0.54,1.08,5.40,10.80,,,,,,,,,,155.33,0.0,0.0,,1155.3,22.3,
|
|
161
|
+
e2-medium,,1,32,Xeon Scalable Platinum 8173M / EPYC 7B13,4,128,,,,,,,,,,,,0.07,0.14,0.68,1.35,,,,,,,,,,155.33,0.0,0.0,,1155.3,0.7,
|
|
162
|
+
n1-standard-1,,1,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,3.75,624,,,,,,,,,,,,0.06,0.13,0.63,1.27,,,,,,,,,,843.24,0.0,0.0,,1843.2,0.4,
|
|
163
|
+
n1-standard-2,,2,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,7.5,624,,,,,,,,,,,,0.13,0.25,1.27,2.53,,,,,,,,,,843.24,0.0,0.0,,1843.2,0.7,
|
|
164
|
+
n1-standard-4,,4,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,15,624,,,,,,,,,,,,0.25,0.51,2.53,5.06,,,,,,,,,,843.24,0.0,0.0,,1843.2,1.5,
|
|
165
|
+
n1-standard-8,,8,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,30,624,,,,,,,,,,,,0.51,1.01,5.06,10.13,,,,,,,,,,843.24,0.0,0.0,,1843.2,3.0,
|
|
166
|
+
n1-standard-16,,16,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,60,624,,,,,,,,,,,,1.01,2.03,10.13,20.25,,,,,,,,,,843.24,0.0,0.0,,1843.2,5.9,
|
|
167
|
+
n1-standard-32,,32,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,120,624,,,,,,,,,,,,2.03,4.05,20.25,40.50,,,,,,,,,,843.24,0.0,0.0,,1843.2,11.9,
|
|
168
|
+
n1-standard-64,,64,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,240,624,,,,,,,,,,,,4.05,8.10,40.50,81.00,,,,,,,,,,843.24,0.0,0.0,,1843.2,23.7,
|
|
169
|
+
n1-standard-96,,96,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,360,624,,,,,,,,,,,,6.08,12.15,60.75,121.50,,,,,,,,,,843.24,0.0,0.0,,1843.2,35.6,
|
|
170
|
+
n1-highmem-2,,2,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,13,624,,,,,,,,,,,,0.22,0.44,2.19,4.39,,,,,,,,,,843.24,0.0,0.0,,1843.2,0.7,
|
|
171
|
+
n1-highmem-4,,4,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,26,624,,,,,,,,,,,,0.44,0.88,4.39,8.78,,,,,,,,,,843.24,0.0,0.0,,1843.2,1.5,
|
|
172
|
+
n1-highmem-8,,8,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,52,624,,,,,,,,,,,,0.88,1.76,8.78,17.55,,,,,,,,,,843.24,0.0,0.0,,1843.2,3.0,
|
|
173
|
+
n1-highmem-16,,16,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,104,624,,,,,,,,,,,,1.76,3.51,17.55,35.10,,,,,,,,,,843.24,0.0,0.0,,1843.2,5.9,
|
|
174
|
+
n1-highmem-32,,32,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,208,624,,,,,,,,,,,,3.51,7.02,35.10,70.20,,,,,,,,,,843.24,0.0,0.0,,1843.2,11.9,
|
|
175
|
+
n1-highmem-64,,64,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,416,624,,,,,,,,,,,,7.02,14.04,70.20,140.40,,,,,,,,,,843.24,0.0,0.0,,1843.2,23.7,
|
|
176
|
+
n1-highmem-96,,96,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,624,624,,,,,,,,,,,,10.53,21.06,105.30,210.60,,,,,,,,,,843.24,0.0,0.0,,1843.2,35.6,
|
|
177
|
+
n1-highcpu-2,,2,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,1.8,624,,,,,,,,,,,,0.03,0.06,0.30,0.61,,,,,,,,,,843.24,0.0,0.0,,1843.2,0.7,
|
|
178
|
+
n1-highcpu-4,,4,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,3.6,624,,,,,,,,,,,,0.06,0.12,0.61,1.22,,,,,,,,,,843.24,0.0,0.0,,1843.2,1.5,
|
|
179
|
+
n1-highcpu-8,,8,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,7.2,624,,,,,,,,,,,,0.12,0.24,1.22,2.43,,,,,,,,,,843.24,0.0,0.0,,1843.2,3.0,
|
|
180
|
+
n1-highcpu-16,,16,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,14.4,624,,,,,,,,,,,,0.24,0.49,2.43,4.86,,,,,,,,,,843.24,0.0,0.0,,1843.2,5.9,
|
|
181
|
+
n1-highcpu-32,,32,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,28.8,624,,,,,,,,,,,,0.49,0.97,4.86,9.72,,,,,,,,,,843.24,0.0,0.0,,1843.2,11.9,
|
|
182
|
+
n1-highcpu-64,,64,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,57.6,624,,,,,,,,,,,,0.97,1.94,9.72,19.44,,,,,,,,,,843.24,0.0,0.0,,1843.2,23.7,
|
|
183
|
+
n1-highcpu-96,,96,96,Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,86.4,624,,,,,,,,,,,,1.46,2.92,14.58,29.16,,,,,,,,,,843.24,0.0,0.0,,1843.2,35.6,
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
CPU Name,Platform Total Number of vCPU,Platform Number of CPU Socket(s),Total Number of vCPU per socket,CPU TDP L1 (in Watts),Turbostress Data Available,PkgWatt Idle,PkgWatt CPUStress 10%,PkgWatt CPUStress 50%,PkgWatt Average 100%,RAMWatt per GB @ Idle,RAMWatt per GB @ Low Workload,RAMWatt per GB @ Medium Workload,RAMWatt per GB @ High Workload,Delta Ratio in Watts for full machine estimation,Comment,,Average Consumption per Watt TDP (AWS Platforms only),PkgWatt Idle,PkgWatt CPUStress 10%,PkgWatt CPUStress 50%,PkgWatt Average 100%,Arbitrary Ratio for full machine estimation (CPU TDP %),Total Number of Cores per socket
|
|
2
|
+
EPYC 7B13,,,,,,,,,,,,,,,,,,#REF!,#REF!,#REF!,#REF!,20%,10
|
|
3
|
+
EPYC 7B13 / EPYC 7B12,,,,,,,,,,,,,,,,,,,,,,,12
|
|
4
|
+
EPYC 9B14,,,,,,,,,,,,,,,,,,,,,,,18
|
|
5
|
+
Q64-30,,,,,,,,,,,,,,,,,,,,,,,8
|
|
6
|
+
Xeon E7-8880V4,,,,,,,,,,,,,,,,,,,,,,,8
|
|
7
|
+
Xeon Gold 6253CL,,,,,,,,,,,,,,,,,,,,,,,8
|
|
8
|
+
Xeon Gold 6268CL,,,,,,,,,,,,,,,,,,,,,,,12
|
|
9
|
+
Xeon Platinum 8280L,,,,,,,,,,,,,,,,,,,,,,,10
|
|
10
|
+
Xeon Platinum 8373C,,,,,,,,,,,,,,,,,,,,,,,10
|
|
11
|
+
Xeon Platinum 8373C ,,,,,,,,,,,,,,,,,,,,,,,16
|
|
12
|
+
Xeon Platinum 8481C,,,,,,,,,,,,,,,,,,,,,,,18
|
|
13
|
+
Xeon Scalable Platinum 8173M / EPYC 7B13,,,,,,,,,,,,,,,,,,,,,,,12
|
|
14
|
+
Xeon Scalable Platinum 8173M / Xeon E5-2696V4 / Xeon E5-2696V3 / Xeon E5-2696V2 / Xeon E5-2689,,,,,,,,,,,,,,,"For instances that can have multiple CPU options, we calulated the ",,,,,,,,24
|
|
15
|
+
,,,,,,,,,,,,,,,,,,,,,,,28
|
|
16
|
+
,,,,,,,,,,,,,,,,,,,,,,,12
|
|
17
|
+
,,,,,,,,,,,,,,,,,,,,,,,24
|
|
18
|
+
,,,,,,,,,,,,,,,,,,,,,,,24
|
|
19
|
+
,,,,,,,,,,,,,,,,,,,,,,,32
|
|
20
|
+
,,,,,,,,,,,,,,,,,,,,,,,
|
|
21
|
+
,,,,,,,,,,,,,,,,,,,,,,,24
|
|
22
|
+
,,,,,,,,,,,,,,,,,,,,,,,48
|
|
23
|
+
,,,,,,,,,,,,,,,,,,,,,,,
|
|
24
|
+
,,,,,,,,,,,,,,,,,,,,,,,
|
|
25
|
+
,,,,,,,,,,,,,,,,,,,,,,,16
|
|
26
|
+
,,,,,,,,,,,,,,,,,,,,,,,64
|
|
27
|
+
,,,,,,,,,,,,,,,,,,,,,,,64
|
|
28
|
+
,,,,,,,,,,,,,,,,,,,,,,,64
|
|
29
|
+
,,,,,,,,,,,,,,,,,,,,,,,6
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Product Name,Platform,Memory Quantity (in GB),RAMWatt Idle,RAMWatt 10% CPU load,RAMWatt Max,Watt/GB idle,Watt/GB low workload,Watt/GB medium workload,Watt/GB max workload,DIMM Specifications,#DIMM,Arbitrary Watt per GB,Watt/GB idle,Watt/GB low workload,Watt/GB medium workload,Watt/GB max workload
|
|
2
|
+
c5.metal,Xeon Platinum 8275CL,192,37,66,210,0.19,0.35,0.72,1.10,,,,0.2,0.3,0.4,0.6
|
|
3
|
+
,,,,,,,,,,,,,,,,
|
|
4
|
+
,,,,,,,,,,,,,,,,
|
|
5
|
+
,,,,,,,,,,,,,,,,
|
|
6
|
+
,,,,,,,,,,,,,,,,
|
|
7
|
+
,,,,,,,,,,,,,,,,
|
|
8
|
+
,,,,,,,,,,,,,,,,
|
|
9
|
+
,,Average 192 GB machines,,,,0.19,0.35,0.72,1.10,,,,,,,
|
|
10
|
+
2xIntelGold6230R,Xeon Gold 6230R,256,7,38,151,0.03,0.15,0.37,0.59,,,,,,,
|
|
11
|
+
,,,,,,,,,,,,,,,,
|
|
12
|
+
,,Average 256 GB machines,,,,0.03,0.15,0.37,0.59,,,,,,,
|
|
13
|
+
,,,,,,,,,,,,,,,,
|
|
14
|
+
,,,,,,,,,,,,,,,,
|
|
15
|
+
i3.metal,Xeon E5-2686 v4,512,11,18,57,0.02,0.03,0.07,0.11,,,,,,,
|
|
16
|
+
,,Average 512 GB machines,,,,0.02,0.03,0.07,0.11,,,,,,,
|
|
17
|
+
,Xeon E5-2660,96,N/A,N/A,0,#VALUE!,#VALUE!,#VALUE!,0.00,,,,,,,
|
|
18
|
+
,,,,,,,,,,,,,,,,
|
|
19
|
+
,,Average 96 GB machines,,,,#VALUE!,#VALUE!,#VALUE!,0.07,,,,,,,
|
|
20
|
+
r5.metal,Xeon Platinum 8259CL,768,119,198,510,0.16,0.26,0.46,0.66,,,,,,,
|
|
21
|
+
,,,,,,,,,,Samsung M393A4K40BB2-CTD,24,,,,,
|
|
22
|
+
,,768 GB machines,,,,0.16,0.26,0.46,0.66,,,,,,,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Ratio,Value,Comment
|
|
2
|
+
"Manufacturing emissions for a mono socket, low DRAM, no local storage commodity rack server (kgCO₂eq)",1000,Arbitrary number based on available LCA (Life Cycle Assessment) data
|
|
3
|
+
Commodity rack server lifespan (years),6,This is the lifespan value used in main server LCA found
|
|
4
|
+
Hourly manufacturing emissions conversion factor - linearly ammortised (convert to gCO₂eq/hour),0.0193,Computed value to be reused to convert overall manufacturing emissions in kgCO₂eq into hourly emissions in gCO₂eq
|
|
5
|
+
DRAM Threshold to unlock additional Scope 3 emissions (GB),16,Arbitrary number based on Dell product carbon footprint documents
|
|
6
|
+
Manufacturing emissions for the threshold DRAM amount (kgCO₂eq),22,Number based on available LCA data
|
|
7
|
+
Manufacturing emissions per additional CPU (kgCO₂eq),100,Number based on available LCA data
|
|
8
|
+
Manufacturing emissions per additionnal HDD (kgCO₂eq),50,Number based on available LCA data
|
|
9
|
+
Manufacturing emissions per additionnal SSD (kgCO₂eq),100,Number based on available LCA data
|
|
10
|
+
Manufacturing emissions per additionnal GPU Card (kgCO₂eq),150,"Arbitrary number, no precise LCA data found for GPU, estimation roughtly based on CPU and DRAM emissions"
|
package/dist/init.js
CHANGED
|
@@ -10,8 +10,11 @@ const path_1 = __importDefault(require("path"));
|
|
|
10
10
|
const axios_1 = __importDefault(require("axios"));
|
|
11
11
|
const prompts_1 = __importDefault(require("prompts"));
|
|
12
12
|
const kleur_1 = require("kleur");
|
|
13
|
+
const promise_1 = __importDefault(require("mysql2/promise"));
|
|
14
|
+
const pg_1 = require("pg");
|
|
13
15
|
const power_profile_repository_1 = require("./lib/carbon/power-profile-repository");
|
|
14
16
|
const output_integrations_1 = require("./lib/integrations/output-integrations");
|
|
17
|
+
const migration_runner_1 = require("./lib/integrations/migration-runner");
|
|
15
18
|
const hasGlab = () => {
|
|
16
19
|
try {
|
|
17
20
|
(0, child_process_1.execSync)('glab --version', { stdio: 'ignore' });
|
|
@@ -123,6 +126,103 @@ const promptIntegrationFields = async (integration) => {
|
|
|
123
126
|
}
|
|
124
127
|
return { variables: collected, values: valuesByField };
|
|
125
128
|
};
|
|
129
|
+
const runIntegrationMigrations = async (integration, values) => {
|
|
130
|
+
const table = values.table || values.TABLE || values.target_table;
|
|
131
|
+
const database = values.database;
|
|
132
|
+
const host = values.host;
|
|
133
|
+
const username = values.username;
|
|
134
|
+
const password = values.password;
|
|
135
|
+
if (!table || !database || !host || !username || !password)
|
|
136
|
+
return;
|
|
137
|
+
const scope = integration.target;
|
|
138
|
+
console.log((0, kleur_1.gray)(`\n${integration.name}: migrations will create/update tables in ${database}.${values.schema || 'public'}.`));
|
|
139
|
+
const { shouldMigrate } = await (0, prompts_1.default)({
|
|
140
|
+
type: 'confirm',
|
|
141
|
+
name: 'shouldMigrate',
|
|
142
|
+
message: `Run GitGreen migrations for ${integration.name}? This may create or alter tables.`,
|
|
143
|
+
initial: true
|
|
144
|
+
});
|
|
145
|
+
if (!shouldMigrate) {
|
|
146
|
+
console.log((0, kleur_1.gray)('Skipping migrations per user request. Ensure schema matches expected columns before running CI.'));
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const { shouldDrop } = await (0, prompts_1.default)({
|
|
150
|
+
type: 'confirm',
|
|
151
|
+
name: 'shouldDrop',
|
|
152
|
+
message: `Drop existing tables (${table}, ${table}_timeseries) before migration? Required if schema changed.`,
|
|
153
|
+
initial: false
|
|
154
|
+
});
|
|
155
|
+
if (shouldDrop) {
|
|
156
|
+
const schemaName = values.schema || 'public';
|
|
157
|
+
const timeseriesTable = `${table}_timeseries`;
|
|
158
|
+
if (integration.driver === 'postgres') {
|
|
159
|
+
const client = new pg_1.Client({
|
|
160
|
+
host,
|
|
161
|
+
port: Number(values.port || 5432),
|
|
162
|
+
user: username,
|
|
163
|
+
password,
|
|
164
|
+
database,
|
|
165
|
+
ssl: values.sslmode && values.sslmode !== 'disable' ? { rejectUnauthorized: values.sslmode === 'verify-full' } : undefined
|
|
166
|
+
});
|
|
167
|
+
await client.connect();
|
|
168
|
+
try {
|
|
169
|
+
await client.query(`DROP TABLE IF EXISTS "${schemaName}"."${timeseriesTable}" CASCADE`);
|
|
170
|
+
await client.query(`DROP TABLE IF EXISTS "${schemaName}"."${table}" CASCADE`);
|
|
171
|
+
await client.query(`DELETE FROM gitgreen_migrations WHERE scope = $1`, [scope]);
|
|
172
|
+
console.log((0, kleur_1.yellow)(`Dropped tables ${table} and ${timeseriesTable}`));
|
|
173
|
+
}
|
|
174
|
+
finally {
|
|
175
|
+
await client.end();
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
const connection = await promise_1.default.createConnection({
|
|
180
|
+
host,
|
|
181
|
+
port: Number(values.port || 3306),
|
|
182
|
+
user: username,
|
|
183
|
+
password,
|
|
184
|
+
database
|
|
185
|
+
});
|
|
186
|
+
try {
|
|
187
|
+
await connection.query(`DROP TABLE IF EXISTS \`${timeseriesTable}\``);
|
|
188
|
+
await connection.query(`DROP TABLE IF EXISTS \`${table}\``);
|
|
189
|
+
await connection.query(`DELETE FROM gitgreen_migrations WHERE scope = ?`, [scope]);
|
|
190
|
+
console.log((0, kleur_1.yellow)(`Dropped tables ${table} and ${timeseriesTable}`));
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
await connection.end();
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (integration.driver === 'postgres') {
|
|
198
|
+
await (0, migration_runner_1.runMigrations)({
|
|
199
|
+
driver: 'postgres',
|
|
200
|
+
host,
|
|
201
|
+
port: Number(values.port || 5432),
|
|
202
|
+
username,
|
|
203
|
+
password,
|
|
204
|
+
database,
|
|
205
|
+
schema: values.schema || 'public',
|
|
206
|
+
sslMode: values.sslmode,
|
|
207
|
+
table,
|
|
208
|
+
timeseriesTable: scope === 'job' ? `${table}_timeseries` : undefined,
|
|
209
|
+
scope
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
await (0, migration_runner_1.runMigrations)({
|
|
214
|
+
driver: 'mysql',
|
|
215
|
+
host,
|
|
216
|
+
port: Number(values.port || 3306),
|
|
217
|
+
username,
|
|
218
|
+
password,
|
|
219
|
+
database,
|
|
220
|
+
table,
|
|
221
|
+
timeseriesTable: scope === 'job' ? `${table}_timeseries` : undefined,
|
|
222
|
+
scope
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
};
|
|
126
226
|
const selectIntegrationForTarget = async (target) => {
|
|
127
227
|
const available = output_integrations_1.outputIntegrations.filter(integration => integration.target === target);
|
|
128
228
|
if (!available.length)
|
|
@@ -161,6 +261,13 @@ const selectIntegrationForTarget = async (target) => {
|
|
|
161
261
|
process.exit(1);
|
|
162
262
|
}
|
|
163
263
|
}
|
|
264
|
+
try {
|
|
265
|
+
await runIntegrationMigrations(integration, values);
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
console.log((0, kleur_1.red)(`Failed to run migrations for ${integration.name}: ${err?.message || err}`));
|
|
269
|
+
process.exit(1);
|
|
270
|
+
}
|
|
164
271
|
return variables;
|
|
165
272
|
};
|
|
166
273
|
const promptOutputIntegrations = async (stepNumber) => {
|
|
@@ -12,6 +12,7 @@ class PowerProfileRepository {
|
|
|
12
12
|
this.gcpMachines = null;
|
|
13
13
|
this.awsMachines = null;
|
|
14
14
|
this.cpuProfiles = null;
|
|
15
|
+
this.cpuPhysicalSpecs = null;
|
|
15
16
|
}
|
|
16
17
|
loadJsonFile(filename) {
|
|
17
18
|
const filePath = path_1.default.join(this.dataDir, filename);
|
|
@@ -36,6 +37,28 @@ class PowerProfileRepository {
|
|
|
36
37
|
}
|
|
37
38
|
return this.cpuProfiles;
|
|
38
39
|
}
|
|
40
|
+
loadCpuPhysicalSpecs() {
|
|
41
|
+
if (!this.cpuPhysicalSpecs) {
|
|
42
|
+
this.cpuPhysicalSpecs = this.loadJsonFile('cpu_physical_specs.json');
|
|
43
|
+
}
|
|
44
|
+
return this.cpuPhysicalSpecs;
|
|
45
|
+
}
|
|
46
|
+
findPhysicalSpec(cpuName) {
|
|
47
|
+
const specs = this.loadCpuPhysicalSpecs();
|
|
48
|
+
// Try exact match first
|
|
49
|
+
if (specs[cpuName] && typeof specs[cpuName] === 'object' && 'threads' in specs[cpuName]) {
|
|
50
|
+
return specs[cpuName];
|
|
51
|
+
}
|
|
52
|
+
// Try partial match
|
|
53
|
+
for (const [key, spec] of Object.entries(specs)) {
|
|
54
|
+
if (key === '_metadata')
|
|
55
|
+
continue;
|
|
56
|
+
if (cpuName.includes(key) || key.includes(cpuName)) {
|
|
57
|
+
return spec;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
39
62
|
normalizeNumber(value) {
|
|
40
63
|
if (typeof value === 'number')
|
|
41
64
|
return value;
|
|
@@ -70,17 +93,40 @@ class PowerProfileRepository {
|
|
|
70
93
|
const profile = await this.getMachineProfile(provider, machineType);
|
|
71
94
|
if (!profile)
|
|
72
95
|
return null;
|
|
96
|
+
// Get base power profile from CPU
|
|
97
|
+
let basePowerProfile = null;
|
|
98
|
+
let cpuName;
|
|
73
99
|
if (profile.cpuPowerProfile && profile.cpuPowerProfile.length > 0) {
|
|
74
|
-
|
|
100
|
+
basePowerProfile = profile.cpuPowerProfile;
|
|
101
|
+
cpuName = profile.matchedCpuProfile || profile.platformCpu;
|
|
75
102
|
}
|
|
76
|
-
if (profile.matchedCpuProfile) {
|
|
103
|
+
else if (profile.matchedCpuProfile) {
|
|
77
104
|
const cpuProfiles = this.loadCpuProfiles();
|
|
78
105
|
const rawCpu = cpuProfiles[profile.matchedCpuProfile];
|
|
79
106
|
if (rawCpu) {
|
|
80
|
-
|
|
107
|
+
basePowerProfile = this.normalizePowerPoints(rawCpu.power_profile);
|
|
108
|
+
cpuName = profile.matchedCpuProfile;
|
|
81
109
|
}
|
|
82
110
|
}
|
|
83
|
-
|
|
111
|
+
if (!basePowerProfile)
|
|
112
|
+
return null;
|
|
113
|
+
// Apply physical vCPU correction for accurate power estimation
|
|
114
|
+
// Formula: power_per_vm = (TDP / physical_threads) * vm_vcpus * ratio
|
|
115
|
+
// The base profile has watts scaled by vm_vcpus, we need to correct by dividing
|
|
116
|
+
// by vm_vcpus and multiplying by (vm_vcpus / physical_threads)
|
|
117
|
+
const physicalSpec = cpuName ? this.findPhysicalSpec(cpuName) : null;
|
|
118
|
+
if (physicalSpec && physicalSpec.threads > 0 && profile.vcpus > 0) {
|
|
119
|
+
// The gcp_machine_power_profiles.json has: watts = TDP * ratio * vm_vcpus (inflated)
|
|
120
|
+
// Correct formula: watts = TDP * ratio * (vm_vcpus / physical_threads)
|
|
121
|
+
// Correction factor = correct / inflated = 1 / physical_threads
|
|
122
|
+
const correctionFactor = 1 / physicalSpec.threads;
|
|
123
|
+
return basePowerProfile.map(p => ({
|
|
124
|
+
percentage: p.percentage,
|
|
125
|
+
watts: p.watts * correctionFactor
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
// Fallback: return profile as-is (may be overestimated for GCP)
|
|
129
|
+
return basePowerProfile;
|
|
84
130
|
}
|
|
85
131
|
listMachines(provider) {
|
|
86
132
|
const machines = this.loadMachineData(provider);
|
|
@@ -13,21 +13,6 @@ const escapeMysqlIdentifier = (value) => {
|
|
|
13
13
|
const escapePgIdentifier = (value) => {
|
|
14
14
|
return '"' + value.replace(/"/g, '""') + '"';
|
|
15
15
|
};
|
|
16
|
-
const getTableDefinition = (_target) => {
|
|
17
|
-
return `(
|
|
18
|
-
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
|
|
19
|
-
ingested_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
20
|
-
payload JSON NOT NULL,
|
|
21
|
-
PRIMARY KEY (id)
|
|
22
|
-
) ENGINE=InnoDB`;
|
|
23
|
-
};
|
|
24
|
-
const getPgTableDefinition = (_target) => {
|
|
25
|
-
return `(
|
|
26
|
-
id BIGSERIAL PRIMARY KEY,
|
|
27
|
-
ingested_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
28
|
-
payload JSONB NOT NULL
|
|
29
|
-
)`;
|
|
30
|
-
};
|
|
31
16
|
const normalizeHost = (input) => {
|
|
32
17
|
if (!input)
|
|
33
18
|
return input;
|
|
@@ -60,20 +45,6 @@ const ensureMysqlResources = async (params) => {
|
|
|
60
45
|
finally {
|
|
61
46
|
await serverConnection.end();
|
|
62
47
|
}
|
|
63
|
-
const dbConnection = await promise_1.default.createConnection({
|
|
64
|
-
host,
|
|
65
|
-
port: params.port,
|
|
66
|
-
user: params.username,
|
|
67
|
-
password: params.password,
|
|
68
|
-
database: params.database
|
|
69
|
-
});
|
|
70
|
-
try {
|
|
71
|
-
const tableDefinition = getTableDefinition(params.target);
|
|
72
|
-
await dbConnection.query(`CREATE TABLE IF NOT EXISTS ${escapeMysqlIdentifier(params.table)} ${tableDefinition}`);
|
|
73
|
-
}
|
|
74
|
-
finally {
|
|
75
|
-
await dbConnection.end();
|
|
76
|
-
}
|
|
77
48
|
console.log((0, kleur_1.green)(`MySQL ready: ${params.database}.${params.table}`));
|
|
78
49
|
};
|
|
79
50
|
exports.ensureMysqlResources = ensureMysqlResources;
|
|
@@ -110,9 +81,6 @@ const ensurePostgresResources = async (params) => {
|
|
|
110
81
|
await dbClient.connect();
|
|
111
82
|
try {
|
|
112
83
|
await dbClient.query(`CREATE SCHEMA IF NOT EXISTS ${escapePgIdentifier(schemaName)}`);
|
|
113
|
-
const fullTable = `${escapePgIdentifier(schemaName)}.${escapePgIdentifier(params.table)}`;
|
|
114
|
-
const tableDefinition = getPgTableDefinition(params.target);
|
|
115
|
-
await dbClient.query(`CREATE TABLE IF NOT EXISTS ${fullTable} ${tableDefinition}`);
|
|
116
84
|
}
|
|
117
85
|
finally {
|
|
118
86
|
await dbClient.end();
|
|
@@ -9,6 +9,7 @@ const buildMysqlIntegration = (target) => {
|
|
|
9
9
|
return {
|
|
10
10
|
id: `mysql-${scope}`,
|
|
11
11
|
name: `MySQL (${scope === 'job' ? 'per-job emissions' : 'runner inventory'})`,
|
|
12
|
+
driver: 'mysql',
|
|
12
13
|
description: target === 'job'
|
|
13
14
|
? 'Store each CI job calculation (emissions, runtime, runner tags) inside a MySQL table.'
|
|
14
15
|
: 'Store runner metadata (machine type, scope 3 estimates, tags) alongside usage metrics.',
|
|
@@ -78,6 +79,7 @@ const buildPostgresIntegration = (target) => {
|
|
|
78
79
|
return {
|
|
79
80
|
id: `postgres-${scope}`,
|
|
80
81
|
name: `PostgreSQL (${scope === 'job' ? 'per-job emissions' : 'runner inventory'})`,
|
|
82
|
+
driver: 'postgres',
|
|
81
83
|
description: target === 'job'
|
|
82
84
|
? 'Insert each CI job calculation into a PostgreSQL table for downstream analytics.'
|
|
83
85
|
: 'Persist runner metadata in PostgreSQL so you can track each machine in your fleet.',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gitgreen",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "GitGreen CLI for carbon reporting in GitLab pipelines (GCP/AWS)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"dist",
|
|
32
32
|
"data",
|
|
33
33
|
"migrations",
|
|
34
|
+
"scripts",
|
|
34
35
|
"README.md"
|
|
35
36
|
],
|
|
36
37
|
"dependencies": {
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Build complete GCP machine power profiles by correlating data across multiple CSV files.
|
|
4
|
+
The power data is spread across different files and needs to be combined.
|
|
5
|
+
"""
|
|
6
|
+
import pandas as pd
|
|
7
|
+
import json
|
|
8
|
+
import numpy as np
|
|
9
|
+
|
|
10
|
+
def find_actual_power_data():
|
|
11
|
+
"""
|
|
12
|
+
Search through all CSV files to find where the actual power consumption data is
|
|
13
|
+
"""
|
|
14
|
+
print("=== SEARCHING FOR ACTUAL POWER DATA ===")
|
|
15
|
+
|
|
16
|
+
# 1. Check Machine Ratios file
|
|
17
|
+
print("\n--- Machine Ratios File ---")
|
|
18
|
+
ratios_df = pd.read_csv("data/GCP Machine types - Machine Ratios.csv")
|
|
19
|
+
|
|
20
|
+
# Look for non-NaN power data
|
|
21
|
+
power_cols = ['CPU Name', 'PkgWatt Idle', 'PkgWatt CPUStress 10%', 'PkgWatt CPUStress 50%', 'PkgWatt Average 100%']
|
|
22
|
+
power_data = ratios_df[power_cols].dropna()
|
|
23
|
+
|
|
24
|
+
print(f"Rows with power data: {len(power_data)}")
|
|
25
|
+
if len(power_data) > 0:
|
|
26
|
+
print("Sample power data from Machine Ratios:")
|
|
27
|
+
print(power_data.head())
|
|
28
|
+
|
|
29
|
+
# 2. Check CPU Profiles file
|
|
30
|
+
print("\n--- CPU Profiles File ---")
|
|
31
|
+
cpu_df = pd.read_csv("data/GCP Machine types - CPU Profiles.csv")
|
|
32
|
+
|
|
33
|
+
# Look for ratio data that can be used to calculate power
|
|
34
|
+
ratio_cols = ['Processor SKU', 'TDP (W)', 'IDLE ratio', '10% ratio', '50% Ratio']
|
|
35
|
+
cpu_power = cpu_df[ratio_cols].dropna()
|
|
36
|
+
|
|
37
|
+
print(f"Rows with CPU ratio data: {len(cpu_power)}")
|
|
38
|
+
if len(cpu_power) > 0:
|
|
39
|
+
print("Sample CPU ratio data:")
|
|
40
|
+
print(cpu_power.head())
|
|
41
|
+
|
|
42
|
+
# 3. Check Bare Metal Profiles (this had actual power data in the first analysis)
|
|
43
|
+
print("\n--- Bare Metal Power Profiles ---")
|
|
44
|
+
bare_metal_df = pd.read_csv("data/GCP Machine types - Bare Metal Power Profiles.csv")
|
|
45
|
+
|
|
46
|
+
# Find rows with actual power measurements
|
|
47
|
+
bare_metal_power_cols = ['Product Name', 'PkgWatt Idle', 'PkgWatt CPUStress 10%', 'PkgWatt CPUStress 50%', 'PkgWatt CPUStress 100%']
|
|
48
|
+
bare_metal_power = bare_metal_df[bare_metal_power_cols].dropna()
|
|
49
|
+
|
|
50
|
+
print(f"Rows with bare metal power data: {len(bare_metal_power)}")
|
|
51
|
+
if len(bare_metal_power) > 0:
|
|
52
|
+
print("Sample bare metal power data:")
|
|
53
|
+
print(bare_metal_power.head())
|
|
54
|
+
|
|
55
|
+
return power_data, cpu_power, bare_metal_power
|
|
56
|
+
|
|
57
|
+
def correlate_cpu_to_machines():
|
|
58
|
+
"""
|
|
59
|
+
Try to correlate CPU types to GCP machine instances
|
|
60
|
+
"""
|
|
61
|
+
print("\n=== CORRELATING CPU TYPES TO GCP MACHINES ===")
|
|
62
|
+
|
|
63
|
+
# Load instances file
|
|
64
|
+
instances_df = pd.read_csv("data/GCP Machine types - Instances.csv")
|
|
65
|
+
|
|
66
|
+
# Look at CPU information in instances
|
|
67
|
+
cpu_info_cols = ['Instance type', 'Platform CPU Name', 'Instance vCPU', 'Instance Memory (in GB)']
|
|
68
|
+
cpu_info = instances_df[cpu_info_cols].dropna(subset=['Platform CPU Name'])
|
|
69
|
+
|
|
70
|
+
print(f"Machines with CPU information: {len(cpu_info)}")
|
|
71
|
+
if len(cpu_info) > 0:
|
|
72
|
+
print("Sample CPU information:")
|
|
73
|
+
print(cpu_info.head(10))
|
|
74
|
+
|
|
75
|
+
# Get unique CPU types used in GCP
|
|
76
|
+
unique_cpus = cpu_info['Platform CPU Name'].unique()
|
|
77
|
+
print(f"\nUnique CPU types in GCP: {len(unique_cpus)}")
|
|
78
|
+
for cpu in unique_cpus[:10]: # Show first 10
|
|
79
|
+
print(f" - {cpu}")
|
|
80
|
+
|
|
81
|
+
return cpu_info
|
|
82
|
+
|
|
83
|
+
def build_power_profiles_from_ratios():
|
|
84
|
+
"""
|
|
85
|
+
Build power profiles using CPU ratios and TDP values
|
|
86
|
+
"""
|
|
87
|
+
print("\n=== BUILDING POWER PROFILES FROM CPU RATIOS ===")
|
|
88
|
+
|
|
89
|
+
# Load CPU profiles with ratios
|
|
90
|
+
cpu_df = pd.read_csv("data/GCP Machine types - CPU Profiles.csv")
|
|
91
|
+
|
|
92
|
+
# Clean and process the data
|
|
93
|
+
ratio_data = cpu_df[['Processor SKU', 'TDP (W)', 'IDLE ratio', '10% ratio', '50% Ratio']].dropna()
|
|
94
|
+
|
|
95
|
+
if len(ratio_data) > 0:
|
|
96
|
+
print(f"CPUs with ratio data: {len(ratio_data)}")
|
|
97
|
+
|
|
98
|
+
# Calculate actual power consumption from ratios
|
|
99
|
+
power_profiles = {}
|
|
100
|
+
|
|
101
|
+
for _, row in ratio_data.iterrows():
|
|
102
|
+
cpu_name = row['Processor SKU']
|
|
103
|
+
tdp_watts = row['TDP (W)']
|
|
104
|
+
idle_ratio = row['IDLE ratio']
|
|
105
|
+
ratio_10 = row['10% ratio']
|
|
106
|
+
ratio_50 = row['50% Ratio']
|
|
107
|
+
|
|
108
|
+
# Calculate power at different utilization levels
|
|
109
|
+
# Using TDP and ratios to estimate power consumption
|
|
110
|
+
power_profiles[cpu_name] = {
|
|
111
|
+
'tdp_watts': tdp_watts,
|
|
112
|
+
'power_profile': [
|
|
113
|
+
{'percentage': 0, 'watts': tdp_watts * idle_ratio},
|
|
114
|
+
{'percentage': 10, 'watts': tdp_watts * ratio_10},
|
|
115
|
+
{'percentage': 50, 'watts': tdp_watts * ratio_50},
|
|
116
|
+
{'percentage': 100, 'watts': tdp_watts} # Assume 100% = TDP
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
print("\nSample calculated power profiles:")
|
|
121
|
+
for i, (cpu_name, profile) in enumerate(power_profiles.items()):
|
|
122
|
+
if i < 3: # Show first 3
|
|
123
|
+
print(f"\n{cpu_name}:")
|
|
124
|
+
print(f" TDP: {profile['tdp_watts']}W")
|
|
125
|
+
for point in profile['power_profile']:
|
|
126
|
+
print(f" {point['percentage']}%: {point['watts']:.1f}W")
|
|
127
|
+
|
|
128
|
+
# Save CPU power profiles
|
|
129
|
+
with open('cpu_power_profiles.json', 'w') as f:
|
|
130
|
+
json.dump(power_profiles, f, indent=2)
|
|
131
|
+
|
|
132
|
+
print(f"\n✅ Saved {len(power_profiles)} CPU power profiles to cpu_power_profiles.json")
|
|
133
|
+
|
|
134
|
+
return power_profiles
|
|
135
|
+
else:
|
|
136
|
+
print("❌ No usable ratio data found")
|
|
137
|
+
return {}
|
|
138
|
+
|
|
139
|
+
def map_gcp_machines_to_power():
|
|
140
|
+
"""
|
|
141
|
+
Map GCP machine types to their CPU power profiles
|
|
142
|
+
"""
|
|
143
|
+
print("\n=== MAPPING GCP MACHINES TO POWER PROFILES ===")
|
|
144
|
+
|
|
145
|
+
# Load instances and find CPU mappings
|
|
146
|
+
instances_df = pd.read_csv("data/GCP Machine types - Instances.csv")
|
|
147
|
+
cpu_info = instances_df[['Instance type', 'Platform CPU Name', 'Instance vCPU', 'Instance Memory (in GB)']].dropna(subset=['Platform CPU Name'])
|
|
148
|
+
|
|
149
|
+
# Load CPU power profiles
|
|
150
|
+
try:
|
|
151
|
+
with open('cpu_power_profiles.json', 'r') as f:
|
|
152
|
+
cpu_power_profiles = json.load(f)
|
|
153
|
+
except:
|
|
154
|
+
print("❌ CPU power profiles not found. Run build_power_profiles_from_ratios() first.")
|
|
155
|
+
return {}
|
|
156
|
+
|
|
157
|
+
# Map GCP machines to their power profiles
|
|
158
|
+
gcp_machine_profiles = {}
|
|
159
|
+
|
|
160
|
+
for _, row in cpu_info.iterrows():
|
|
161
|
+
machine_type = row['Instance type']
|
|
162
|
+
cpu_name = row['Platform CPU Name']
|
|
163
|
+
vcpus = row['Instance vCPU']
|
|
164
|
+
memory_gb = row['Instance Memory (in GB)']
|
|
165
|
+
|
|
166
|
+
# Find matching CPU power profile (exact match or partial match)
|
|
167
|
+
matching_cpu = None
|
|
168
|
+
for cpu_profile_name in cpu_power_profiles.keys():
|
|
169
|
+
if cpu_name in cpu_profile_name or cpu_profile_name in cpu_name:
|
|
170
|
+
matching_cpu = cpu_profile_name
|
|
171
|
+
break
|
|
172
|
+
|
|
173
|
+
if matching_cpu:
|
|
174
|
+
# Scale power consumption based on vCPUs (since profiles are per-CPU)
|
|
175
|
+
base_profile = cpu_power_profiles[matching_cpu]
|
|
176
|
+
|
|
177
|
+
gcp_machine_profiles[machine_type] = {
|
|
178
|
+
'vcpus': vcpus,
|
|
179
|
+
'memory_gb': memory_gb,
|
|
180
|
+
'platform_cpu': cpu_name,
|
|
181
|
+
'matched_cpu_profile': matching_cpu,
|
|
182
|
+
'cpu_power_profile': [
|
|
183
|
+
{
|
|
184
|
+
'percentage': point['percentage'],
|
|
185
|
+
'watts': point['watts'] * (vcpus / base_profile.get('vcpus', 1)) # Scale by vCPU count
|
|
186
|
+
}
|
|
187
|
+
for point in base_profile['power_profile']
|
|
188
|
+
]
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
if gcp_machine_profiles:
|
|
192
|
+
print(f"✅ Mapped {len(gcp_machine_profiles)} GCP machines to power profiles")
|
|
193
|
+
|
|
194
|
+
# Show sample mappings
|
|
195
|
+
print("\nSample GCP machine power profiles:")
|
|
196
|
+
for i, (machine, profile) in enumerate(gcp_machine_profiles.items()):
|
|
197
|
+
if i < 3:
|
|
198
|
+
print(f"\n{machine} ({profile['vcpus']} vCPUs, {profile['memory_gb']}GB):")
|
|
199
|
+
print(f" CPU: {profile['platform_cpu']}")
|
|
200
|
+
print(f" Matched profile: {profile['matched_cpu_profile']}")
|
|
201
|
+
for point in profile['cpu_power_profile']:
|
|
202
|
+
print(f" {point['percentage']}%: {point['watts']:.1f}W")
|
|
203
|
+
|
|
204
|
+
# Save complete GCP machine power profiles
|
|
205
|
+
with open('gcp_machine_power_profiles.json', 'w') as f:
|
|
206
|
+
json.dump(gcp_machine_profiles, f, indent=2)
|
|
207
|
+
|
|
208
|
+
print(f"\n✅ Saved complete GCP machine power profiles to gcp_machine_power_profiles.json")
|
|
209
|
+
|
|
210
|
+
return gcp_machine_profiles
|
|
211
|
+
else:
|
|
212
|
+
print("❌ Could not map any GCP machines to power profiles")
|
|
213
|
+
return {}
|
|
214
|
+
|
|
215
|
+
def final_recommendations():
|
|
216
|
+
"""
|
|
217
|
+
Provide final implementation recommendations based on available data
|
|
218
|
+
"""
|
|
219
|
+
print("\n" + "="*60)
|
|
220
|
+
print("FINAL IMPLEMENTATION RECOMMENDATIONS")
|
|
221
|
+
print("="*60)
|
|
222
|
+
|
|
223
|
+
try:
|
|
224
|
+
with open('gcp_machine_power_profiles.json', 'r') as f:
|
|
225
|
+
profiles = json.load(f)
|
|
226
|
+
|
|
227
|
+
print("✅ SUCCESS: Ready for re:cinq implementation!")
|
|
228
|
+
print(f" - {len(profiles)} GCP machine types with power profiles")
|
|
229
|
+
print(" - Power consumption curves: 0%, 10%, 50%, 100% CPU utilization")
|
|
230
|
+
print(" - Data ready for cubic spline interpolation")
|
|
231
|
+
|
|
232
|
+
print("\n📋 IMPLEMENTATION STEPS:")
|
|
233
|
+
print("1. Load gcp_machine_power_profiles.json in CarbonService")
|
|
234
|
+
print("2. Extract machine type from GitLab runner tags")
|
|
235
|
+
print("3. Use cubic-spline package for power interpolation")
|
|
236
|
+
print("4. Get real-time carbon intensity from Electricity Maps API")
|
|
237
|
+
print("5. Apply Google data center PUE values")
|
|
238
|
+
print("6. Calculate: interpolated_power(kW) × runtime(h) × PUE × carbon_intensity")
|
|
239
|
+
|
|
240
|
+
print(f"\n🔧 SAMPLE CALCULATION CODE:")
|
|
241
|
+
sample_machine = list(profiles.keys())[0]
|
|
242
|
+
sample_profile = profiles[sample_machine]
|
|
243
|
+
print(f"// Example for {sample_machine}")
|
|
244
|
+
print("const powerProfile = [")
|
|
245
|
+
for point in sample_profile['cpu_power_profile']:
|
|
246
|
+
print(f" {{ percentage: {point['percentage']}, watts: {point['watts']:.1f} }},")
|
|
247
|
+
print("];")
|
|
248
|
+
print("const powerWatts = cubicSplineInterpolation(powerProfile, cpuUtilization);")
|
|
249
|
+
|
|
250
|
+
except FileNotFoundError:
|
|
251
|
+
print("❌ No machine power profiles generated")
|
|
252
|
+
print(" Run the correlation functions first")
|
|
253
|
+
|
|
254
|
+
if __name__ == "__main__":
|
|
255
|
+
# Step 1: Find where actual power data exists
|
|
256
|
+
machine_ratios_power, cpu_ratios, bare_metal_power = find_actual_power_data()
|
|
257
|
+
|
|
258
|
+
# Step 2: Correlate CPU information
|
|
259
|
+
cpu_info = correlate_cpu_to_machines()
|
|
260
|
+
|
|
261
|
+
# Step 3: Build power profiles from available data
|
|
262
|
+
cpu_profiles = build_power_profiles_from_ratios()
|
|
263
|
+
|
|
264
|
+
# Step 4: Map GCP machines to power profiles
|
|
265
|
+
gcp_profiles = map_gcp_machines_to_power()
|
|
266
|
+
|
|
267
|
+
# Step 5: Final recommendations
|
|
268
|
+
final_recommendations()
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
+
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
6
|
+
CLI="$ROOT_DIR/dist/cli.js"
|
|
7
|
+
|
|
8
|
+
if [[ ! -f "$CLI" ]]; then
|
|
9
|
+
echo "Build output not found at $CLI. Run 'pnpm build' first." >&2
|
|
10
|
+
exit 1
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
if [[ -z "${ELECTRICITY_MAPS_API_KEY:-}" ]]; then
|
|
14
|
+
echo "ELECTRICITY_MAPS_API_KEY is required for live runs" >&2
|
|
15
|
+
exit 1
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
configs=(
|
|
19
|
+
"gcp e2-standard-4 us-central1-a 30 60"
|
|
20
|
+
"gcp n2-standard-8 us-west1-a 45 75"
|
|
21
|
+
"aws m5.large us-east-1 60 50"
|
|
22
|
+
"aws c5.xlarge eu-west-1 90 80"
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
for cfg in "${configs[@]}"; do
|
|
26
|
+
set -- $cfg
|
|
27
|
+
provider=$1 machine=$2 region=$3 duration=$4 cpu=$5
|
|
28
|
+
echo "=== $provider $machine $region dur=${duration}s cpu=${cpu}% ==="
|
|
29
|
+
node "$CLI" \
|
|
30
|
+
--provider "$provider" \
|
|
31
|
+
--machine "$machine" \
|
|
32
|
+
--region "$region" \
|
|
33
|
+
--duration "$duration" \
|
|
34
|
+
--cpu "$cpu" \
|
|
35
|
+
--out-md "out-${provider}-${machine}.md" \
|
|
36
|
+
--out-json "out-${provider}-${machine}.json" \
|
|
37
|
+
|| echo "FAILED: $provider $machine $region"
|
|
38
|
+
done
|