Files

277 righe
9.5 KiB
Markdown

# ROCProfiler-Compute Configuration Management
This directory contains the authoritative configuration-management system for ROCProfiler-Compute analysis configurations.
It is designed to guarantee:
- **Structural correctness** across GPU architectures
- **Deterministic deltas** relative to a single latest architecture
- **Byte-level immutability** enforced via hashes
- **Safe promotion** of a new latest architecture with rollback
- **CI enforcement** of all invariants
All workflows are orchestrated by a single sequential driver script:
```bash
tools/config_management/master_config_workflow_script.py
```
## Repository Layout
```bash
rocprofiler-compute/
├── src/rocprof_compute_soc/
│ └── analysis_configs/
│ ├── gfx908/
│ │ ├── 0000_top_stats.yaml
│ │ └── config_delta/
│ │ └── <latest_arch>_diff.yaml
│ ├── gfx90a/
│ ├── gfx940/
│ ├── gfx950/ # latest_arch
│ └── gfx9_config_template.yaml # single source of truth
├── src/util/
│ ├── hash_checker.py
│ ├── .config_hashes.json
└── tools/config_management/
├── master_config_workflow_script.py
├── parse_config_template.py
├── verify_against_config_template.py
├── generate_config_deltas.py
├── apply_config_deltas.py
├── hash_manager.py
├── TESTING.md
└── README.md
```
## Core Concepts
### Latest Architecture
- Exactly one architecture is considered *latest*
- Defined in:
```bash
src/rocprof_compute_soc/analysis_configs/gfx9_config_template.yaml
```
### Panel YAMLs
- Live under:
```bash
analysis_configs/<arch>/*.yaml
```
- Must conform strictly to the template schema
- Are edited in-place using ruamel.yaml round-trip mode
### Delta YAMLs
- Represent differences from latest → older architecture
- Live under:
```bash
analysis_configs/<older_arch>/config_delta/
```
- Exactly one delta file per arch
- Always named:
```bash
<latest_arch>_diff.yaml
```
### Hash Database
- Stored at:
```bash
src/utils/.config_hashes.json
```
- Records:
- md5 hashes of panel YAMLs per arch
- md5 hash of the delta YAML (or null for latest)
- Machine-generated only
- Enforced in CI and pytest
## Architecture Diagram (End-to-End Flow)
```pqsql
┌──────────────────────────┐
│ analysis_configs/ │
│ gfx9_config_template │
└───────────┬──────────────┘
┌───────────────────────────────┐
│ verify_against_config_template│
│ (structural validation) │
└───────────┬───────────────────┘
┌───────────────────┴───────────────────┐
│ │
▼ ▼
┌────────────────────┐ ┌──────────────────────┐
│ edit-existing mode │ │ promotion mode │
│ (local dev only) │ │ (authoritative path) │
└─────────┬──────────┘ └──────────┬───────────┘
│ │
▼ ▼
┌────────────────────┐ ┌─────────────────────────────┐
│ generate / apply │ │ parse_config_template.py │
│ deltas manually │ │ (update latest_arch) │
└────────────────────┘ └──────────┬──────────────────┘
┌──────────────────────────────────┐
│ generate_config_deltas.py │
│ latest → all older arches │
│ (<latest>_diff.yaml only) │
└──────────┬───────────────────────┘
┌──────────────────────────────────┐
│ verify_against_config_template │
│ (post-promotion validation) │
└──────────┬───────────────────────┘
┌──────────────────────────────────┐
│ hash_manager.py --compute-all │
│ (new steady state) │
└──────────┬───────────────────────┘
┌──────────────────────────────────┐
│ hash_checker.py │
│ (semantic consistency) │
└──────────────────────────────────┘
```
## Contributor Quick Start
> [!NOTE]
> **Required Python Dependency**
> This configuration management system requires the `ruamel.yaml` Python package.
> It is used to safely modify YAML files while preserving comments, ordering,
> and formatting. The workflow scripts will not function correctly without it.
>
> Install it via:
> ```bash
> pip install ruamel.yaml
> ```
### 1. Validate the current state
Before making **any** config changes:
```bash
python tools/config_management/master_config_workflow_script.py --validate-only
```
This must pass.
### 2. Editing an existing architecture (most common)
Edit panel YAMLs **directly** under:
```bash
src/rocprof_compute_soc/analysis_configs/<arch>/
```
Rules:
- Preserve structure
- Preserve ordering
- Use multiline `>-` formatting for metric descriptions
- Do **not** regenerate entire files
After editing:
```bash
python tools/config_management/master_config_workflow_script.py --validate-only
```
### 3. Generating or applying deltas (advanced / optional)
For local experimentation only:
```bash
python tools/config_management/master_config_workflow_script.py --edit-existing
```
This mode:
- never updates the template
- never updates hashes
- always re-validates after application
### 4. Promoting a new latest architecture (rare, gated)
Promotion changes **global invariants** and must use the master script:
```bash
python tools/config_management/master_config_workflow_script.py --promote <latest_arch>
```
The script will:
1. Update `latest_arch` in the template
2. Regenerate deltas for all older arches
3. Remove stale delta files
4. Re-validate everything
5. Rebuild the hash database
6. Verify semantic consistency
If anything fails:
- all changes are rolled back
- no partial state remains
### 5. Hash checks (fast local / CI)
```bash
python tools/config_management/master_config_workflow_script.py --hash-only
```
or:
```bash
python tools/config_management/master_config_workflow_script.py --ci
```
This runs semantic hash validation only.
## Automated Testing
### Pytest Hash Integrity Test
Located at:
```bash
tests/test_autogen_config.py
```
This test:
- parses `.config_hashes.json`
- verifies **byte-for-byte** integrity of:
- panel YAMLs
- delta YAMLs
- fails on:
- missing files
- changed content
- stale hash DB
Semantic correctness is enforced separately by `hash_checker.py`.
## Contributor Rules (Strict)
- Do **not** edit `.config_hashes.json` manually
- Do **not** create multiple delta files per arch
- Do **not** rename delta files arbitrarily
- Do **not** regenerate full YAMLs unnecessarily
- Use in-place edits (ruamel round-trip)
- Use the master script for promotions
- Expect CI to reject inconsistent states
## Summary
This system guarantees:
- A **single source of truth** for latest architecture
- Deterministic, reviewable deltas
- Stable diffs for Git review
- Hash-backed immutability
- Safe, transactional promotions
- CI-enforced correctness
All correctness flows through:
```bash
master_config_workflow_script.py
```