Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions asap-tools/experiments/CONFIG_PARAMETERS_REFERENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,20 +30,20 @@ These parameters must be provided for all experiment scripts:
- **Validation**: Cannot be `???` or empty
- **Used by**: All experiment scripts

#### `cloudlab.num_nodes` (int, required)
#### `providers.cloudlab.num_nodes` (int, required)
- **Description**: Number of CloudLab nodes to allocate for the experiment
- **Range**: 1-50 (recommended)
- **Example**: `4`
- **Validation**: Must be positive integer
- **Used by**: All experiment scripts

#### `cloudlab.username` (string, required)
#### `providers.cloudlab.username` (string, required)
- **Description**: Your CloudLab username for SSH access
- **Example**: `"myuser"`
- **Validation**: Must be valid CloudLab username
- **Used by**: All experiment scripts

#### `cloudlab.hostname_suffix` (string, required)
#### `providers.cloudlab.hostname_suffix` (string, required)
- **Description**: CloudLab experiment hostname suffix
- **Example**: `"myexp.cloudlab.us"`
- **Validation**: Must be valid hostname format
Expand Down Expand Up @@ -612,7 +612,7 @@ These parameters come from the `experiment_type` config group and are prefixed w
```python
# Recommended validation rules
VALIDATION_RULES = {
"cloudlab.num_nodes": {"type": int, "min": 1, "max": 50},
"providers.cloudlab.num_nodes": {"type": int, "min": 1, "max": 50},
"prometheus.scrape_interval": {"type": str, "pattern": r"^\d+[smh]$"},
"experiment_params.exporters.exporter_list.fake_exporter.start_port": {
"type": int, "min": 1024, "max": 65535
Expand Down Expand Up @@ -685,9 +685,9 @@ VALIDATION_RULES = {
python experiment_run_e2e.py \
experiment.name=my_test \
experiment_type=cloud_demo \
cloudlab.num_nodes=4 \
cloudlab.username=myuser \
cloudlab.hostname_suffix=myexp.cloudlab.us \
providers.cloudlab.num_nodes=4 \
providers.cloudlab.username=myuser \
providers.cloudlab.hostname_suffix=myexp.cloudlab.us \
prometheus.local_config_dir=/path/to/prometheus/config
```

Expand Down Expand Up @@ -719,7 +719,7 @@ python experiment_run_e2e.py \
```bash
python experiment_run_e2e.py \
experiment_type=cloud_demo \
cloudlab.num_nodes=2 \
providers.cloudlab.num_nodes=2 \
logging.level=DEBUG \
flow.steady_state_wait=60 \
streaming.do_local_flink=true \
Expand All @@ -742,7 +742,7 @@ for nodes in 4 8 16; do
python experiment_run_e2e.py \
experiment.name=nodes_${nodes} \
experiment_type=cloud_demo \
cloudlab.num_nodes=${nodes} \
providers.cloudlab.num_nodes=${nodes} \
[required params...]
done
```
Expand Down
72 changes: 36 additions & 36 deletions asap-tools/experiments/HYDRA_CONFIG_USAGE.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ This guide explains how to use the Hydra framework integration for experiment sc
python experiment_run_e2e.py \
experiment.name=my_test \
experiment_type=cloud_demo \
cloudlab.num_nodes=4 \
cloudlab.username=myuser \
cloudlab.hostname_suffix=myexp.cloudlab.us \
providers.cloudlab.num_nodes=4 \
providers.cloudlab.username=myuser \
providers.cloudlab.hostname_suffix=myexp.cloudlab.us \
prometheus.local_config_dir=/path/to/prometheus/config
```

Expand All @@ -20,9 +20,9 @@ python experiment_run_e2e.py \
### Required Infrastructure Parameters
All experiment scripts require these core parameters:
- `experiment.name`: Human-readable experiment name
- `cloudlab.num_nodes`: Number of CloudLab nodes
- `cloudlab.username`: Your CloudLab username
- `cloudlab.hostname_suffix`: CloudLab experiment hostname suffix
- `providers.cloudlab.num_nodes`: Number of CloudLab nodes
- `providers.cloudlab.username`: Your CloudLab username
- `providers.cloudlab.hostname_suffix`: CloudLab experiment hostname suffix

### Script-Specific Required Parameters
- **experiment_run_clickhouse.py**: `experiment_type=clickhouse`, `experiment_params.dataset.name`, `experiment_params.dataset.local_data_file`, `experiment_params.query_groups[0].sql_file`
Expand Down Expand Up @@ -107,9 +107,9 @@ python experiment_run_e2e.py \
python experiment_run_e2e.py \
experiment.name=dev_test \
experiment_type=cloud_demo \
cloudlab.num_nodes=2 \
cloudlab.username=myuser \
cloudlab.hostname_suffix=dev.cloudlab.us \
providers.cloudlab.num_nodes=2 \
providers.cloudlab.username=myuser \
providers.cloudlab.hostname_suffix=dev.cloudlab.us \
prometheus.local_config_dir=/path/to/prometheus/config \
logging.level=DEBUG \
flow.steady_state_wait=60
Expand All @@ -121,7 +121,7 @@ python experiment_run_e2e.py \
python experiment_run_e2e.py \
experiment.name=arroyo_perf \
experiment_type=my_exp_config \
cloudlab.num_nodes=8 \
providers.cloudlab.num_nodes=8 \
streaming.engine=arroyo \
streaming.enable_object_reuse=true \
profiling.arroyo=true \
Expand All @@ -136,9 +136,9 @@ python experiment_run_e2e.py experiment.name=delay_60 experiment_type=cloud_demo
python experiment_run_e2e.py experiment.name=delay_120 experiment_type=cloud_demo experiment_params.query_groups.0.repetition_delay=120 [required params...]

# Test different node counts
python experiment_run_e2e.py experiment.name=nodes_4 experiment_type=cloud_demo cloudlab.num_nodes=4 [required params...]
python experiment_run_e2e.py experiment.name=nodes_8 experiment_type=cloud_demo cloudlab.num_nodes=8 [required params...]
python experiment_run_e2e.py experiment.name=nodes_16 experiment_type=cloud_demo cloudlab.num_nodes=16 [required params...]
python experiment_run_e2e.py experiment.name=nodes_4 experiment_type=cloud_demo providers.cloudlab.num_nodes=4 [required params...]
python experiment_run_e2e.py experiment.name=nodes_8 experiment_type=cloud_demo providers.cloudlab.num_nodes=8 [required params...]
python experiment_run_e2e.py experiment.name=nodes_16 experiment_type=cloud_demo providers.cloudlab.num_nodes=16 [required params...]

# Test different streaming engines
python experiment_run_e2e.py experiment.name=flink_test experiment_type=cloud_demo streaming.engine=flink [required params...]
Expand All @@ -165,9 +165,9 @@ cat > config/experiment_type/clickhouse.yaml << 'EOF'
# python experiment_run_clickhouse.py \
# experiment_type=clickhouse \
# experiment.name=my_test \
# cloudlab.num_nodes=1 \
# cloudlab.username=myuser \
# cloudlab.hostname_suffix=myexp.cloudlab.us \
# providers.cloudlab.num_nodes=1 \
# providers.cloudlab.username=myuser \
# providers.cloudlab.hostname_suffix=myexp.cloudlab.us \
# experiment_params.dataset.name=clickbench \
# experiment_params.dataset.local_data_file=/path/to/hits.json \
# 'experiment_params.query_groups[0].sql_file=/path/to/queries.sql'
Expand Down Expand Up @@ -203,9 +203,9 @@ EOF
python experiment_run_clickhouse.py \
experiment_type=clickhouse \
experiment.name=my_clickbench_run \
cloudlab.num_nodes=1 \
cloudlab.username=myuser \
cloudlab.hostname_suffix=myexp.cloudlab.us \
providers.cloudlab.num_nodes=1 \
providers.cloudlab.username=myuser \
providers.cloudlab.hostname_suffix=myexp.cloudlab.us \
experiment_params.dataset.name=clickbench \
experiment_params.dataset.local_data_file=/path/to/hits.json \
'experiment_params.query_groups[0].sql_file=/path/to/queries.sql'
Expand All @@ -231,9 +231,9 @@ experiment_params.dataset.max_rows=10000
python experiment_run_e2e.py \
experiment.name=full_test \
experiment_type=cloud_demo \
cloudlab.num_nodes=4 \
cloudlab.username=myuser \
cloudlab.hostname_suffix=myexp.cloudlab.us \
providers.cloudlab.num_nodes=4 \
providers.cloudlab.username=myuser \
providers.cloudlab.hostname_suffix=myexp.cloudlab.us \
prometheus.local_config_dir=/path/to/prometheus/config
```

Expand All @@ -242,9 +242,9 @@ python experiment_run_e2e.py \
# Only exporters and Prometheus - no streaming
python experiment_run_exporters_and_prometheus.py \
experiment.name=monitoring_test \
cloudlab.num_nodes=4 \
cloudlab.username=myuser \
cloudlab.hostname_suffix=myexp.cloudlab.us
providers.cloudlab.num_nodes=4 \
providers.cloudlab.username=myuser \
providers.cloudlab.hostname_suffix=myexp.cloudlab.us
```

### experiment_run_empty_flink.py (Simplified Streaming)
Expand All @@ -253,9 +253,9 @@ python experiment_run_exporters_and_prometheus.py \
python experiment_run_empty_flink.py \
experiment.name=empty_flink_test \
experiment.config_file=/path/to/config.yml \
cloudlab.num_nodes=4 \
cloudlab.username=myuser \
cloudlab.hostname_suffix=myexp.cloudlab.us
providers.cloudlab.num_nodes=4 \
providers.cloudlab.username=myuser \
providers.cloudlab.hostname_suffix=myexp.cloudlab.us
```

### experiment_run_e2e_no_queryengine.py (E2E without Query Engine)
Expand All @@ -264,9 +264,9 @@ python experiment_run_empty_flink.py \
python experiment_run_e2e_no_queryengine.py \
experiment.name=e2e_no_qe \
experiment.config_file=/path/to/config.yml \
cloudlab.num_nodes=4 \
cloudlab.username=myuser \
cloudlab.hostname_suffix=myexp.cloudlab.us \
providers.cloudlab.num_nodes=4 \
providers.cloudlab.username=myuser \
providers.cloudlab.hostname_suffix=myexp.cloudlab.us \
prometheus.local_config_dir=/path/to/prometheus/config
```

Expand All @@ -284,8 +284,8 @@ python experiment_run_sketchdboffline.py \
# Flink performance testing with aggregation scaling
python experiment_run_flink_with_different_num_aggregations.py \
experiment.name=flink_perf \
cloudlab.username=myuser \
cloudlab.hostname_suffix=myexp.cloudlab.us \
providers.cloudlab.username=myuser \
providers.cloudlab.hostname_suffix=myexp.cloudlab.us \
experiment_variants.flink_aggregations.config=/path/to/config.yaml \
experiment_variants.flink_aggregations.aggregation_id=0 \
experiment_variants.flink_aggregations.min_aggregations=1 \
Expand Down Expand Up @@ -334,9 +334,9 @@ python experiment_run_e2e.py \
python experiment_run_e2e.py \
experiment.name=test \
experiment_type=cloud_demo \
cloudlab.num_nodes=4 \
cloudlab.username=user \
cloudlab.hostname_suffix=exp.cloudlab.us \
providers.cloudlab.num_nodes=4 \
providers.cloudlab.username=user \
providers.cloudlab.hostname_suffix=exp.cloudlab.us \
prometheus.local_config_dir=/path/to/config
```

Expand Down
19 changes: 12 additions & 7 deletions asap-tools/experiments/config/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,17 @@
experiment:
name: ??? # REQUIRED: Human-readable experiment name

# CloudLab configuration
cloudlab:
num_nodes: ??? # REQUIRED: Number of CloudLab nodes to use
node_offset: 0 # Starting node index (default 0, allows running multiple experiments in parallel)
username: ??? # REQUIRED: Your CloudLab username
hostname_suffix: ??? # REQUIRED: CloudLab experiment hostname suffix
# Infrastructure provider configuration — activate exactly one provider:
# CloudLab (default): fill in the cloudlab fields below via CLI overrides.
# Local machine: uncomment the local section below (leave cloudlab as-is).
providers:
cloudlab:
num_nodes: ??? # REQUIRED for CloudLab: Number of CloudLab nodes to use
node_offset: 0 # Starting node index (default 0, allows running multiple experiments in parallel)
username: ??? # REQUIRED for CloudLab: Your CloudLab username
hostname_suffix: ??? # REQUIRED for CloudLab: CloudLab experiment hostname suffix
# local: # Uncomment this section to run on the local machine instead
# home_dir: ??? # REQUIRED: absolute path to home directory on this machine

# Logging and debugging
logging:
Expand Down Expand Up @@ -57,7 +62,7 @@ streaming:
use_kafka_ingest: false # Use Prometheus remote write by default, set to true for legacy Kafka ingest
# Prometheus remote write configuration
remote_write:
ip: "${remote_write_ip:${cloudlab.node_offset}}"
ip: null # set at runtime via provider.get_node_ip(node_offset)
base_port: 8080
path: "/api/v1/write"
enable_optimized_source: true # Use optimized Prometheus remote_write source (10-20x faster)
Expand Down
6 changes: 1 addition & 5 deletions asap-tools/experiments/experiment_only_ingest_path.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,6 @@
"local_experiment_dir", lambda: constants.LOCAL_EXPERIMENT_DIR
)

# Register custom resolver for remote write IP based on node_offset
OmegaConf.register_new_resolver(
"remote_write_ip", lambda node_offset: f"10.10.1.{node_offset + 1}"
)

KAFKA_NUM_TRIES = 5
CONTROLLER_LOCAL_OUTPUT_DIR = None
CONTROLLER_REMOTE_OUTPUT_DIR = None
Expand Down Expand Up @@ -83,6 +78,7 @@ def main(cfg: DictConfig):

# Create infrastructure provider
provider = create_provider(cfg)
args.remote_write_ip = provider.get_node_ip(args.node_offset)

local_experiment_root_dir = os.path.join(
constants.LOCAL_EXPERIMENT_DIR, args.experiment_name
Expand Down
15 changes: 6 additions & 9 deletions asap-tools/experiments/experiment_run_clickhouse.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,19 +69,19 @@
python experiment_run_clickhouse.py \\
experiment_type=clickhouse \\
experiment.name=my_bench \\
cloudlab.num_nodes=1 \\
cloudlab.username=myuser \\
cloudlab.hostname_suffix=myexp.cloudlab.us \\
providers.cloudlab.num_nodes=1 \\
providers.cloudlab.username=myuser \\
providers.cloudlab.hostname_suffix=myexp.cloudlab.us \\
experiment_params.dataset.local_data_file=/path/to/hits.json \\
'experiment_params.query_groups[0].sql_file=/path/to/clickbench.sql'

Baseline + sketchdb:
python experiment_run_clickhouse.py \\
experiment_type=clickhouse \\
experiment.name=my_bench \\
cloudlab.num_nodes=1 \\
cloudlab.username=myuser \\
cloudlab.hostname_suffix=myexp.cloudlab.us \\
providers.cloudlab.num_nodes=1 \\
providers.cloudlab.username=myuser \\
providers.cloudlab.hostname_suffix=myexp.cloudlab.us \\
experiment_params.dataset.local_data_file=/path/to/hits.json \\
'experiment_params.query_groups[0].sql_file=/path/to/clickbench.sql'

Expand Down Expand Up @@ -148,9 +148,6 @@ def _expand_groups(groups):
OmegaConf.register_new_resolver(
"local_experiment_dir", lambda: constants.LOCAL_EXPERIMENT_DIR
)
OmegaConf.register_new_resolver(
"remote_write_ip", lambda node_offset: f"10.10.1.{node_offset + 1}"
)


def _run_query_client(
Expand Down
13 changes: 1 addition & 12 deletions asap-tools/experiments/experiment_run_e2e.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,6 @@
"local_experiment_dir", lambda: constants.LOCAL_EXPERIMENT_DIR
)

# Register custom resolver for remote write IP based on node_offset
OmegaConf.register_new_resolver(
"remote_write_ip", lambda node_offset: f"10.10.1.{node_offset + 1}"
)


@hydra.main(version_base=None, config_path="config", config_name="config")
def main(cfg: DictConfig):
Expand All @@ -63,15 +58,9 @@ def main(cfg: DictConfig):
# Create infrastructure provider
provider = create_provider(cfg)

# Route the remote-write IP through the provider (127.0.0.1 for local mode,
# CloudLab's 10.10.1.x scheme otherwise) before anything resolves
# cfg.streaming.remote_write.ip (Args does, below).
OmegaConf.register_new_resolver(
"remote_write_ip", provider.get_node_ip, replace=True
)

# Convert config to args-like object for backward compatibility
args = config.Args(cfg)
args.remote_write_ip = provider.get_node_ip(args.node_offset)

if provider.is_remote():
local_experiment_root_dir = os.path.join(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,6 @@
"local_experiment_dir", lambda: constants.LOCAL_EXPERIMENT_DIR
)

# Register custom resolver for remote write IP based on node_offset
OmegaConf.register_new_resolver(
"remote_write_ip", lambda node_offset: f"10.10.1.{node_offset + 1}"
)


@hydra.main(version_base=None, config_path="config", config_name="config")
def main(cfg: DictConfig):
Expand Down
6 changes: 1 addition & 5 deletions asap-tools/experiments/experiment_run_grafana_demo.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,6 @@
"local_experiment_dir", lambda: constants.LOCAL_EXPERIMENT_DIR
)

# Register custom resolver for remote write IP based on node_offset
OmegaConf.register_new_resolver(
"remote_write_ip", lambda node_offset: f"10.10.1.{node_offset + 1}"
)


@hydra.main(version_base=None, config_path="config", config_name="config")
def main(cfg: DictConfig):
Expand All @@ -60,6 +55,7 @@ def main(cfg: DictConfig):

# Create infrastructure provider
provider = create_provider(cfg)
args.remote_write_ip = provider.get_node_ip(args.node_offset)

args.forward_unsupported_queries = True
print("Forcing forward_unsupported_queries to True for Grafana demo")
Expand Down
5 changes: 0 additions & 5 deletions asap-tools/experiments/experiment_run_sketchdboffline.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,6 @@
"local_experiment_dir", lambda: constants.LOCAL_EXPERIMENT_DIR
)

# Register custom resolver for remote write IP based on node_offset
OmegaConf.register_new_resolver(
"remote_write_ip", lambda node_offset: f"10.10.1.{node_offset + 1}"
)


def run_sketchdboffline(args, output_dir) -> subprocess.Popen:
cmd = (
Expand Down
Loading
Loading