From 49cdec3666111c9a9ea9f3fd693bc3bee09a666f Mon Sep 17 00:00:00 2001 From: Containerman17 <8990432+containerman17@users.noreply.github.com> Date: Thu, 28 Nov 2024 04:24:48 +0000 Subject: [PATCH 01/11] hardcode params for now --- cli/spam.go | 65 +++++++++++++++++++++++++++++------------------------ 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/cli/spam.go b/cli/spam.go index c50262ca42..7434b38c2d 100644 --- a/cli/spam.go +++ b/cli/spam.go @@ -9,7 +9,6 @@ import ( "github.com/ava-labs/hypersdk/auth" "github.com/ava-labs/hypersdk/cli/prompt" "github.com/ava-labs/hypersdk/codec" - "github.com/ava-labs/hypersdk/consts" "github.com/ava-labs/hypersdk/crypto/ed25519" "github.com/ava-labs/hypersdk/throughput" ) @@ -73,38 +72,46 @@ func (h *Handler) BuildSpammer(sh throughput.SpamHelper, spamKey string, default return throughput.NewSpammer(sc, sh) } // Collect parameters - numAccounts, err := prompt.Int("number of accounts", consts.MaxInt) - if err != nil { - return nil, err - } + numAccounts := 100 + // numAccounts, err := prompt.Int("number of accounts", consts.MaxInt) + // if err != nil { + // return nil, err + // } if numAccounts < 2 { return nil, ErrInsufficientAccounts } - sZipf, err := prompt.Float("s (Zipf distribution = [(v+k)^(-s)], Default = 1.01)", consts.MaxFloat64) - if err != nil { - return nil, err - } - vZipf, err := prompt.Float("v (Zipf distribution = [(v+k)^(-s)], Default = 2.7)", consts.MaxFloat64) - if err != nil { - return nil, err - } - txsPerSecond, err := prompt.Int("txs to try and issue per second", consts.MaxInt) - if err != nil { - return nil, err - } - minTxsPerSecond, err := prompt.Int("minimum txs to issue per second", consts.MaxInt) - if err != nil { - return nil, err - } - txsPerSecondStep, err := prompt.Int("txs to increase per second", consts.MaxInt) - if err != nil { - return nil, err - } - numClients, err := prompt.Int("number of clients per node", consts.MaxInt) - if err != nil { - return nil, err - } + sZipf := 1.01 + // sZipf, err := prompt.Float("s (Zipf distribution = [(v+k)^(-s)], Default = 1.01)", consts.MaxFloat64) + // if err != nil { + // return nil, err + // } + vZipf := 2.7 + // vZipf, err := prompt.Float("v (Zipf distribution = [(v+k)^(-s)], Default = 2.7)", consts.MaxFloat64) + // if err != nil { + // return nil, err + // } + + txsPerSecond := 1000 + // txsPerSecond, err := prompt.Int("txs to try and issue per second", consts.MaxInt) + // if err != nil { + // return nil, err + // } + minTxsPerSecond := 100 + // minTxsPerSecond, err := prompt.Int("minimum txs to issue per second", consts.MaxInt) + // if err != nil { + // return nil, err + // } + txsPerSecondStep := 100 + // txsPerSecondStep, err := prompt.Int("txs to increase per second", consts.MaxInt) + // if err != nil { + // return nil, err + // } + numClients := 1000 + // numClients, err := prompt.Int("number of clients per node", consts.MaxInt) + // if err != nil { + // return nil, err + // } sc := throughput.NewConfig( uris, From dece46bb32b4914269b510ef619500901da5f0f6 Mon Sep 17 00:00:00 2001 From: Containerman17 <8990432+containerman17@users.noreply.github.com> Date: Thu, 28 Nov 2024 04:37:20 +0000 Subject: [PATCH 02/11] restore quick grafana --- x/grafana/README.md | 29 +++ x/grafana/compose.yml | 22 +++ x/grafana/configs/prometheus.yml | 7 + x/grafana/dashboard.sh | 10 + x/grafana/dashboards/default.yaml | 9 + x/grafana/dashboards/hypersdk-bench.json | 232 +++++++++++++++++++++++ x/grafana/datasources/default.yaml | 9 + 7 files changed, 318 insertions(+) create mode 100644 x/grafana/README.md create mode 100644 x/grafana/compose.yml create mode 100644 x/grafana/configs/prometheus.yml create mode 100755 x/grafana/dashboard.sh create mode 100644 x/grafana/dashboards/default.yaml create mode 100644 x/grafana/dashboards/hypersdk-bench.json create mode 100644 x/grafana/datasources/default.yaml diff --git a/x/grafana/README.md b/x/grafana/README.md new file mode 100644 index 0000000000..2e22877f56 --- /dev/null +++ b/x/grafana/README.md @@ -0,0 +1,29 @@ +# Prometheus & Grafana Dashboard for HyperSDK + +This setup collects and visualizes metrics from HyperSDK benchmarks. + +## Prerequisites +- Docker +- MorpheusVM running locally (default address: localhost:9650) + +## Quick Start +1. Run the dashboard using script `./x/grafana/dashboard.sh` +2. Open Grafana at [localhost:3000](http://localhost:3000) +3. Navigate to: [Dashboards > Services > HyperSDK benchmark](http://localhost:3000/d/de4okc3qcxou8f/hypersdk-benchmark) +4. Wait 15 seconds for the first data to appear. If it is not appearing, check that [localhost:9650/ext/metrics](http://localhost:9650/ext/metrics) is accessible and returning metrics. + +## Adding New Panels +1. Login to Grafana with: + - Username: admin + - Password: admin + - (Skip the password change prompt) +2. Edit an existing panel +3. Click Save - this will show JSON +4. Copy the JSON to: `./x/grafana//dashboards/hypersdk-bench.json` + +5. Restart Grafana to see changes: + +```bash +docker rm -f grafana +./x/grafana/dashboard.sh +``` diff --git a/x/grafana/compose.yml b/x/grafana/compose.yml new file mode 100644 index 0000000000..76eaa04e46 --- /dev/null +++ b/x/grafana/compose.yml @@ -0,0 +1,22 @@ +services: + prometheus: + image: prom/prometheus:v3.0.0 + container_name: prometheus + volumes: + - ./configs/prometheus.yml:/etc/prometheus/prometheus.yml + command: + - '--config.file=/etc/prometheus/prometheus.yml' + network_mode: host + + grafana: + image: grafana/grafana:11.3.1 + container_name: grafana + depends_on: + - prometheus + volumes: + - ./dashboards:/etc/grafana/provisioning/dashboards + - ./datasources:/etc/grafana/provisioning/datasources + network_mode: host + environment: + - GF_AUTH_ANONYMOUS_ENABLED=true + - GF_AUTH_ORG_ROLE=viewer diff --git a/x/grafana/configs/prometheus.yml b/x/grafana/configs/prometheus.yml new file mode 100644 index 0000000000..dd84813635 --- /dev/null +++ b/x/grafana/configs/prometheus.yml @@ -0,0 +1,7 @@ +scrape_configs: + - job_name: 'hypersdk' + scrape_interval: 5s + + static_configs: + - targets: ['localhost:9650'] + metrics_path: '/ext/metrics' diff --git a/x/grafana/dashboard.sh b/x/grafana/dashboard.sh new file mode 100755 index 0000000000..03d6292285 --- /dev/null +++ b/x/grafana/dashboard.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# Copyright (C) 2024, Ava Labs, Inc. All rights reserved. +# See the file LICENSE for licensing terms. + + +set -exu -o pipefail + +SCRIPT_DIR=$(dirname "$0") + +docker compose -f "$SCRIPT_DIR/compose.yml" up -d diff --git a/x/grafana/dashboards/default.yaml b/x/grafana/dashboards/default.yaml new file mode 100644 index 0000000000..c1da5a553f --- /dev/null +++ b/x/grafana/dashboards/default.yaml @@ -0,0 +1,9 @@ +apiVersion: 1 + +providers: + - name: Default # A uniquely identifiable name for the provider + folder: Services # The folder where to place the dashboards + type: file + options: + path: + /etc/grafana/provisioning/dashboards diff --git a/x/grafana/dashboards/hypersdk-bench.json b/x/grafana/dashboards/hypersdk-bench.json new file mode 100644 index 0000000000..62bcd8805c --- /dev/null +++ b/x/grafana/dashboards/hypersdk-bench.json @@ -0,0 +1,232 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 2, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "sum by(base) (rate(avalanche_api_calls_duration[$__rate_interval]))", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Panel Title", + "type": "timeseries" + }, + { + "datasource": "Prometheus", + "description": "Grouped by op", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "sum by(op) (rate(avalanche_avm_p2p_msg_count[$__rate_interval]))", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "avm_p2p_msg_count by op", + "transparent": true, + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 40, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "HyperSDK benchmark", + "uid": "de4okc3qcxou8f", + "version": 1, + "weekStart": "" +} diff --git a/x/grafana/datasources/default.yaml b/x/grafana/datasources/default.yaml new file mode 100644 index 0000000000..de15597d78 --- /dev/null +++ b/x/grafana/datasources/default.yaml @@ -0,0 +1,9 @@ +apiVersion: 1 + +datasources: + - name: Prometheus + type: prometheus + access: proxy + url: http://127.0.0.1:9090 + isDefault: true + editable: false From 74816cc3d96bdce82d838f5ba89b2fc2fceda9e6 Mon Sep 17 00:00:00 2001 From: Containerman17 <8990432+containerman17@users.noreply.github.com> Date: Thu, 28 Nov 2024 06:51:18 +0000 Subject: [PATCH 03/11] wip --- cli/spam.go | 10 +- restart_bench.sh | 16 + vm/metrics.go | 17 +- x/grafana/compose.yml | 4 + x/grafana/configs/prometheus.yml | 2 +- x/grafana/dashboard.sh | 1 + x/grafana/dashboards/hypersdk-bench.json | 564 ++++++++++++++++++++++- x/grafana/datasources/default.yaml | 1 + 8 files changed, 583 insertions(+), 32 deletions(-) create mode 100755 restart_bench.sh diff --git a/cli/spam.go b/cli/spam.go index 7434b38c2d..a51338526b 100644 --- a/cli/spam.go +++ b/cli/spam.go @@ -72,7 +72,7 @@ func (h *Handler) BuildSpammer(sh throughput.SpamHelper, spamKey string, default return throughput.NewSpammer(sc, sh) } // Collect parameters - numAccounts := 100 + numAccounts := 500 // numAccounts, err := prompt.Int("number of accounts", consts.MaxInt) // if err != nil { // return nil, err @@ -92,22 +92,22 @@ func (h *Handler) BuildSpammer(sh throughput.SpamHelper, spamKey string, default // return nil, err // } - txsPerSecond := 1000 + txsPerSecond := 10000 // txsPerSecond, err := prompt.Int("txs to try and issue per second", consts.MaxInt) // if err != nil { // return nil, err // } - minTxsPerSecond := 100 + minTxsPerSecond := 500 // minTxsPerSecond, err := prompt.Int("minimum txs to issue per second", consts.MaxInt) // if err != nil { // return nil, err // } - txsPerSecondStep := 100 + txsPerSecondStep := 200 // txsPerSecondStep, err := prompt.Int("txs to increase per second", consts.MaxInt) // if err != nil { // return nil, err // } - numClients := 1000 + numClients := 100 // numClients, err := prompt.Int("number of clients per node", consts.MaxInt) // if err != nil { // return nil, err diff --git a/restart_bench.sh b/restart_bench.sh new file mode 100755 index 0000000000..ca7a1891dd --- /dev/null +++ b/restart_bench.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +set -exu -o pipefail + +# Get the absolute path of the script directory +SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + +# Kill existing processes +pkill -9 -f avalanchego || true +pkill -9 -f spam || true + +# Clean up and restart +rm -rf ~/.tmpnet/ +cd "$SCRIPT_DIR/examples/morpheusvm/" +./scripts/run.sh +go run ./cmd/morpheus-cli/ spam run ed25519 diff --git a/vm/metrics.go b/vm/metrics.go index 2839568c02..b99f26c602 100644 --- a/vm/metrics.go +++ b/vm/metrics.go @@ -44,7 +44,7 @@ type Metrics struct { storageReadPrice prometheus.Gauge storageAllocatePrice prometheus.Gauge storageWritePrice prometheus.Gauge - blockBuild metric.Averager + blockBuild prometheus.Histogram blockParse metric.Averager blockVerify metric.Averager blockAccept metric.Averager @@ -57,14 +57,6 @@ type Metrics struct { func newMetrics() (*prometheus.Registry, *Metrics, error) { r := prometheus.NewRegistry() - blockBuild, err := metric.NewAverager( - "chain_block_build", - "time spent building blocks", - r, - ) - if err != nil { - return nil, nil, err - } blockParse, err := metric.NewAverager( "chain_block_parse", "time spent parsing blocks", @@ -194,7 +186,12 @@ func newMetrics() (*prometheus.Registry, *Metrics, error) { Name: "storage_modify_price", Help: "unit price of storage modifications", }), - blockBuild: blockBuild, + blockBuild: prometheus.NewHistogram(prometheus.HistogramOpts{ + Namespace: "chain", + Name: "block_build", + Help: "time spent building blocks", + Buckets: []float64{0.05, 0.01, 0.02, 0.03, 0.04, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00, 2.00, 5.00, 10.00, 20.00}, + }), blockParse: blockParse, blockVerify: blockVerify, blockAccept: blockAccept, diff --git a/x/grafana/compose.yml b/x/grafana/compose.yml index 76eaa04e46..2e694f4f51 100644 --- a/x/grafana/compose.yml +++ b/x/grafana/compose.yml @@ -4,6 +4,7 @@ services: container_name: prometheus volumes: - ./configs/prometheus.yml:/etc/prometheus/prometheus.yml + - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' network_mode: host @@ -20,3 +21,6 @@ services: environment: - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ORG_ROLE=viewer + +volumes: + prometheus_data: diff --git a/x/grafana/configs/prometheus.yml b/x/grafana/configs/prometheus.yml index dd84813635..ef3fc3e203 100644 --- a/x/grafana/configs/prometheus.yml +++ b/x/grafana/configs/prometheus.yml @@ -1,6 +1,6 @@ scrape_configs: - job_name: 'hypersdk' - scrape_interval: 5s + scrape_interval: 2s static_configs: - targets: ['localhost:9650'] diff --git a/x/grafana/dashboard.sh b/x/grafana/dashboard.sh index 03d6292285..d7ed5efe59 100755 --- a/x/grafana/dashboard.sh +++ b/x/grafana/dashboard.sh @@ -7,4 +7,5 @@ set -exu -o pipefail SCRIPT_DIR=$(dirname "$0") +docker compose -f "$SCRIPT_DIR/compose.yml" down || true docker compose -f "$SCRIPT_DIR/compose.yml" up -d diff --git a/x/grafana/dashboards/hypersdk-bench.json b/x/grafana/dashboards/hypersdk-bench.json index 62bcd8805c..1bd1b2a72e 100644 --- a/x/grafana/dashboards/hypersdk-bench.json +++ b/x/grafana/dashboards/hypersdk-bench.json @@ -82,18 +82,212 @@ "overrides": [] }, "gridPos": { - "h": 8, - "w": 12, + "h": 4, + "w": 4, "x": 0, "y": 0 }, - "id": 2, + "id": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_bandwidth_price", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "Bandwith price", + "useBackend": false + } + ], + "title": "chain_bandwidth_price", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 4, + "y": 0 + }, + "id": 7, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_compute_price", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "Bandwith price", + "useBackend": false + } + ], + "title": "chain_compute_price", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 8, + "y": 0 + }, + "id": 8, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", - "showLegend": true + "showLegend": false }, "tooltip": { "mode": "single", @@ -105,21 +299,354 @@ { "disableTextWrap": false, "editorMode": "builder", - "expr": "sum by(base) (rate(avalanche_api_calls_duration[$__rate_interval]))", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_read_price", "fullMetaSearch": false, "includeNullMetadata": true, "legendFormat": "__auto", "range": true, + "refId": "Bandwith price", + "useBackend": false + } + ], + "title": "chain_storage_read_price", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 12, + "y": 0 + }, + "id": 9, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_create_price", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "Bandwith price", + "useBackend": false + } + ], + "title": "chain_storage_create_price", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 4, + "x": 16, + "y": 0 + }, + "id": 10, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_modify_price", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "Bandwith price", + "useBackend": false + } + ], + "title": "chain_storage_modify_price", + "transparent": true, + "type": "timeseries" + }, + { + "collapsed": true, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 4 + }, + "id": 5, + "panels": [], + "title": "Prices", + "type": "row" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, + "id": 4, + "panels": [], + "title": "Row title", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 6 + }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "rate(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_txs_verified[$__rate_interval])", + "fullMetaSearch": false, + "includeNullMetadata": false, + "legendFormat": "__auto", + "range": true, "refId": "A", "useBackend": false } ], - "title": "Panel Title", + "title": "vm_chain_chain_txs_verified[$__rate_interval]", + "transparent": true, "type": "timeseries" }, { - "datasource": "Prometheus", - "description": "Grouped by op", + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 12 + }, + "id": 2, + "panels": [], + "title": "System", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, "fieldConfig": { "defaults": { "color": { @@ -176,10 +703,10 @@ "overrides": [] }, "gridPos": { - "h": 8, - "w": 12, + "h": 7, + "w": 6, "x": 0, - "y": 0 + "y": 13 }, "id": 1, "options": { @@ -187,7 +714,7 @@ "calcs": [], "displayMode": "list", "placement": "bottom", - "showLegend": true + "showLegend": false }, "tooltip": { "mode": "single", @@ -197,30 +724,35 @@ "pluginVersion": "11.3.1", "targets": [ { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, "disableTextWrap": false, "editorMode": "builder", - "expr": "sum by(op) (rate(avalanche_avm_p2p_msg_count[$__rate_interval]))", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_process_go_goroutines", "fullMetaSearch": false, - "includeNullMetadata": false, + "includeNullMetadata": true, "legendFormat": "__auto", "range": true, "refId": "A", "useBackend": false } ], - "title": "avm_p2p_msg_count by op", + "title": "process_go_goroutines", "transparent": true, "type": "timeseries" } ], "preload": false, + "refresh": "10s", "schemaVersion": 40, "tags": [], "templating": { "list": [] }, "time": { - "from": "now-5m", + "from": "now-15m", "to": "now" }, "timepicker": {}, diff --git a/x/grafana/datasources/default.yaml b/x/grafana/datasources/default.yaml index de15597d78..1d7351e8f6 100644 --- a/x/grafana/datasources/default.yaml +++ b/x/grafana/datasources/default.yaml @@ -7,3 +7,4 @@ datasources: url: http://127.0.0.1:9090 isDefault: true editable: false + scrapeInterval: 2s From c1372e5ac5a454e047a9630a7e157f9dbed963cc Mon Sep 17 00:00:00 2001 From: Containerman17 <8990432+containerman17@users.noreply.github.com> Date: Thu, 28 Nov 2024 09:54:35 +0000 Subject: [PATCH 04/11] dash --- vm/metrics.go | 137 ++++++++++--------- vm/vm.go | 2 +- x/grafana/compose.yml | 2 +- x/grafana/dashboards/hypersdk-bench.json | 160 ++++++++++++++++++----- 4 files changed, 205 insertions(+), 96 deletions(-) diff --git a/vm/metrics.go b/vm/metrics.go index b99f26c602..e4e18c07b2 100644 --- a/vm/metrics.go +++ b/vm/metrics.go @@ -4,7 +4,6 @@ package vm import ( - "github.com/ava-labs/avalanchego/utils/metric" "github.com/ava-labs/avalanchego/utils/wrappers" "github.com/prometheus/client_golang/prometheus" @@ -44,53 +43,63 @@ type Metrics struct { storageReadPrice prometheus.Gauge storageAllocatePrice prometheus.Gauge storageWritePrice prometheus.Gauge - blockBuild prometheus.Histogram - blockParse metric.Averager - blockVerify metric.Averager - blockAccept metric.Averager - blockProcess metric.Averager + blockBuild prometheus.Summary + blockParse prometheus.Histogram + blockVerify prometheus.Histogram + blockAccept prometheus.Histogram + blockProcess prometheus.Histogram executorBuildRecorder executor.Metrics executorVerifyRecorder executor.Metrics } +var blockBuckets = []float64{0.001, 0.01, 0.1, 1, 10, 100, 1_000, 10_000, 100_000, 1_000_000, 10_000_000, 100_000_000} + func newMetrics() (*prometheus.Registry, *Metrics, error) { - r := prometheus.NewRegistry() + registry := prometheus.NewRegistry() - blockParse, err := metric.NewAverager( - "chain_block_parse", - "time spent parsing blocks", - r, + blockBuild := prometheus.NewHistogram( + prometheus.HistogramOpts{ + Namespace: "chain", + Name: "block_build", + Help: "time spent building blocks", + Buckets: blockBuckets, + }, ) - if err != nil { - return nil, nil, err - } - blockVerify, err := metric.NewAverager( - "chain_block_verify", - "time spent verifying blocks", - r, + blockParse := prometheus.NewHistogram( + prometheus.HistogramOpts{ + Namespace: "chain", + Name: "block_parse", + Help: "time spent parsing blocks", + Buckets: blockBuckets, + }, ) - if err != nil { - return nil, nil, err - } - blockAccept, err := metric.NewAverager( - "chain_block_accept", - "time spent accepting blocks", - r, + blockVerify := prometheus.NewHistogram( + prometheus.HistogramOpts{ + Namespace: "chain", + Name: "block_verify", + Help: "time spent verifying blocks", + Buckets: blockBuckets, + }, ) - if err != nil { - return nil, nil, err - } - blockProcess, err := metric.NewAverager( - "chain_block_process", - "time spent processing blocks", - r, + blockAccept := prometheus.NewHistogram( + prometheus.HistogramOpts{ + Namespace: "chain", + Name: "block_accept", + Help: "time spent accepting blocks", + Buckets: blockBuckets, + }, + ) + blockProcess := prometheus.NewHistogram( + prometheus.HistogramOpts{ + Namespace: "chain", + Name: "block_process", + Help: "time spent processing blocks", + Buckets: blockBuckets, + }, ) - if err != nil { - return nil, nil, err - } - m := &Metrics{ + metrics := &Metrics{ txsSubmitted: prometheus.NewCounter(prometheus.CounterOpts{ Namespace: "vm", Name: "txs_submitted", @@ -186,41 +195,41 @@ func newMetrics() (*prometheus.Registry, *Metrics, error) { Name: "storage_modify_price", Help: "unit price of storage modifications", }), - blockBuild: prometheus.NewHistogram(prometheus.HistogramOpts{ - Namespace: "chain", - Name: "block_build", - Help: "time spent building blocks", - Buckets: []float64{0.05, 0.01, 0.02, 0.03, 0.04, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45, 0.50, 0.60, 0.70, 0.80, 0.90, 1.00, 2.00, 5.00, 10.00, 20.00}, - }), + blockBuild: blockBuild, blockParse: blockParse, blockVerify: blockVerify, blockAccept: blockAccept, blockProcess: blockProcess, } - m.executorBuildRecorder = &executorMetrics{blocked: m.executorBuildBlocked, executable: m.executorBuildExecutable} - m.executorVerifyRecorder = &executorMetrics{blocked: m.executorVerifyBlocked, executable: m.executorVerifyExecutable} + metrics.executorBuildRecorder = &executorMetrics{blocked: metrics.executorBuildBlocked, executable: metrics.executorBuildExecutable} + metrics.executorVerifyRecorder = &executorMetrics{blocked: metrics.executorVerifyBlocked, executable: metrics.executorVerifyExecutable} errs := wrappers.Errs{} errs.Add( - r.Register(m.txsSubmitted), - r.Register(m.stateChanges), - r.Register(m.stateOperations), - r.Register(m.mempoolSize), - r.Register(m.buildCapped), - r.Register(m.emptyBlockBuilt), - r.Register(m.clearedMempool), - r.Register(m.deletedBlocks), - r.Register(m.blocksFromDisk), - r.Register(m.blocksHeightsFromDisk), - r.Register(m.executorBuildBlocked), - r.Register(m.executorBuildExecutable), - r.Register(m.executorVerifyBlocked), - r.Register(m.executorVerifyExecutable), - r.Register(m.bandwidthPrice), - r.Register(m.computePrice), - r.Register(m.storageReadPrice), - r.Register(m.storageAllocatePrice), - r.Register(m.storageWritePrice), + registry.Register(metrics.txsSubmitted), + registry.Register(metrics.stateChanges), + registry.Register(metrics.stateOperations), + registry.Register(metrics.mempoolSize), + registry.Register(metrics.buildCapped), + registry.Register(metrics.emptyBlockBuilt), + registry.Register(metrics.clearedMempool), + registry.Register(metrics.deletedBlocks), + registry.Register(metrics.blocksFromDisk), + registry.Register(metrics.blocksHeightsFromDisk), + registry.Register(metrics.executorBuildBlocked), + registry.Register(metrics.executorBuildExecutable), + registry.Register(metrics.executorVerifyBlocked), + registry.Register(metrics.executorVerifyExecutable), + registry.Register(metrics.bandwidthPrice), + registry.Register(metrics.computePrice), + registry.Register(metrics.storageReadPrice), + registry.Register(metrics.storageAllocatePrice), + registry.Register(metrics.storageWritePrice), + registry.Register(metrics.blockBuild), + registry.Register(metrics.blockParse), + registry.Register(metrics.blockVerify), + registry.Register(metrics.blockAccept), + registry.Register(metrics.blockProcess), ) - return r, m, errs.Err + return registry, metrics, errs.Err } diff --git a/vm/vm.go b/vm/vm.go index 8a8dfb54b9..13a8a18a38 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -938,7 +938,7 @@ func (vm *VM) ParseBlock(ctx context.Context, source []byte) (snowman.Block, err func (vm *VM) BuildBlock(ctx context.Context) (snowman.Block, error) { start := time.Now() defer func() { - vm.metrics.blockBuild.Observe(float64(time.Since(start))) + vm.metrics.blockBuild.Observe(float64(time.Since(start).Microseconds())) }() ctx, span := vm.tracer.Start(ctx, "VM.BuildBlock") diff --git a/x/grafana/compose.yml b/x/grafana/compose.yml index 2e694f4f51..8e522d4935 100644 --- a/x/grafana/compose.yml +++ b/x/grafana/compose.yml @@ -20,7 +20,7 @@ services: network_mode: host environment: - GF_AUTH_ANONYMOUS_ENABLED=true - - GF_AUTH_ORG_ROLE=viewer + - GF_AUTH_ORG_ROLE=admin volumes: prometheus_data: diff --git a/x/grafana/dashboards/hypersdk-bench.json b/x/grafana/dashboards/hypersdk-bench.json index 1bd1b2a72e..b139e10b82 100644 --- a/x/grafana/dashboards/hypersdk-bench.json +++ b/x/grafana/dashboards/hypersdk-bench.json @@ -21,6 +21,106 @@ "id": 2, "links": [], "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 11, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "exemplar": false, + "expr": "histogram_quantile(0.95, sum by(le) (rate(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_build_bucket[1m])))", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "{{le}}", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Panel Title", + "transparent": true, + "type": "timeseries" + }, { "datasource": { "type": "prometheus", @@ -84,10 +184,10 @@ "gridPos": { "h": 4, "w": 4, - "x": 0, + "x": 12, "y": 0 }, - "id": 6, + "id": 9, "options": { "legend": { "calcs": [], @@ -105,7 +205,7 @@ { "disableTextWrap": false, "editorMode": "builder", - "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_bandwidth_price", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_create_price", "fullMetaSearch": false, "includeNullMetadata": true, "legendFormat": "__auto", @@ -114,7 +214,7 @@ "useBackend": false } ], - "title": "chain_bandwidth_price", + "title": "chain_storage_create_price", "transparent": true, "type": "timeseries" }, @@ -181,10 +281,10 @@ "gridPos": { "h": 4, "w": 4, - "x": 4, + "x": 16, "y": 0 }, - "id": 7, + "id": 10, "options": { "legend": { "calcs": [], @@ -202,7 +302,7 @@ { "disableTextWrap": false, "editorMode": "builder", - "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_compute_price", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_modify_price", "fullMetaSearch": false, "includeNullMetadata": true, "legendFormat": "__auto", @@ -211,7 +311,7 @@ "useBackend": false } ], - "title": "chain_compute_price", + "title": "chain_storage_modify_price", "transparent": true, "type": "timeseries" }, @@ -278,10 +378,10 @@ "gridPos": { "h": 4, "w": 4, - "x": 8, - "y": 0 + "x": 0, + "y": 8 }, - "id": 8, + "id": 6, "options": { "legend": { "calcs": [], @@ -299,7 +399,7 @@ { "disableTextWrap": false, "editorMode": "builder", - "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_read_price", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_bandwidth_price", "fullMetaSearch": false, "includeNullMetadata": true, "legendFormat": "__auto", @@ -308,7 +408,7 @@ "useBackend": false } ], - "title": "chain_storage_read_price", + "title": "chain_bandwidth_price", "transparent": true, "type": "timeseries" }, @@ -375,10 +475,10 @@ "gridPos": { "h": 4, "w": 4, - "x": 12, - "y": 0 + "x": 4, + "y": 8 }, - "id": 9, + "id": 7, "options": { "legend": { "calcs": [], @@ -396,7 +496,7 @@ { "disableTextWrap": false, "editorMode": "builder", - "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_create_price", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_compute_price", "fullMetaSearch": false, "includeNullMetadata": true, "legendFormat": "__auto", @@ -405,7 +505,7 @@ "useBackend": false } ], - "title": "chain_storage_create_price", + "title": "chain_compute_price", "transparent": true, "type": "timeseries" }, @@ -472,10 +572,10 @@ "gridPos": { "h": 4, "w": 4, - "x": 16, - "y": 0 + "x": 8, + "y": 8 }, - "id": 10, + "id": 8, "options": { "legend": { "calcs": [], @@ -493,7 +593,7 @@ { "disableTextWrap": false, "editorMode": "builder", - "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_modify_price", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_read_price", "fullMetaSearch": false, "includeNullMetadata": true, "legendFormat": "__auto", @@ -502,7 +602,7 @@ "useBackend": false } ], - "title": "chain_storage_modify_price", + "title": "chain_storage_read_price", "transparent": true, "type": "timeseries" }, @@ -512,7 +612,7 @@ "h": 1, "w": 24, "x": 0, - "y": 4 + "y": 12 }, "id": 5, "panels": [], @@ -525,7 +625,7 @@ "h": 1, "w": 24, "x": 0, - "y": 5 + "y": 13 }, "id": 4, "panels": [], @@ -596,7 +696,7 @@ "h": 6, "w": 8, "x": 0, - "y": 6 + "y": 14 }, "id": 3, "options": { @@ -635,7 +735,7 @@ "h": 1, "w": 24, "x": 0, - "y": 12 + "y": 20 }, "id": 2, "panels": [], @@ -706,7 +806,7 @@ "h": 7, "w": 6, "x": 0, - "y": 13 + "y": 21 }, "id": 1, "options": { @@ -745,14 +845,14 @@ } ], "preload": false, - "refresh": "10s", + "refresh": "5s", "schemaVersion": 40, "tags": [], "templating": { "list": [] }, "time": { - "from": "now-15m", + "from": "now-5m", "to": "now" }, "timepicker": {}, From 3ac7d9ec3ab1bffb69347543c5afa82e3463fe01 Mon Sep 17 00:00:00 2001 From: Containerman17 <8990432+containerman17@users.noreply.github.com> Date: Thu, 28 Nov 2024 13:32:41 +0000 Subject: [PATCH 05/11] dashboard --- cli/spam.go | 4 +- internal/prometheus/prometheus.go | 20 +- vm/metrics.go | 21 +- vm/vm.go | 2 +- x/grafana/dashboards/hypersdk-bench.json | 784 ++--------------------- 5 files changed, 91 insertions(+), 740 deletions(-) diff --git a/cli/spam.go b/cli/spam.go index a51338526b..17390402f6 100644 --- a/cli/spam.go +++ b/cli/spam.go @@ -92,7 +92,7 @@ func (h *Handler) BuildSpammer(sh throughput.SpamHelper, spamKey string, default // return nil, err // } - txsPerSecond := 10000 + txsPerSecond := 1000 // txsPerSecond, err := prompt.Int("txs to try and issue per second", consts.MaxInt) // if err != nil { // return nil, err @@ -102,7 +102,7 @@ func (h *Handler) BuildSpammer(sh throughput.SpamHelper, spamKey string, default // if err != nil { // return nil, err // } - txsPerSecondStep := 200 + txsPerSecondStep := 50 // txsPerSecondStep, err := prompt.Int("txs to increase per second", consts.MaxInt) // if err != nil { // return nil, err diff --git a/internal/prometheus/prometheus.go b/internal/prometheus/prometheus.go index bcc8cc7ff3..29216069b1 100644 --- a/internal/prometheus/prometheus.go +++ b/internal/prometheus/prometheus.go @@ -276,20 +276,20 @@ func generateChainPanels(chainID ids.ID) []string { panels = append(panels, OutboundFailed) utils.Outf("{{yellow}}outbound failed:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_block_build_sum[5s])/1000000/5", chainID)) - utils.Outf("{{yellow}}block build (ms/s):{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_block_build_sum[5s])/1000000/5", chainID)) + // utils.Outf("{{yellow}}block build (ms/s):{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_block_parse_sum[5s])/1000000/5", chainID)) - utils.Outf("{{yellow}}block parse (ms/s):{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_block_parse_sum[5s])/1000000/5", chainID)) + // utils.Outf("{{yellow}}block parse (ms/s):{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_block_verify_sum[5s])/1000000/5", chainID)) - utils.Outf("{{yellow}}block verify (ms/s):{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_block_verify_sum[5s])/1000000/5", chainID)) + // utils.Outf("{{yellow}}block verify (ms/s):{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_block_accept_sum[5s])/1000000/5", chainID)) - utils.Outf("{{yellow}}block accept (ms/s):{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_block_accept_sum[5s])/1000000/5", chainID)) + // utils.Outf("{{yellow}}block accept (ms/s):{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_block_process_sum[5s])/1000000/5", chainID)) - utils.Outf("{{yellow}}block process [async] (ms/s):{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_block_process_sum[5s])/1000000/5", chainID)) + // utils.Outf("{{yellow}}block process [async] (ms/s):{{/}} %s\n", panels[len(panels)-1]) panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_state_merkleDB_intermediate_node_cache_hit[5s])/(increase(avalanche_%s_vm_state_merkleDB_intermediate_node_cache_miss[5s]) + increase(avalanche_%s_vm_state_merkleDB_intermediate_node_cache_hit[5s]))", chainID, chainID, chainID)) utils.Outf("{{yellow}}intermediate node cache hit rate:{{/}} %s\n", panels[len(panels)-1]) diff --git a/vm/metrics.go b/vm/metrics.go index e4e18c07b2..7a9e38d19f 100644 --- a/vm/metrics.go +++ b/vm/metrics.go @@ -53,7 +53,26 @@ type Metrics struct { executorVerifyRecorder executor.Metrics } -var blockBuckets = []float64{0.001, 0.01, 0.1, 1, 10, 100, 1_000, 10_000, 100_000, 1_000_000, 10_000_000, 100_000_000} +// blockBuckets defines the histogram buckets for block-related metrics. +// The values are in nanoseconds. +var blockBuckets = []float64{ + 10_000, // 10 microseconds + 25_000, // 25 microseconds + 50_000, // 50 microseconds + 100_000, // 100 microseconds + 250_000, // 250 microseconds + 500_000, // 500 microseconds + 1_000_000, // 1 millisecond + 2_500_000, // 2.5 milliseconds + 5_000_000, // 5 milliseconds + 10_000_000, // 10 milliseconds + 25_000_000, // 25 milliseconds + 50_000_000, // 50 milliseconds + 100_000_000, // 100 milliseconds + 250_000_000, // 250 milliseconds + 500_000_000, // 500 milliseconds + 1_000_000_000, // 1 second +} func newMetrics() (*prometheus.Registry, *Metrics, error) { registry := prometheus.NewRegistry() diff --git a/vm/vm.go b/vm/vm.go index 13a8a18a38..8650cd0d32 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -938,7 +938,7 @@ func (vm *VM) ParseBlock(ctx context.Context, source []byte) (snowman.Block, err func (vm *VM) BuildBlock(ctx context.Context) (snowman.Block, error) { start := time.Now() defer func() { - vm.metrics.blockBuild.Observe(float64(time.Since(start).Microseconds())) + vm.metrics.blockBuild.Observe(float64(time.Since(start).Nanoseconds())) }() ctx, span := vm.tracer.Start(ctx, "VM.BuildBlock") diff --git a/x/grafana/dashboards/hypersdk-bench.json b/x/grafana/dashboards/hypersdk-bench.json index b139e10b82..cf6dc08965 100644 --- a/x/grafana/dashboards/hypersdk-bench.json +++ b/x/grafana/dashboards/hypersdk-bench.json @@ -39,16 +39,16 @@ "axisPlacement": "auto", "barAlignment": 0, "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", + "drawStyle": "bars", + "fillOpacity": 26, + "gradientMode": "hue", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "insertNulls": false, - "lineInterpolation": "linear", + "lineInterpolation": "smooth", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { @@ -58,13 +58,14 @@ "spanNulls": false, "stacking": { "group": "A", - "mode": "none" + "mode": "normal" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], + "min": 0, "thresholds": { "mode": "absolute", "steps": [ @@ -77,13 +78,14 @@ "value": 80 } ] - } + }, + "unit": "ms" }, "overrides": [] }, "gridPos": { - "h": 8, - "w": 12, + "h": 9, + "w": 24, "x": 0, "y": 0 }, @@ -104,742 +106,72 @@ "targets": [ { "disableTextWrap": false, - "editorMode": "builder", + "editorMode": "code", "exemplar": false, - "expr": "histogram_quantile(0.95, sum by(le) (rate(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_build_bucket[1m])))", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_build_sum[15s]) / 1000000 / 15", "format": "time_series", "fullMetaSearch": false, "includeNullMetadata": false, "instant": false, - "legendFormat": "{{le}}", + "legendFormat": "build", "range": true, - "refId": "A", + "refId": "One", "useBackend": false - } - ], - "title": "Panel Title", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 4, - "x": 12, - "y": 0 - }, - "id": 9, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "11.3.1", - "targets": [ { - "disableTextWrap": false, - "editorMode": "builder", - "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_create_price", - "fullMetaSearch": false, - "includeNullMetadata": true, - "legendFormat": "__auto", - "range": true, - "refId": "Bandwith price", - "useBackend": false - } - ], - "title": "chain_storage_create_price", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 4, - "x": 16, - "y": 0 - }, - "id": 10, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false + "editorMode": "code", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_parse_sum[15s]) / 1000000 / 15", + "hide": false, + "instant": false, + "legendFormat": "parse", + "range": true, + "refId": "B" }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "11.3.1", - "targets": [ { - "disableTextWrap": false, - "editorMode": "builder", - "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_modify_price", - "fullMetaSearch": false, - "includeNullMetadata": true, - "legendFormat": "__auto", - "range": true, - "refId": "Bandwith price", - "useBackend": false - } - ], - "title": "chain_storage_modify_price", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } + "editorMode": "code", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_verify_sum[15s]) / 1000000 / 15", + "hide": false, + "instant": false, + "legendFormat": "verify", + "range": true, + "refId": "A" }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 4, - "x": 0, - "y": 8 - }, - "id": 6, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "editorMode": "code", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_accept_sum[15s]) / 1000000 / 15", + "hide": false, + "instant": false, + "legendFormat": "accept", + "range": true, + "refId": "C" }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "11.3.1", - "targets": [ { - "disableTextWrap": false, - "editorMode": "builder", - "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_bandwidth_price", - "fullMetaSearch": false, - "includeNullMetadata": true, - "legendFormat": "__auto", + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "editorMode": "code", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_process_sum[15s]) / 1000000 / 15", + "hide": false, + "instant": false, + "legendFormat": "process", "range": true, - "refId": "Bandwith price", - "useBackend": false - } - ], - "title": "chain_bandwidth_price", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 4, - "x": 4, - "y": 8 - }, - "id": 7, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "11.3.1", - "targets": [ - { - "disableTextWrap": false, - "editorMode": "builder", - "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_compute_price", - "fullMetaSearch": false, - "includeNullMetadata": true, - "legendFormat": "__auto", - "range": true, - "refId": "Bandwith price", - "useBackend": false - } - ], - "title": "chain_compute_price", - "transparent": true, - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 4, - "w": 4, - "x": 8, - "y": 8 - }, - "id": 8, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "11.3.1", - "targets": [ - { - "disableTextWrap": false, - "editorMode": "builder", - "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_read_price", - "fullMetaSearch": false, - "includeNullMetadata": true, - "legendFormat": "__auto", - "range": true, - "refId": "Bandwith price", - "useBackend": false - } - ], - "title": "chain_storage_read_price", - "transparent": true, - "type": "timeseries" - }, - { - "collapsed": true, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 12 - }, - "id": 5, - "panels": [], - "title": "Prices", - "type": "row" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 13 - }, - "id": 4, - "panels": [], - "title": "Row title", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 6, - "w": 8, - "x": 0, - "y": 14 - }, - "id": 3, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "11.3.1", - "targets": [ - { - "disableTextWrap": false, - "editorMode": "builder", - "expr": "rate(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_txs_verified[$__rate_interval])", - "fullMetaSearch": false, - "includeNullMetadata": false, - "legendFormat": "__auto", - "range": true, - "refId": "A", - "useBackend": false - } - ], - "title": "vm_chain_chain_txs_verified[$__rate_interval]", - "transparent": true, - "type": "timeseries" - }, - { - "collapsed": false, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 20 - }, - "id": 2, - "panels": [], - "title": "System", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 7, - "w": 6, - "x": 0, - "y": 21 - }, - "id": 1, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "11.3.1", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "disableTextWrap": false, - "editorMode": "builder", - "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_process_go_goroutines", - "fullMetaSearch": false, - "includeNullMetadata": true, - "legendFormat": "__auto", - "range": true, - "refId": "A", - "useBackend": false + "refId": "D" } ], - "title": "process_go_goroutines", + "title": "Time working on block, ms", "transparent": true, "type": "timeseries" } @@ -859,6 +191,6 @@ "timezone": "browser", "title": "HyperSDK benchmark", "uid": "de4okc3qcxou8f", - "version": 1, + "version": 2, "weekStart": "" } From 40ca1c990d8a291a8c36a7b4d40418a02f29e6b8 Mon Sep 17 00:00:00 2001 From: Containerman17 <8990432+containerman17@users.noreply.github.com> Date: Thu, 28 Nov 2024 13:33:25 +0000 Subject: [PATCH 06/11] mempool --- internal/prometheus/prometheus.go | 4 +- x/grafana/dashboards/hypersdk-bench.json | 99 +++++++++++++++++++++++- 2 files changed, 100 insertions(+), 3 deletions(-) diff --git a/internal/prometheus/prometheus.go b/internal/prometheus/prometheus.go index 29216069b1..82f8c6f11a 100644 --- a/internal/prometheus/prometheus.go +++ b/internal/prometheus/prometheus.go @@ -240,8 +240,8 @@ func generateChainPanels(chainID ids.ID) []string { panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_cleared_mempool[5s])/5", chainID)) utils.Outf("{{yellow}}cleared mempool per second:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_mempool_size", chainID)) - utils.Outf("{{yellow}}mempool size:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_mempool_size", chainID)) + // utils.Outf("{{yellow}}mempool size:{{/}} %s\n", panels[len(panels)-1]) panels = append(panels, "avalanche_resource_tracker_cpu_usage") utils.Outf("{{yellow}}CPU usage:{{/}} %s\n", panels[len(panels)-1]) diff --git a/x/grafana/dashboards/hypersdk-bench.json b/x/grafana/dashboards/hypersdk-bench.json index cf6dc08965..bc9f19b070 100644 --- a/x/grafana/dashboards/hypersdk-bench.json +++ b/x/grafana/dashboards/hypersdk-bench.json @@ -21,6 +21,103 @@ "id": 2, "links": [], "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 37, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 0, + "y": 0 + }, + "id": 12, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_mempool_size", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Mempool size", + "transparent": true, + "type": "timeseries" + }, { "datasource": { "type": "prometheus", @@ -87,7 +184,7 @@ "h": 9, "w": 24, "x": 0, - "y": 0 + "y": 5 }, "id": 11, "options": { From 718a323b2ad378fa4cade7e481329b93683c2ee2 Mon Sep 17 00:00:00 2001 From: Containerman17 <8990432+containerman17@users.noreply.github.com> Date: Thu, 28 Nov 2024 15:14:02 +0000 Subject: [PATCH 07/11] add memory --- internal/prometheus/prometheus.go | 12 +- x/grafana/dashboards/hypersdk-bench.json | 239 +++++++++++++++++++++-- 2 files changed, 232 insertions(+), 19 deletions(-) diff --git a/internal/prometheus/prometheus.go b/internal/prometheus/prometheus.go index 82f8c6f11a..410edcb8dc 100644 --- a/internal/prometheus/prometheus.go +++ b/internal/prometheus/prometheus.go @@ -243,14 +243,14 @@ func generateChainPanels(chainID ids.ID) []string { // panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_mempool_size", chainID)) // utils.Outf("{{yellow}}mempool size:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, "avalanche_resource_tracker_cpu_usage") - utils.Outf("{{yellow}}CPU usage:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, "avalanche_resource_tracker_cpu_usage") + // utils.Outf("{{yellow}}CPU usage:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, "avalanche_go_memstats_alloc_bytes") - utils.Outf("{{yellow}}memory (avalanchego) usage:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, "avalanche_go_memstats_alloc_bytes") + // utils.Outf("{{yellow}}memory (avalanchego) usage:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("avalanche_%s_vm_go_memstats_alloc_bytes", chainID)) - utils.Outf("{{yellow}}memory (morpheusvm) usage:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("avalanche_%s_vm_go_memstats_alloc_bytes", chainID)) + // utils.Outf("{{yellow}}memory (morpheusvm) usage:{{/}} %s\n", panels[len(panels)-1]) panels = append(panels, fmt.Sprintf("increase(avalanche_%s_handler_chits_sum[5s])/1000000/5 + increase(avalanche_%s_handler_notify_sum[5s])/1000000/5 + increase(avalanche_%s_handler_get_sum[5s])/1000000/5 + increase(avalanche_%s_handler_push_query_sum[5s])/1000000/5 + increase(avalanche_%s_handler_put_sum[5s])/1000000/5 + increase(avalanche_%s_handler_pull_query_sum[5s])/1000000/5 + increase(avalanche_%s_handler_query_failed_sum[5s])/1000000/5", chainID, chainID, chainID, chainID, chainID, chainID, chainID)) utils.Outf("{{yellow}}consensus engine processing (ms/s):{{/}} %s\n", panels[len(panels)-1]) diff --git a/x/grafana/dashboards/hypersdk-bench.json b/x/grafana/dashboards/hypersdk-bench.json index bc9f19b070..93bea23716 100644 --- a/x/grafana/dashboards/hypersdk-bench.json +++ b/x/grafana/dashboards/hypersdk-bench.json @@ -21,6 +21,122 @@ "id": 2, "links": [], "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 0 + }, + "id": 14, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_process_go_memstats_alloc_bytes", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "avalanchego", + "range": true, + "refId": "A", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_process_go_memstats_alloc_bytes", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "hypersdk (might be broken)", + "range": true, + "refId": "B", + "useBackend": false + } + ], + "title": "Memory usage", + "transparent": true, + "type": "timeseries" + }, { "datasource": { "type": "prometheus", @@ -82,11 +198,108 @@ "overrides": [] }, "gridPos": { - "h": 5, + "h": 6, "w": 8, - "x": 0, + "x": 8, "y": 0 }, + "id": 13, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_resource_tracker_cpu_usage", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "CPU Usage", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 37, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 6 + }, "id": 12, "options": { "legend": { @@ -176,15 +389,15 @@ } ] }, - "unit": "ms" + "unit": "percent" }, "overrides": [] }, "gridPos": { - "h": 9, - "w": 24, + "h": 7, + "w": 16, "x": 0, - "y": 5 + "y": 12 }, "id": 11, "options": { @@ -205,7 +418,7 @@ "disableTextWrap": false, "editorMode": "code", "exemplar": false, - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_build_sum[15s]) / 1000000 / 15", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_build_sum[15s]) / 1000000 / 15 / 10", "format": "time_series", "fullMetaSearch": false, "includeNullMetadata": false, @@ -221,7 +434,7 @@ "uid": "PBFA97CFB590B2093" }, "editorMode": "code", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_parse_sum[15s]) / 1000000 / 15", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_parse_sum[15s]) / 1000000 / 15 / 10", "hide": false, "instant": false, "legendFormat": "parse", @@ -234,7 +447,7 @@ "uid": "PBFA97CFB590B2093" }, "editorMode": "code", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_verify_sum[15s]) / 1000000 / 15", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_verify_sum[15s]) / 1000000 / 15 / 10", "hide": false, "instant": false, "legendFormat": "verify", @@ -247,7 +460,7 @@ "uid": "PBFA97CFB590B2093" }, "editorMode": "code", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_accept_sum[15s]) / 1000000 / 15", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_accept_sum[15s]) / 1000000 / 15 / 10", "hide": false, "instant": false, "legendFormat": "accept", @@ -260,7 +473,7 @@ "uid": "PBFA97CFB590B2093" }, "editorMode": "code", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_process_sum[15s]) / 1000000 / 15", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_process_sum[15s]) / 1000000 / 15 / 10", "hide": false, "instant": false, "legendFormat": "process", @@ -268,7 +481,7 @@ "refId": "D" } ], - "title": "Time working on block, ms", + "title": "Time working on block, %", "transparent": true, "type": "timeseries" } @@ -288,6 +501,6 @@ "timezone": "browser", "title": "HyperSDK benchmark", "uid": "de4okc3qcxou8f", - "version": 2, + "version": 1, "weekStart": "" } From 3cd5a1926c7dc3ca0bb2705fac5b205f4dc87071 Mon Sep 17 00:00:00 2001 From: Containerman17 <8990432+containerman17@users.noreply.github.com> Date: Fri, 29 Nov 2024 06:59:49 +0000 Subject: [PATCH 08/11] restore metrics --- cli/spam.go | 4 +- internal/prometheus/prometheus.go | 49 +- vm/metrics.go | 155 +++--- x/grafana/dashboards/hypersdk-bench.json | 576 ++++++++++++++++++++++- 4 files changed, 669 insertions(+), 115 deletions(-) diff --git a/cli/spam.go b/cli/spam.go index 17390402f6..159bd3e7d0 100644 --- a/cli/spam.go +++ b/cli/spam.go @@ -92,12 +92,12 @@ func (h *Handler) BuildSpammer(sh throughput.SpamHelper, spamKey string, default // return nil, err // } - txsPerSecond := 1000 + txsPerSecond := 5000 // txsPerSecond, err := prompt.Int("txs to try and issue per second", consts.MaxInt) // if err != nil { // return nil, err // } - minTxsPerSecond := 500 + minTxsPerSecond := 100 // minTxsPerSecond, err := prompt.Int("minimum txs to issue per second", consts.MaxInt) // if err != nil { // return nil, err diff --git a/internal/prometheus/prometheus.go b/internal/prometheus/prometheus.go index 410edcb8dc..09b41bb113 100644 --- a/internal/prometheus/prometheus.go +++ b/internal/prometheus/prometheus.go @@ -171,62 +171,71 @@ rm -rf prometheus-2.43.0.darwin-amd64 func generateChainPanels(chainID ids.ID) []string { panels := []string{} + //FIXME: no data panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_empty_block_built[5s])", chainID)) utils.Outf("{{yellow}}empty blocks built (5s):{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_build_capped[5s])", chainID)) - utils.Outf("{{yellow}}build time capped (5s):{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_build_capped[5s])", chainID)) + // utils.Outf("{{yellow}}build time capped (5s):{{/}} %s\n", panels[len(panels)-1]) + //FIXME: no data panels = append(panels, fmt.Sprintf("avalanche_%s_blks_processing", chainID)) utils.Outf("{{yellow}}blocks processing:{{/}} %s\n", panels[len(panels)-1]) + //FIXME: no data panels = append(panels, fmt.Sprintf("increase(avalanche_%s_blks_accepted_count[5s])/5", chainID)) utils.Outf("{{yellow}}blocks accepted per second:{{/}} %s\n", panels[len(panels)-1]) + //FIXME: no data panels = append(panels, fmt.Sprintf("increase(avalanche_%s_blks_rejected_count[5s])/5", chainID)) utils.Outf("{{yellow}}blocks rejected per second:{{/}} %s\n", panels[len(panels)-1]) + //FIXME: no data panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_vm_deleted_blocks[5s])/5", chainID)) utils.Outf("{{yellow}}blocks deleted per second:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_bandwidth_price", chainID)) - utils.Outf("{{yellow}}bandwidth unit price:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_bandwidth_price", chainID)) + // utils.Outf("{{yellow}}bandwidth unit price:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_compute_price", chainID)) - utils.Outf("{{yellow}}compute unit price:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_compute_price", chainID)) + // utils.Outf("{{yellow}}compute unit price:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_storage_read_price", chainID)) - utils.Outf("{{yellow}}storage read unit price:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_storage_read_price", chainID)) + // utils.Outf("{{yellow}}storage read unit price:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_storage_create_price", chainID)) - utils.Outf("{{yellow}}storage create unit price:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_storage_create_price", chainID)) + // utils.Outf("{{yellow}}storage create unit price:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_storage_modify_price", chainID)) - utils.Outf("{{yellow}}storage modify unit price:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_storage_modify_price", chainID)) + // utils.Outf("{{yellow}}storage modify unit price:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_vm_txs_submitted[5s])/5", chainID)) - utils.Outf("{{yellow}}transactions submitted per second:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_vm_txs_submitted[5s])/5", chainID)) + // utils.Outf("{{yellow}}transactions submitted per second:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_vm_txs_gossiped[5s])/5", chainID)) - utils.Outf("{{yellow}}transactions gossiped per second:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_vm_txs_gossiped[5s])/5", chainID)) + // utils.Outf("{{yellow}}transactions gossiped per second:{{/}} %s\n", panels[len(panels)-1]) + //FIXME: no data panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_vm_txs_received[5s])/5", chainID)) utils.Outf("{{yellow}}transactions received per second:{{/}} %s\n", panels[len(panels)-1]) + //FIXME: no data panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_vm_seen_txs_received[5s])/5", chainID)) utils.Outf("{{yellow}}seen transactions received per second:{{/}} %s\n", panels[len(panels)-1]) + //FIXME: no data panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_vm_txs_verified[5s])/5", chainID)) utils.Outf("{{yellow}}transactions verified per second:{{/}} %s\n", panels[len(panels)-1]) + //FIXME: no data panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_vm_txs_accepted[5s])/5", chainID)) utils.Outf("{{yellow}}transactions accepted per second:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_state_operations[5s])/5", chainID)) - utils.Outf("{{yellow}}state operations per second:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_state_operations[5s])/5", chainID)) + // utils.Outf("{{yellow}}state operations per second:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_state_changes[5s])/5", chainID)) - utils.Outf("{{yellow}}state changes per second:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_state_changes[5s])/5", chainID)) + // utils.Outf("{{yellow}}state changes per second:{{/}} %s\n", panels[len(panels)-1]) panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_root_calculated_sum[5s])/1000000/5", chainID)) utils.Outf("{{yellow}}root calcuation (ms/s):{{/}} %s\n", panels[len(panels)-1]) diff --git a/vm/metrics.go b/vm/metrics.go index 7a9e38d19f..2839568c02 100644 --- a/vm/metrics.go +++ b/vm/metrics.go @@ -4,6 +4,7 @@ package vm import ( + "github.com/ava-labs/avalanchego/utils/metric" "github.com/ava-labs/avalanchego/utils/wrappers" "github.com/prometheus/client_golang/prometheus" @@ -43,82 +44,61 @@ type Metrics struct { storageReadPrice prometheus.Gauge storageAllocatePrice prometheus.Gauge storageWritePrice prometheus.Gauge - blockBuild prometheus.Summary - blockParse prometheus.Histogram - blockVerify prometheus.Histogram - blockAccept prometheus.Histogram - blockProcess prometheus.Histogram + blockBuild metric.Averager + blockParse metric.Averager + blockVerify metric.Averager + blockAccept metric.Averager + blockProcess metric.Averager executorBuildRecorder executor.Metrics executorVerifyRecorder executor.Metrics } -// blockBuckets defines the histogram buckets for block-related metrics. -// The values are in nanoseconds. -var blockBuckets = []float64{ - 10_000, // 10 microseconds - 25_000, // 25 microseconds - 50_000, // 50 microseconds - 100_000, // 100 microseconds - 250_000, // 250 microseconds - 500_000, // 500 microseconds - 1_000_000, // 1 millisecond - 2_500_000, // 2.5 milliseconds - 5_000_000, // 5 milliseconds - 10_000_000, // 10 milliseconds - 25_000_000, // 25 milliseconds - 50_000_000, // 50 milliseconds - 100_000_000, // 100 milliseconds - 250_000_000, // 250 milliseconds - 500_000_000, // 500 milliseconds - 1_000_000_000, // 1 second -} - func newMetrics() (*prometheus.Registry, *Metrics, error) { - registry := prometheus.NewRegistry() + r := prometheus.NewRegistry() - blockBuild := prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "chain", - Name: "block_build", - Help: "time spent building blocks", - Buckets: blockBuckets, - }, + blockBuild, err := metric.NewAverager( + "chain_block_build", + "time spent building blocks", + r, ) - blockParse := prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "chain", - Name: "block_parse", - Help: "time spent parsing blocks", - Buckets: blockBuckets, - }, + if err != nil { + return nil, nil, err + } + blockParse, err := metric.NewAverager( + "chain_block_parse", + "time spent parsing blocks", + r, ) - blockVerify := prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "chain", - Name: "block_verify", - Help: "time spent verifying blocks", - Buckets: blockBuckets, - }, + if err != nil { + return nil, nil, err + } + blockVerify, err := metric.NewAverager( + "chain_block_verify", + "time spent verifying blocks", + r, ) - blockAccept := prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "chain", - Name: "block_accept", - Help: "time spent accepting blocks", - Buckets: blockBuckets, - }, + if err != nil { + return nil, nil, err + } + blockAccept, err := metric.NewAverager( + "chain_block_accept", + "time spent accepting blocks", + r, ) - blockProcess := prometheus.NewHistogram( - prometheus.HistogramOpts{ - Namespace: "chain", - Name: "block_process", - Help: "time spent processing blocks", - Buckets: blockBuckets, - }, + if err != nil { + return nil, nil, err + } + blockProcess, err := metric.NewAverager( + "chain_block_process", + "time spent processing blocks", + r, ) + if err != nil { + return nil, nil, err + } - metrics := &Metrics{ + m := &Metrics{ txsSubmitted: prometheus.NewCounter(prometheus.CounterOpts{ Namespace: "vm", Name: "txs_submitted", @@ -220,35 +200,30 @@ func newMetrics() (*prometheus.Registry, *Metrics, error) { blockAccept: blockAccept, blockProcess: blockProcess, } - metrics.executorBuildRecorder = &executorMetrics{blocked: metrics.executorBuildBlocked, executable: metrics.executorBuildExecutable} - metrics.executorVerifyRecorder = &executorMetrics{blocked: metrics.executorVerifyBlocked, executable: metrics.executorVerifyExecutable} + m.executorBuildRecorder = &executorMetrics{blocked: m.executorBuildBlocked, executable: m.executorBuildExecutable} + m.executorVerifyRecorder = &executorMetrics{blocked: m.executorVerifyBlocked, executable: m.executorVerifyExecutable} errs := wrappers.Errs{} errs.Add( - registry.Register(metrics.txsSubmitted), - registry.Register(metrics.stateChanges), - registry.Register(metrics.stateOperations), - registry.Register(metrics.mempoolSize), - registry.Register(metrics.buildCapped), - registry.Register(metrics.emptyBlockBuilt), - registry.Register(metrics.clearedMempool), - registry.Register(metrics.deletedBlocks), - registry.Register(metrics.blocksFromDisk), - registry.Register(metrics.blocksHeightsFromDisk), - registry.Register(metrics.executorBuildBlocked), - registry.Register(metrics.executorBuildExecutable), - registry.Register(metrics.executorVerifyBlocked), - registry.Register(metrics.executorVerifyExecutable), - registry.Register(metrics.bandwidthPrice), - registry.Register(metrics.computePrice), - registry.Register(metrics.storageReadPrice), - registry.Register(metrics.storageAllocatePrice), - registry.Register(metrics.storageWritePrice), - registry.Register(metrics.blockBuild), - registry.Register(metrics.blockParse), - registry.Register(metrics.blockVerify), - registry.Register(metrics.blockAccept), - registry.Register(metrics.blockProcess), + r.Register(m.txsSubmitted), + r.Register(m.stateChanges), + r.Register(m.stateOperations), + r.Register(m.mempoolSize), + r.Register(m.buildCapped), + r.Register(m.emptyBlockBuilt), + r.Register(m.clearedMempool), + r.Register(m.deletedBlocks), + r.Register(m.blocksFromDisk), + r.Register(m.blocksHeightsFromDisk), + r.Register(m.executorBuildBlocked), + r.Register(m.executorBuildExecutable), + r.Register(m.executorVerifyBlocked), + r.Register(m.executorVerifyExecutable), + r.Register(m.bandwidthPrice), + r.Register(m.computePrice), + r.Register(m.storageReadPrice), + r.Register(m.storageAllocatePrice), + r.Register(m.storageWritePrice), ) - return registry, metrics, errs.Err + return r, m, errs.Err } diff --git a/x/grafana/dashboards/hypersdk-bench.json b/x/grafana/dashboards/hypersdk-bench.json index 93bea23716..928279748b 100644 --- a/x/grafana/dashboards/hypersdk-bench.json +++ b/x/grafana/dashboards/hypersdk-bench.json @@ -234,6 +234,104 @@ "transparent": true, "type": "timeseries" }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 16, + "y": 0 + }, + "id": 16, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_build_capped[5s])", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Build time capped (5s)", + "transparent": true, + "type": "timeseries" + }, { "datasource": { "type": "prometheus", @@ -331,6 +429,169 @@ "transparent": true, "type": "timeseries" }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "hidden", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 60, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 16, + "y": 6 + }, + "id": 17, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_bandwidth_price", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "bandwidth", + "range": true, + "refId": "A", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_compute_price", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "legendFormat": "compute", + "range": true, + "refId": "B", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_read_price", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "legendFormat": "storage_read", + "range": true, + "refId": "C", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_create_price", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "legendFormat": "storage_create", + "range": true, + "refId": "D", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_storage_modify_price", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "legendFormat": "storage_modify", + "range": true, + "refId": "E", + "useBackend": false + } + ], + "title": "Resource pricing", + "transparent": true, + "type": "timeseries" + }, { "datasource": { "type": "prometheus", @@ -394,7 +655,7 @@ "overrides": [] }, "gridPos": { - "h": 7, + "h": 12, "w": 16, "x": 0, "y": 12 @@ -408,7 +669,7 @@ "showLegend": true }, "tooltip": { - "mode": "single", + "mode": "multi", "sort": "none" } }, @@ -481,7 +742,316 @@ "refId": "D" } ], - "title": "Time working on block, %", + "title": "Time spent on block, %", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 16, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 12, + "w": 8, + "x": 16, + "y": 12 + }, + "id": 18, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_vm_txs_submitted[5s]) / 5", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "submitted", + "range": true, + "refId": "A", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_gossiper_gossiper_txs_gossiped[5s]) / 5", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "legendFormat": "gossiped", + "range": true, + "refId": "B", + "useBackend": false + } + ], + "title": "Transactions per second", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 24 + }, + "id": 15, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "builder", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_state_operations[5s])/5", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "State operations per second", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 8, + "y": 24 + }, + "id": 19, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "code", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_state_changes[5s])/5", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "State changes per second", "transparent": true, "type": "timeseries" } From 8541bb7eee6a5495a95f934af7d545e15297af95 Mon Sep 17 00:00:00 2001 From: Containerman17 <8990432+containerman17@users.noreply.github.com> Date: Fri, 29 Nov 2024 07:02:38 +0000 Subject: [PATCH 09/11] restore vm.go --- vm/vm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vm/vm.go b/vm/vm.go index 8650cd0d32..8a8dfb54b9 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -938,7 +938,7 @@ func (vm *VM) ParseBlock(ctx context.Context, source []byte) (snowman.Block, err func (vm *VM) BuildBlock(ctx context.Context) (snowman.Block, error) { start := time.Now() defer func() { - vm.metrics.blockBuild.Observe(float64(time.Since(start).Nanoseconds())) + vm.metrics.blockBuild.Observe(float64(time.Since(start))) }() ctx, span := vm.tracer.Start(ctx, "VM.BuildBlock") From a27cf42c10e20eb769840bbcd131f8ca7c901f0b Mon Sep 17 00:00:00 2001 From: Containerman17 <8990432+containerman17@users.noreply.github.com> Date: Fri, 29 Nov 2024 07:58:57 +0000 Subject: [PATCH 10/11] cleared mempool --- internal/prometheus/prometheus.go | 21 +- x/grafana/dashboards/hypersdk-bench.json | 259 ++++++++++++++--------- 2 files changed, 166 insertions(+), 114 deletions(-) diff --git a/internal/prometheus/prometheus.go b/internal/prometheus/prometheus.go index 09b41bb113..9c6d9271ce 100644 --- a/internal/prometheus/prometheus.go +++ b/internal/prometheus/prometheus.go @@ -175,8 +175,9 @@ func generateChainPanels(chainID ids.ID) []string { panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_empty_block_built[5s])", chainID)) utils.Outf("{{yellow}}empty blocks built (5s):{{/}} %s\n", panels[len(panels)-1]) - // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_build_capped[5s])", chainID)) - // utils.Outf("{{yellow}}build time capped (5s):{{/}} %s\n", panels[len(panels)-1]) + //FIXME: no data + panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_build_capped[5s])", chainID)) + utils.Outf("{{yellow}}build time capped (5s):{{/}} %s\n", panels[len(panels)-1]) //FIXME: no data panels = append(panels, fmt.Sprintf("avalanche_%s_blks_processing", chainID)) @@ -237,17 +238,17 @@ func generateChainPanels(chainID ids.ID) []string { // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_state_changes[5s])/5", chainID)) // utils.Outf("{{yellow}}state changes per second:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_root_calculated_sum[5s])/1000000/5", chainID)) - utils.Outf("{{yellow}}root calcuation (ms/s):{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_root_calculated_sum[5s])/1000000/5", chainID)) + // utils.Outf("{{yellow}}root calcuation (ms/s):{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_wait_root_sum[5s])/1000000/5", chainID)) - utils.Outf("{{yellow}}wait root calculation (ms/s):{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_wait_root_sum[5s])/1000000/5", chainID)) + // utils.Outf("{{yellow}}wait root calculation (ms/s):{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_wait_signatures_sum[5s])/1000000/5", chainID)) - utils.Outf("{{yellow}}signature verification wait (ms/s):{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_wait_signatures_sum[5s])/1000000/5", chainID)) + // utils.Outf("{{yellow}}signature verification wait (ms/s):{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_cleared_mempool[5s])/5", chainID)) - utils.Outf("{{yellow}}cleared mempool per second:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_cleared_mempool[5s])/5", chainID)) + // utils.Outf("{{yellow}}cleared mempool per second:{{/}} %s\n", panels[len(panels)-1]) // panels = append(panels, fmt.Sprintf("avalanche_%s_vm_hypersdk_chain_mempool_size", chainID)) // utils.Outf("{{yellow}}mempool size:{{/}} %s\n", panels[len(panels)-1]) diff --git a/x/grafana/dashboards/hypersdk-bench.json b/x/grafana/dashboards/hypersdk-bench.json index 928279748b..493713be70 100644 --- a/x/grafana/dashboards/hypersdk-bench.json +++ b/x/grafana/dashboards/hypersdk-bench.json @@ -262,13 +262,13 @@ "viz": false }, "insertNulls": false, - "lineInterpolation": "linear", + "lineInterpolation": "smooth", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", + "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", @@ -319,7 +319,7 @@ { "disableTextWrap": false, "editorMode": "builder", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_build_capped[5s])", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_cleared_mempool[5s])", "fullMetaSearch": false, "includeNullMetadata": true, "legendFormat": "__auto", @@ -328,7 +328,7 @@ "useBackend": false } ], - "title": "Build time capped (5s)", + "title": "Cleared mempool per second (5s)", "transparent": true, "type": "timeseries" }, @@ -350,7 +350,7 @@ "axisPlacement": "auto", "barAlignment": 0, "barWidthFactor": 0.6, - "drawStyle": "line", + "drawStyle": "bars", "fillOpacity": 37, "gradientMode": "opacity", "hideFrom": { @@ -419,7 +419,7 @@ "expr": "avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_mempool_size", "fullMetaSearch": false, "includeNullMetadata": true, - "legendFormat": "__auto", + "legendFormat": "mempool_size", "range": true, "refId": "A", "useBackend": false @@ -494,7 +494,7 @@ "gridPos": { "h": 6, "w": 8, - "x": 16, + "x": 8, "y": 6 }, "id": 17, @@ -610,9 +610,9 @@ "axisPlacement": "auto", "barAlignment": 0, "barWidthFactor": 0.6, - "drawStyle": "bars", - "fillOpacity": 26, - "gradientMode": "hue", + "drawStyle": "line", + "fillOpacity": 16, + "gradientMode": "opacity", "hideFrom": { "legend": false, "tooltip": false, @@ -625,18 +625,17 @@ "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", + "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", - "mode": "normal" + "mode": "none" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], - "min": 0, "thresholds": { "mode": "absolute", "steps": [ @@ -649,18 +648,17 @@ "value": 80 } ] - }, - "unit": "percent" + } }, "overrides": [] }, "gridPos": { "h": 12, - "w": 16, - "x": 0, - "y": 12 + "w": 8, + "x": 16, + "y": 6 }, - "id": 11, + "id": 18, "options": { "legend": { "calcs": [], @@ -677,16 +675,13 @@ "targets": [ { "disableTextWrap": false, - "editorMode": "code", - "exemplar": false, - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_build_sum[15s]) / 1000000 / 15 / 10", - "format": "time_series", + "editorMode": "builder", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_vm_txs_submitted[5s]) / 5", "fullMetaSearch": false, - "includeNullMetadata": false, - "instant": false, - "legendFormat": "build", + "includeNullMetadata": true, + "legendFormat": "submitted", "range": true, - "refId": "One", + "refId": "A", "useBackend": false }, { @@ -694,55 +689,19 @@ "type": "prometheus", "uid": "PBFA97CFB590B2093" }, - "editorMode": "code", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_parse_sum[15s]) / 1000000 / 15 / 10", - "hide": false, - "instant": false, - "legendFormat": "parse", - "range": true, - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "editorMode": "code", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_verify_sum[15s]) / 1000000 / 15 / 10", - "hide": false, - "instant": false, - "legendFormat": "verify", - "range": true, - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "editorMode": "code", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_accept_sum[15s]) / 1000000 / 15 / 10", - "hide": false, - "instant": false, - "legendFormat": "accept", - "range": true, - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "PBFA97CFB590B2093" - }, - "editorMode": "code", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_process_sum[15s]) / 1000000 / 15 / 10", + "disableTextWrap": false, + "editorMode": "builder", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_gossiper_gossiper_txs_gossiped[5s]) / 5", + "fullMetaSearch": false, "hide": false, - "instant": false, - "legendFormat": "process", + "includeNullMetadata": true, + "legendFormat": "gossiped", "range": true, - "refId": "D" + "refId": "B", + "useBackend": false } ], - "title": "Time spent on block, %", + "title": "Transactions per second", "transparent": true, "type": "timeseries" }, @@ -764,9 +723,9 @@ "axisPlacement": "auto", "barAlignment": 0, "barWidthFactor": 0.6, - "drawStyle": "line", - "fillOpacity": 16, - "gradientMode": "opacity", + "drawStyle": "bars", + "fillOpacity": 54, + "gradientMode": "hue", "hideFrom": { "legend": false, "tooltip": false, @@ -779,17 +738,18 @@ "scaleDistribution": { "type": "linear" }, - "showPoints": "never", + "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", - "mode": "none" + "mode": "normal" }, "thresholdsStyle": { "mode": "off" } }, "mappings": [], + "min": 0, "thresholds": { "mode": "absolute", "steps": [ @@ -802,17 +762,18 @@ "value": 80 } ] - } + }, + "unit": "ms" }, "overrides": [] }, "gridPos": { "h": 12, - "w": 8, - "x": 16, + "w": 16, + "x": 0, "y": 12 }, - "id": 18, + "id": 11, "options": { "legend": { "calcs": [], @@ -822,20 +783,92 @@ }, "tooltip": { "mode": "multi", - "sort": "none" + "sort": "desc" } }, "pluginVersion": "11.3.1", "targets": [ { + "disableTextWrap": false, + "editorMode": "code", + "exemplar": false, + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_build_sum[15s]) / 1000000 / 15 ", + "format": "time_series", + "fullMetaSearch": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "block_build", + "range": true, + "refId": "One", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "editorMode": "code", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_parse_sum[15s]) / 1000000 / 15", + "hide": false, + "instant": false, + "legendFormat": "block_parse", + "range": true, + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "editorMode": "code", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_verify_sum[15s]) / 1000000 / 15", + "hide": false, + "instant": false, + "legendFormat": "block_verify", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "editorMode": "code", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_accept_sum[15s]) / 1000000 / 15", + "hide": false, + "instant": false, + "legendFormat": "block_accept", + "range": true, + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "editorMode": "code", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_chain_block_process_sum[15s]) / 1000000 / 15", + "hide": false, + "instant": false, + "legendFormat": "block_process", + "range": true, + "refId": "D" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, "disableTextWrap": false, "editorMode": "builder", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_hypersdk_vm_txs_submitted[5s]) / 5", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_root_calculated_sum[15s]) / 1000000 / 15", "fullMetaSearch": false, + "hide": false, "includeNullMetadata": true, - "legendFormat": "submitted", + "instant": false, + "legendFormat": "root_calculated", "range": true, - "refId": "A", + "refId": "E", "useBackend": false }, { @@ -845,17 +878,35 @@ }, "disableTextWrap": false, "editorMode": "builder", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_gossiper_gossiper_txs_gossiped[5s]) / 5", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_wait_root_sum[15s]) / 1000000 / 15", "fullMetaSearch": false, "hide": false, "includeNullMetadata": true, - "legendFormat": "gossiped", + "instant": false, + "legendFormat": "wait_root", "range": true, - "refId": "B", + "refId": "F", + "useBackend": false + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "disableTextWrap": false, + "editorMode": "builder", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_wait_signatures_sum[15s]) / 1000000 / 15", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "wait_signatures", + "range": true, + "refId": "G", "useBackend": false } ], - "title": "Transactions per second", + "title": "Time spent on block, %", "transparent": true, "type": "timeseries" }, @@ -887,13 +938,13 @@ "viz": false }, "insertNulls": false, - "lineInterpolation": "linear", + "lineInterpolation": "smooth", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", + "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", @@ -923,10 +974,10 @@ "gridPos": { "h": 6, "w": 8, - "x": 0, - "y": 24 + "x": 16, + "y": 18 }, - "id": 15, + "id": 19, "options": { "legend": { "calcs": [], @@ -943,8 +994,8 @@ "targets": [ { "disableTextWrap": false, - "editorMode": "builder", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_state_operations[5s])/5", + "editorMode": "code", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_state_changes[5s])/5", "fullMetaSearch": false, "includeNullMetadata": true, "legendFormat": "__auto", @@ -953,7 +1004,7 @@ "useBackend": false } ], - "title": "State operations per second", + "title": "State changes per second", "transparent": true, "type": "timeseries" }, @@ -985,13 +1036,13 @@ "viz": false }, "insertNulls": false, - "lineInterpolation": "linear", + "lineInterpolation": "smooth", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, - "showPoints": "auto", + "showPoints": "never", "spanNulls": false, "stacking": { "group": "A", @@ -1021,10 +1072,10 @@ "gridPos": { "h": 6, "w": 8, - "x": 8, + "x": 16, "y": 24 }, - "id": 19, + "id": 15, "options": { "legend": { "calcs": [], @@ -1041,8 +1092,8 @@ "targets": [ { "disableTextWrap": false, - "editorMode": "code", - "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_state_changes[5s])/5", + "editorMode": "builder", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_state_operations[5s])/5", "fullMetaSearch": false, "includeNullMetadata": true, "legendFormat": "__auto", @@ -1051,7 +1102,7 @@ "useBackend": false } ], - "title": "State changes per second", + "title": "State operations per second", "transparent": true, "type": "timeseries" } From 166d6650d2c89ffbeb8fac020f088de80d716d67 Mon Sep 17 00:00:00 2001 From: Containerman17 <8990432+containerman17@users.noreply.github.com> Date: Fri, 29 Nov 2024 08:22:23 +0000 Subject: [PATCH 11/11] styling --- internal/prometheus/prometheus.go | 11 +- x/grafana/dashboards/hypersdk-bench.json | 205 ++++++++++++++++++++++- 2 files changed, 208 insertions(+), 8 deletions(-) diff --git a/internal/prometheus/prometheus.go b/internal/prometheus/prometheus.go index 9c6d9271ce..44b7c6f30b 100644 --- a/internal/prometheus/prometheus.go +++ b/internal/prometheus/prometheus.go @@ -262,6 +262,7 @@ func generateChainPanels(chainID ids.ID) []string { // panels = append(panels, fmt.Sprintf("avalanche_%s_vm_go_memstats_alloc_bytes", chainID)) // utils.Outf("{{yellow}}memory (morpheusvm) usage:{{/}} %s\n", panels[len(panels)-1]) + //FIXME: no data panels = append(panels, fmt.Sprintf("increase(avalanche_%s_handler_chits_sum[5s])/1000000/5 + increase(avalanche_%s_handler_notify_sum[5s])/1000000/5 + increase(avalanche_%s_handler_get_sum[5s])/1000000/5 + increase(avalanche_%s_handler_push_query_sum[5s])/1000000/5 + increase(avalanche_%s_handler_put_sum[5s])/1000000/5 + increase(avalanche_%s_handler_pull_query_sum[5s])/1000000/5 + increase(avalanche_%s_handler_query_failed_sum[5s])/1000000/5", chainID, chainID, chainID, chainID, chainID, chainID, chainID)) utils.Outf("{{yellow}}consensus engine processing (ms/s):{{/}} %s\n", panels[len(panels)-1]) @@ -301,17 +302,19 @@ func generateChainPanels(chainID ids.ID) []string { // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_block_process_sum[5s])/1000000/5", chainID)) // utils.Outf("{{yellow}}block process [async] (ms/s):{{/}} %s\n", panels[len(panels)-1]) + //FIXME: no data panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_state_merkleDB_intermediate_node_cache_hit[5s])/(increase(avalanche_%s_vm_state_merkleDB_intermediate_node_cache_miss[5s]) + increase(avalanche_%s_vm_state_merkleDB_intermediate_node_cache_hit[5s]))", chainID, chainID, chainID)) utils.Outf("{{yellow}}intermediate node cache hit rate:{{/}} %s\n", panels[len(panels)-1]) + //FIXME: no data panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_state_merkleDB_value_node_cache_hit[5s])/(increase(avalanche_%s_vm_state_merkleDB_value_node_cache_miss[5s]) + increase(avalanche_%s_vm_state_merkleDB_value_node_cache_hit[5s]))", chainID, chainID, chainID)) utils.Outf("{{yellow}}value node cache hit rate:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_executor_build_executable[5s]) / (increase(avalanche_%s_vm_hypersdk_chain_executor_build_blocked[5s]) + increase(avalanche_%s_vm_hypersdk_chain_executor_build_executable[5s]))", chainID, chainID, chainID)) - utils.Outf("{{yellow}}build txs executable (%%) per second:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_executor_build_executable[5s]) / (increase(avalanche_%s_vm_hypersdk_chain_executor_build_blocked[5s]) + increase(avalanche_%s_vm_hypersdk_chain_executor_build_executable[5s]))", chainID, chainID, chainID)) + // utils.Outf("{{yellow}}build txs executable (%%) per second:{{/}} %s\n", panels[len(panels)-1]) - panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_hypersdk_chain_executor_verify_executable[5s]) / (increase(avalanche_%s_vm_hypersdk_chain_executor_verify_blocked[5s]) + increase(avalanche_%s_vm_hypersdk_chain_executor_verify_executable[5s]))", chainID, chainID, chainID)) - utils.Outf("{{yellow}}verify txs executable (%%) per second:{{/}} %s\n", panels[len(panels)-1]) + // panels = append(panels, fmt.Sprintf("increase(avalanche_%s_vm_chain_chain_executor_verify_executable[5s]) / (increase(avalanche_%s_vm_chain_chain_executor_verify_blocked[5s]) + increase(avalanche_%s_vm_chain_chain_executor_verify_executable[5s]))", chainID, chainID, chainID)) + // utils.Outf("{{yellow}}verify txs executable (%%) per second:{{/}} %s\n", panels[len(panels)-1]) return panels } diff --git a/x/grafana/dashboards/hypersdk-bench.json b/x/grafana/dashboards/hypersdk-bench.json index 493713be70..a6432f0e3b 100644 --- a/x/grafana/dashboards/hypersdk-bench.json +++ b/x/grafana/dashboards/hypersdk-bench.json @@ -193,7 +193,8 @@ "value": 80 } ] - } + }, + "unit": "percentunit" }, "overrides": [] }, @@ -653,7 +654,7 @@ "overrides": [] }, "gridPos": { - "h": 12, + "h": 6, "w": 8, "x": 16, "y": 6 @@ -975,7 +976,7 @@ "h": 6, "w": 8, "x": 16, - "y": 18 + "y": 12 }, "id": 19, "options": { @@ -1073,7 +1074,7 @@ "h": 6, "w": 8, "x": 16, - "y": 24 + "y": 18 }, "id": 15, "options": { @@ -1105,6 +1106,202 @@ "title": "State operations per second", "transparent": true, "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 0, + "y": 24 + }, + "id": 20, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "code", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_executor_build_executable[5s]) / (increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_executor_build_blocked[5s]) + increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_executor_build_executable[5s]))", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Build txs executable (%%) per second", + "transparent": true, + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "PBFA97CFB590B2093" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 8, + "x": 8, + "y": 24 + }, + "id": 21, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "11.3.1", + "targets": [ + { + "disableTextWrap": false, + "editorMode": "code", + "expr": "increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_executor_verify_executable[5s]) / (increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_executor_verify_blocked[5s]) + increase(avalanche_qCNyZHrs3rZX458wPJXPJJypPf6w423A84jnfbdP2TPEmEE9u_vm_chain_chain_executor_verify_executable[5s]))", + "fullMetaSearch": false, + "includeNullMetadata": true, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Verify txs executable (%%) per second", + "transparent": true, + "type": "timeseries" } ], "preload": false,