diff --git a/dashboard/grafana/dashboards/dashboards/dashboards.yml b/dashboard/grafana/dashboards/dashboards/dashboards.yml new file mode 100644 index 0000000..7435f09 --- /dev/null +++ b/dashboard/grafana/dashboards/dashboards/dashboards.yml @@ -0,0 +1,12 @@ +apiVersion: 1 + +providers: + - name: 'default' + orgId: 1 + folder: '' + type: file + disableDeletion: false + updateIntervalSeconds: 10 + allowUiUpdates: true + options: + path: /var/lib/grafana/dashboards diff --git a/dashboard/grafana/provisioning/datasources/prometheus.yml b/dashboard/grafana/provisioning/datasources/prometheus.yml new file mode 100644 index 0000000..1a57b69 --- /dev/null +++ b/dashboard/grafana/provisioning/datasources/prometheus.yml @@ -0,0 +1,9 @@ +apiVersion: 1 + +datasources: + - name: Prometheus + type: prometheus + access: proxy + url: http://prometheus:9090 + isDefault: true + editable: true diff --git a/experiments/k-node.sh b/experiments/k-node.sh new file mode 100755 index 0000000..af499e3 --- /dev/null +++ b/experiments/k-node.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +# +# k-nodes runs a Codex network with k nodes in which a file is uploaded to +# node zero and then the remainder k - 1 nodes download it concurrently. +# +# Outputs download times to a log file. +# +# Usage: k-node.sh +# +# Example: k-node.sh 5 10 ./k-node-5-10.csv 100 200 500 +set -e -o pipefail + +SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + +source "${SCRIPT_DIR}/../src/clh" + +node_count="${1:-2}" +repetitions="${2:-1}" +output_log="${3:-"${OUTPUTS}/k-node-$(date +%s)-${RANDOM}.csv"}" +shift 3 +file_sizes=("$@") + +exp_start "k-node" + +# TODO: procmon management should be moved into +# experiment lifecycle management. +trap pm_stop EXIT INT TERM +pm_start + +cdx_launch_network "${node_count}" + +for i in $(seq 1 "${repetitions}"); do + for file_size in "${file_sizes[@]}"; do + file_name=$(cdx_generate_file "${file_size}") + cid=$(cdx_upload_file "0" "${file_name}") + + cdx_log_timings_start "${output_log}" "${file_size},${i},${cid}" + + handles=() + for j in $(seq 1 "${node_count}"); do + cdx_download_file_async "$j" "$cid" + # shellcheck disable=SC2128 + handles+=("$result") + done + + await_all "${handles[@]}" + + cdx_log_timings_end + done +done diff --git a/src/codex.bash b/src/codex.bash index f97b17a..572ea5e 100644 --- a/src/codex.bash +++ b/src/codex.bash @@ -144,7 +144,7 @@ cdx_launch_node() { cmd_array=() IFS=' ' read -r -a cmd_array <<<"$codex_cmd" - pm_async "${cmd_array[@]}" -%- "codex" "${node_index}" + pm_async "bash" "-c" "exec ${cmd_array[*]} &> /dev/null" -%- "codex" "${node_index}" _cdx_pids[$node_index]=$! cdx_ensure_ready "$node_index" diff --git a/src/procmon.bash b/src/procmon.bash index 37e0e04..941d38b 100644 --- a/src/procmon.bash +++ b/src/procmon.bash @@ -43,7 +43,7 @@ pm_start() { export _pm_output ( _pm_pid=${BASHPID} - echoerr "[procmon] started with PID $_pm_pid" + echoerr "[procmon] enter monitoring loop" while true; do pm_known_pids for pid in "${result[@]}"; do