-
Notifications
You must be signed in to change notification settings - Fork 124
Run perf tests
Before we start, we create docker network for agent and prometheus+grafana so they can access each other based on their container names. This makes the cofiguration files simpler and we don't need to lookup IP addresses.
# create docker network
docker network create --attachable perftest
# inspect created network
docker inspect perftest
Now we can run containers with --network perftest
to start them in network we created instead of default docker bridge.
How to run prometheus:
Guide from Prometheus docs https://prometheus.io/docs/prometheus/latest/installation/ and Docker docs: https://docs.docker.com/config/thirdparty/prometheus/
# replace `$HOME/prometheus.yml` point to the config below
docker run --name prometheus -p 9090:9090 \
-v $HOME/prometheus.yml:/etc/prometheus/prometheus.yml \
--network perftest \
prom/prometheus
Here is sample config file for Prometheus. It collects the metrics exported by VPP Agent:
prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'agent'
scrape_interval: 1s
static_configs:
- targets: ['agent1:9191']
# this one is only for perf testing
- job_name: 'grpc-client'
static_configs:
- targets: ['agent1:9194']
# this one is optional, collects metrics from grafana
- job_name: 'grafana'
static_configs:
- targets: ['grafana:3000']
How to run grafana:
Guide from Grafana docs: https://grafana.com/docs/installation/docker/
# without persistence
docker run --name grafana -p 3000:3000 --network perftest grafana/grafana
# to persist data in volumes
docker run --name grafana \
--network perftest \
--publish 3000:3000 \
--volume /var/lib/grafana:/var/lib/grafana \
--env "GF_SECURITY_ADMIN_PASSWORD=secret" \
grafana/grafana
And here is exported dashboard for Grafana. It can be imported using Grafana GUI.
grafana-dashboard.json
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
},
{
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(255, 96, 96, 1)",
"limit": 100,
"name": "agent_version",
"showIn": 0,
"tags": [],
"type": "tags"
}
]
},
"description": "dashboard for VPP Agent metrics",
"editable": true,
"gnetId": null,
"graphTooltip": 1,
"id": 9,
"iteration": 1582723248842,
"links": [],
"panels": [
{
"aliasColors": {
"ligato_build_info{build_date=\"Mon Feb 24 13:52:28 UTC 2020\",built_by=\"[email protected] (go1.13.7 linux/amd64)\",instance=\"agent1:9191\",job=\"agent\",revision=\"66f83a4@fixes\",version=\"v3.1.0-alpha-15-g66f83a4f4-dirty\"}": "light-green",
"vppagent_perf_test_client_settings{instance=\"agent1:9094\",job=\"grpc-client\",num_clients=\"1\",num_per_req=\"1\",num_tunnels=\"40000\",start_time=\"Feb 24 15:57:58\"}": "light-blue"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"decimals": null,
"fill": 2,
"fillGradient": 0,
"gridPos": {
"h": 7,
"w": 12,
"x": 0,
"y": 0
},
"hiddenSeries": false,
"id": 2,
"interval": "",
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"hideEmpty": false,
"hideZero": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": true,
"steppedLine": true,
"targets": [
{
"expr": "up{instance=\"$agent\"}",
"format": "time_series",
"hide": true,
"instant": false,
"intervalFactor": 1,
"legendFormat": "up",
"refId": "A"
},
{
"expr": "ligato_build_info{instance=\"$agent\"}",
"format": "time_series",
"instant": false,
"intervalFactor": 1,
"legendFormat": "",
"refId": "B"
},
{
"expr": "ligato_perf_test_client_settings",
"refId": "C"
},
{
"expr": "vppagent_perf_test_client_settings",
"legendFormat": "",
"refId": "D"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Agent state",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"transparent": true,
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"decimals": 0,
"format": "none",
"label": "",
"logBase": 1,
"max": null,
"min": "0",
"show": false
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"cacheTimeout": null,
"columns": [
{
"text": "Max",
"value": "max"
}
],
"datasource": null,
"fontSize": "90%",
"gridPos": {
"h": 7,
"w": 6,
"x": 12,
"y": 0
},
"id": 23,
"links": [],
"options": {},
"pageSize": null,
"pluginVersion": "6.6.1",
"showHeader": true,
"sort": {
"col": 1,
"desc": true
},
"styles": [
{
"alias": "Time",
"align": "",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"link": false,
"pattern": "Metric",
"type": "string"
},
{
"alias": "Total",
"align": "center",
"colorMode": null,
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": null,
"mappingType": 1,
"pattern": "Max",
"thresholds": [],
"type": "number",
"unit": "short"
}
],
"targets": [
{
"expr": "sum(grpc_server_handled_total{job=\"agent\"}) by (grpc_service, grpc_method)",
"format": "time_series",
"instant": false,
"intervalFactor": 1,
"legendFormat": "{{grpc_service}} / {{grpc_method}} ",
"refId": "B"
},
{
"expr": "sum(grpc_client_handled_total{}) by (grpc_service, grpc_method)",
"format": "time_series",
"hide": true,
"instant": false,
"intervalFactor": 1,
"legendFormat": "",
"refId": "A"
}
],
"timeFrom": null,
"timeShift": null,
"title": "grpc requests",
"transform": "timeseries_aggregations",
"type": "table"
},
{
"cacheTimeout": null,
"columns": [
{
"text": "Max",
"value": "max"
}
],
"datasource": null,
"fontSize": "90%",
"gridPos": {
"h": 7,
"w": 6,
"x": 18,
"y": 0
},
"id": 24,
"links": [],
"options": {},
"pageSize": null,
"pluginVersion": "6.6.1",
"showHeader": true,
"sort": {
"col": 1,
"desc": true
},
"styles": [
{
"alias": "VPP binapi message",
"align": "",
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"link": false,
"pattern": "Metric",
"preserveFormat": false,
"type": "string"
},
{
"alias": "Total",
"align": "left",
"colorMode": null,
"colors": [
"rgba(245, 54, 54, 0.9)",
"rgba(237, 129, 40, 0.89)",
"rgba(50, 172, 45, 0.97)"
],
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"decimals": null,
"mappingType": 1,
"pattern": "Max",
"rangeMaps": [
{
"from": "sent",
"text": "x",
"to": "sent"
}
],
"sanitize": false,
"thresholds": [
""
],
"type": "number",
"unit": "short"
}
],
"targets": [
{
"expr": "sum(ligato_govppmux_requests_sent{job=\"agent\"}) by (message)",
"format": "time_series",
"hide": false,
"instant": false,
"intervalFactor": 1,
"legendFormat": "{{grpc_method}} ({{grpc_service}})",
"refId": "B"
},
{
"expr": "sum(grpc_client_handled_total{}) by (grpc_service, grpc_method)",
"format": "time_series",
"hide": true,
"instant": false,
"intervalFactor": 1,
"legendFormat": "",
"refId": "A"
},
{
"expr": "sum(ligato_govppmux_requests_total{job=\"agent\"}) by (message)",
"format": "time_series",
"hide": false,
"instant": false,
"intervalFactor": 1,
"legendFormat": "requests SENT - {{message}}",
"refId": "C"
},
{
"expr": "sum(ligato_govppmux_replies_received_total{job=\"agent\"}) by (message)",
"format": "time_series",
"hide": false,
"instant": false,
"intervalFactor": 1,
"legendFormat": "replies RECEIVED - {{message}}",
"refId": "D"
}
],
"timeFrom": null,
"timeShift": null,
"title": "govpp requests",
"transform": "timeseries_aggregations",
"type": "table"
},
{
"cacheTimeout": null,
"colorBackground": false,
"colorPostfix": false,
"colorPrefix": false,
"colorValue": true,
"colors": [
"#d44a3a",
"rgb(145, 28, 29)",
"#299c46"
],
"datasource": null,
"decimals": null,
"format": "none",
"gauge": {
"maxValue": 100,
"minValue": 0,
"show": false,
"thresholdLabels": false,
"thresholdMarkers": true
},
"gridPos": {
"h": 7,
"w": 3,
"x": 0,
"y": 7
},
"id": 17,
"interval": null,
"links": [],
"mappingType": 1,
"mappingTypes": [
{
"name": "value to text",
"value": 1
},
{
"name": "range to text",
"value": 2
}
],
"maxDataPoints": 100,
"nullPointMode": "connected",
"nullText": null,
"options": {},
"postfix": "",
"postfixFontSize": "50%",
"prefix": "state",
"prefixFontSize": "50%",
"rangeMaps": [
{
"from": "",
"text": "",
"to": ""
}
],
"sparkline": {
"fillColor": "rgba(31, 118, 189, 0.18)",
"full": true,
"lineColor": "rgb(31, 120, 193)",
"show": true,
"ymax": 1,
"ymin": 0
},
"tableColumn": "",
"targets": [
{
"expr": "ligato_build_info{instance=\"$agent\"}",
"format": "time_series",
"hide": true,
"instant": false,
"legendFormat": "",
"refId": "A"
},
{
"expr": "up{instance=\"$agent\"}",
"format": "time_series",
"hide": false,
"refId": "B"
}
],
"thresholds": "0,1",
"timeFrom": null,
"timeShift": null,
"title": "Agent state",
"transparent": true,
"type": "singlestat",
"valueFontSize": "80%",
"valueMaps": [
{
"op": "=",
"text": "?",
"value": "null"
},
{
"op": "=",
"text": "DOWN",
"value": "0"
},
{
"op": "=",
"text": "UP",
"value": "1"
}
],
"valueName": "current"
},
{
"aliasColors": {
"alloc bytes": "semi-dark-orange",
"goroutines": "dark-blue"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 0,
"fillGradient": 0,
"gridPos": {
"h": 7,
"w": 9,
"x": 3,
"y": 7
},
"hiddenSeries": false,
"id": 9,
"legend": {
"alignAsTable": true,
"avg": false,
"current": false,
"hideEmpty": true,
"hideZero": true,
"max": true,
"min": false,
"rightSide": true,
"show": true,
"sort": null,
"sortDesc": null,
"total": false,
"values": true
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 0.5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
{
"alias": "/bytes/",
"fill": 1,
"linewidth": 1,
"steppedLine": true,
"yaxis": 2
}
],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "go_goroutines{instance=\"$agent\"}",
"legendFormat": "goroutines",
"refId": "A"
},
{
"expr": "go_threads{instance=\"$agent\"}",
"format": "time_series",
"legendFormat": "threads",
"refId": "C"
},
{
"expr": "rate(go_memstats_alloc_bytes_total{instance=\"$agent\"}[$period])",
"format": "time_series",
"hide": false,
"legendFormat": "mem alloc bytes",
"refId": "D"
},
{
"expr": "go_memstats_heap_inuse_bytes{instance=\"$agent\"}",
"format": "time_series",
"hide": true,
"legendFormat": "heap in use bytes",
"refId": "E"
},
{
"expr": "go_memstats_alloc_bytes{instance=\"$agent\"}",
"format": "time_series",
"hide": false,
"legendFormat": "alloc bytes",
"refId": "B"
},
{
"expr": "go_memstats_heap_sys_bytes{instance=\"$agent\"}",
"format": "time_series",
"hide": true,
"legendFormat": "heap_sys bytes",
"refId": "F"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Go runtime",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "decbytes",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {
"le": "super-light-red",
"le 0.025": "super-light-yellow",
"under 0.002s": "light-green",
"{grpc_method=\"Update\"}": "dark-green",
"{grpc_service=\"ligato.configurator.ConfiguratorService\"}": "semi-dark-orange",
"{le=\"0.025\"}": "super-light-yellow"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 3,
"fillGradient": 0,
"gridPos": {
"h": 7,
"w": 5,
"x": 12,
"y": 7
},
"hiddenSeries": false,
"id": 21,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"hideEmpty": false,
"hideZero": true,
"max": true,
"min": false,
"rightSide": false,
"show": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"maxPerRow": 2,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"repeat": null,
"repeatDirection": "h",
"seriesOverrides": [
{
"alias": "/le/",
"fill": 0,
"fillGradient": 0,
"steppedLine": false,
"yaxis": 2
}
],
"spaceLength": 10,
"stack": false,
"steppedLine": true,
"targets": [
{
"expr": "100.0 - (\nsum(rate(grpc_server_handling_seconds_bucket{job=\"agent\",grpc_type=\"unary\",le=\"$grpcreqdur\"}[$period])) by (grpc_service)\n / \nsum(rate(grpc_server_handling_seconds_count{job=\"agent\",grpc_type=\"unary\"}[$period])) by (grpc_service)\n) * 100.0",
"legendFormat": "",
"refId": "A"
},
{
"expr": "sum(rate(grpc_server_handling_seconds_bucket{job=\"agent\",grpc_type=\"unary\",le=\"$grpcreqdur\"}[$period])) by (le)",
"hide": true,
"legendFormat": "",
"refId": "B"
},
{
"expr": "(1.0 - (\nsum(rate(grpc_server_handling_seconds_bucket{job=\"agent\",grpc_type=\"unary\",le=\"$grpcreqdur\"}[$period])) by (job)\n / \nsum(rate(grpc_server_handling_seconds_count{job=\"agent\",grpc_type=\"unary\"}[$period])) by (job)\n)) * sum(rate(grpc_server_handling_seconds_count{job=\"agent\",grpc_type=\"unary\"}[$period])) by (job)",
"hide": false,
"legendFormat": "le",
"refId": "C"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "grpc - req duration > X sec",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "percent",
"label": "",
"logBase": 1,
"max": null,
"min": "0",
"show": true
},
{
"decimals": null,
"format": "short",
"label": "",
"logBase": 1,
"max": null,
"min": "0",
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {
"histogram_quantile(0.5, sum(rate(grpc_server_handling_seconds_bucket[5s])) by (le))": "super-light-green",
"histogram_quantile(0.9, sum(rate(grpc_server_handling_seconds_bucket[5s])) by (le))": "light-orange",
"p0.5": "light-green",
"p0.9": "light-yellow",
"p0.95": "light-orange",
"p0.99": "light-red",
"sum(rate(grpc_server_handled_total[5s]))": "super-light-green"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 7,
"w": 7,
"x": 17,
"y": 7
},
"hiddenSeries": false,
"id": 15,
"interval": "",
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"hideEmpty": false,
"hideZero": false,
"max": true,
"min": false,
"rightSide": false,
"show": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 0.5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "histogram_quantile(0.5, sum(rate(grpc_server_handling_seconds_bucket[$period])) by (le))",
"hide": false,
"instant": false,
"legendFormat": "p0.5",
"refId": "D"
},
{
"expr": "histogram_quantile(0.9, sum(rate(grpc_server_handling_seconds_bucket[$period])) by (le))",
"hide": false,
"instant": false,
"legendFormat": "p0.9",
"refId": "A"
},
{
"expr": "histogram_quantile(0.95, sum(rate(grpc_server_handling_seconds_bucket[$period])) by (le))",
"hide": false,
"instant": false,
"legendFormat": "p0.95",
"refId": "B"
},
{
"expr": "histogram_quantile(0.99, sum(rate(grpc_server_handling_seconds_bucket[$period])) by (le))",
"hide": false,
"instant": false,
"legendFormat": "p0.99",
"refId": "C"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "grpc - req durations",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "s",
"label": null,
"logBase": 1,
"max": null,
"min": "0",
"show": true
},
{
"format": "reqps",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 0,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 6,
"x": 0,
"y": 14
},
"hiddenSeries": false,
"id": 28,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": true,
"min": false,
"rightSide": false,
"show": true,
"sort": "max",
"sortDesc": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pluginVersion": "6.6.1",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "sum(ligato_kvscheduler_queue_wait_seconds{instance=\"$agent\"}) by (quantile,txn_type)",
"format": "time_series",
"intervalFactor": 1,
"legendFormat": "{{txn_type}} p{{quantile}}",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "kvscheduler - queue wait time",
"tooltip": {
"shared": true,
"sort": 2,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "s",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {
"histogram_quantile(0.5, sum(rate(grpc_server_handling_seconds_bucket[5s])) by (le))": "super-light-green",
"histogram_quantile(0.9, sum(rate(grpc_server_handling_seconds_bucket[5s])) by (le))": "light-orange",
"p0.5": "light-green",
"p0.9": "light-yellow",
"p0.95": "light-orange",
"p0.99": "light-red",
"p1": "semi-dark-red",
"sum(rate(grpc_server_handled_total[5s]))": "super-light-green"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 6,
"x": 6,
"y": 14
},
"hiddenSeries": false,
"id": 30,
"interval": "",
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"hideEmpty": false,
"hideZero": false,
"max": true,
"min": false,
"rightSide": false,
"show": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 0.5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "histogram_quantile(1.0, sum(rate(ligato_kvscheduler_txn_duration_seconds_bucket[$period])) by (le))",
"hide": false,
"legendFormat": "p1",
"refId": "D"
},
{
"expr": "histogram_quantile(0.99, sum(rate(ligato_kvscheduler_txn_duration_seconds_bucket[$period])) by (le))",
"hide": false,
"legendFormat": "p0.99",
"refId": "C"
},
{
"expr": "histogram_quantile(0.95, sum(rate(ligato_kvscheduler_txn_duration_seconds_bucket[$period])) by (le))",
"legendFormat": "p0.95",
"refId": "E"
},
{
"expr": "histogram_quantile(0.9, sum(rate(ligato_kvscheduler_txn_duration_seconds_bucket[$period])) by (le))",
"legendFormat": "p0.9",
"refId": "A"
},
{
"expr": "histogram_quantile(0.5, sum(rate(ligato_kvscheduler_txn_duration_seconds_bucket[$period])) by (le))",
"legendFormat": "p0.5",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "kvscheduler - txn durations",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "s",
"label": null,
"logBase": 2,
"max": null,
"min": null,
"show": true
},
{
"format": "reqps",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"decimals": null,
"fill": 0,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 14
},
"hiddenSeries": false,
"id": 29,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"hideZero": false,
"max": true,
"min": false,
"rightSide": false,
"show": true,
"sort": null,
"sortDesc": null,
"total": false,
"values": true
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pluginVersion": "6.6.1",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [
{
"alias": "/processTransaction .*/",
"fill": 1,
"stack": false
},
{}
],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "ligato_kvscheduler_txn_process_duration_seconds{instance=\"$agent\",quantile=\"0.99\"}",
"intervalFactor": 1,
"legendFormat": "{{slice}} p99",
"refId": "B"
},
{
"expr": "sum(ligato_kvscheduler_queue_wait_seconds{instance=\"$agent\",quantile=\"0.99\"}) by (quantile)",
"legendFormat": "queueWait p99",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "kvscheduler - txn timings",
"tooltip": {
"shared": true,
"sort": 2,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "s",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {
"client - ligato.configurator.ConfiguratorService / grpc_method - OK": "super-light-blue"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"decimals": 1,
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
"y": 22
},
"hiddenSeries": false,
"id": 7,
"legend": {
"alignAsTable": true,
"avg": true,
"current": false,
"hideEmpty": false,
"hideZero": true,
"max": true,
"min": true,
"rightSide": false,
"show": true,
"sort": "total",
"sortDesc": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 0.5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "sum(rate(grpc_server_handled_total{instance=\"$agent\"}[$period])) by (grpc_service, grpc_code)",
"hide": false,
"instant": false,
"interval": "",
"intervalFactor": 1,
"legendFormat": "server - {{grpc_service}} / {{grpc_method}} - {{grpc_code}}",
"refId": "A"
},
{
"expr": "sum(rate(grpc_client_handled_total{job=\"grpc-client\"}[$period])) by (grpc_service, grpc_code)",
"hide": false,
"instant": false,
"interval": "",
"intervalFactor": 1,
"legendFormat": "client - {{grpc_service}} / {{grpc_method}} - {{grpc_code}}",
"refId": "E"
},
{
"expr": "rate(grpc_server_started_total{instance=\"$agent\"}[$period])",
"hide": true,
"legendFormat": "started: {{grpc_method}}",
"refId": "B"
},
{
"expr": "rate(grpc_server_msg_sent_total{instance=\"$agent\"}[$period])",
"hide": true,
"legendFormat": "msg sent: {{grpc_method}}",
"refId": "C"
},
{
"expr": "rate(grpc_server_msg_received_total{instance=\"$agent\"}[$period])",
"hide": true,
"legendFormat": "msg recv: {{grpc_method}}",
"refId": "D"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "grpc server - request rate",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"decimals": null,
"format": "short",
"label": "",
"logBase": 1,
"max": null,
"min": "0",
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
"y": 22
},
"hiddenSeries": false,
"id": 3,
"interval": "",
"legend": {
"alignAsTable": true,
"avg": true,
"current": false,
"hideEmpty": false,
"hideZero": true,
"max": true,
"min": true,
"rightSide": false,
"show": true,
"sort": "total",
"sortDesc": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 0.5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": true,
"targets": [
{
"expr": "rate(grpc_server_handling_seconds_sum[$period]) / rate(grpc_server_handling_seconds_count[$period])",
"hide": false,
"instant": false,
"intervalFactor": 1,
"legendFormat": "server - {{grpc_service}} / {{grpc_method}}",
"refId": "C"
},
{
"expr": "rate(grpc_client_handling_seconds_sum[$period]) / rate(grpc_client_handling_seconds_count[$period])",
"hide": false,
"instant": false,
"intervalFactor": 1,
"legendFormat": "client - {{grpc_service}} / {{grpc_method}}",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "grpc - request duration",
"tooltip": {
"shared": true,
"sort": 2,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "s",
"label": "",
"logBase": 1,
"max": null,
"min": "0",
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {
"dropped": "semi-dark-red",
"processed": "semi-dark-blue"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 31
},
"hiddenSeries": false,
"id": 26,
"legend": {
"avg": true,
"current": false,
"hideEmpty": false,
"hideZero": false,
"max": true,
"min": false,
"show": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 2,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"expr": "rate(ligato_kvscheduler_txn_processed[$period])",
"hide": false,
"legendFormat": "processed",
"refId": "A"
},
{
"expr": "rate(ligato_kvscheduler_txn_dropped[$period])",
"legendFormat": "dropped",
"refId": "B"
},
{
"expr": "rate(ligato_kvscheduler_txn_process_duration_seconds_count[$period])",
"hide": true,
"refId": "C"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "kvscheduler - txn rate",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {
"NB Transaction": "light-orange",
"SB Notification": "light-purple"
},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 31
},
"hiddenSeries": false,
"id": 31,
"interval": "",
"legend": {
"alignAsTable": false,
"avg": true,
"current": false,
"hideEmpty": false,
"hideZero": true,
"max": true,
"min": true,
"rightSide": false,
"show": true,
"sort": "total",
"sortDesc": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 0.5,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": true,
"targets": [
{
"expr": "rate(ligato_kvscheduler_txn_duration_seconds_sum[$period])\n/\nrate(ligato_kvscheduler_txn_duration_seconds_count[$period])",
"hide": false,
"instant": false,
"intervalFactor": 1,
"legendFormat": "{{txn_type}}",
"refId": "C"
},
{
"expr": "rate(ligato_kvscheduler_txn_process_duration_seconds_sum{slice=\"processTransaction\"}[$period])\n/\nrate(ligato_kvscheduler_txn_process_duration_seconds_count{slice=\"processTransaction\"}[$period])",
"hide": true,
"instant": false,
"intervalFactor": 1,
"legendFormat": "",
"refId": "A"
},
{
"expr": "topk(2, ligato_kvscheduler_txn_duration_seconds_sum)",
"hide": true,
"instant": false,
"intervalFactor": 1,
"legendFormat": "",
"refId": "B"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "kvscheduler - txn duration",
"tooltip": {
"shared": true,
"sort": 2,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "s",
"label": "",
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": null,
"decimals": 1,
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 9,
"w": 12,
"x": 0,
"y": 39
},
"hiddenSeries": false,
"id": 10,
"legend": {
"alignAsTable": true,
"avg": true,
"current": false,
"hideEmpty": false,
"hideZero": true,
"max": true,
"min": true,
"rightSide": false,
"show": true,
"sort": "max",
"sortDesc": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 0.5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
{
"alias": "/.*total.*/",
"bars": true,
"fill": 0,
"lines": false,
"stack": false,
"yaxis": 2
},
{
"alias": "/received.*/",
"bars": true,
"color": "rgba(70, 131, 140, 0.29)",
"fill": 0,
"lines": false,
"stack": false,
"yaxis": 2,
"zindex": -3
}
],
"spaceLength": 10,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "rate(ligato_govppmux_requests_total[$period])",
"hide": false,
"legendFormat": "sent {msg={{message}}}",
"refId": "D"
},
{
"expr": "rate(ligato_govppmux_requests_failed_total[$period])",
"hide": false,
"legendFormat": "failed {msg={{message}}}",
"refId": "G"
},
{
"expr": "rate(ligato_govppmux_replies_received_total[$period])",
"hide": true,
"legendFormat": "received {msg={{message}}}",
"refId": "E"
},
{
"expr": "sum(rate(ligato_govppmux_replies_received_total[$period]))",
"hide": false,
"legendFormat": "received replies total",
"refId": "B"
},
{
"expr": "sum(rate(ligato_govppmux_successful_request_duration_seconds_count[$period])) by (instance)",
"hide": true,
"legendFormat": "requests total",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "govppmux - requests rate",
"tooltip": {
"shared": true,
"sort": 2,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": "",
"logBase": 1,
"max": null,
"min": "0",
"show": true
},
{
"decimals": null,
"format": "short",
"label": "",
"logBase": 1,
"max": null,
"min": null,
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": true,
"dashLength": 10,
"dashes": false,
"datasource": null,
"decimals": 1,
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 9,
"w": 12,
"x": 12,
"y": 39
},
"hiddenSeries": false,
"id": 4,
"legend": {
"alignAsTable": true,
"avg": true,
"current": false,
"hideEmpty": false,
"hideZero": true,
"max": true,
"min": true,
"rightSide": false,
"show": true,
"sort": "max",
"sortDesc": true,
"total": false,
"values": true
},
"lines": false,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"dataLinks": []
},
"percentage": false,
"pointradius": 0.5,
"points": false,
"renderer": "flot",
"seriesOverrides": [
{
"alias": "/.*total.*/",
"bars": false,
"fill": 0,
"lines": true,
"stack": false,
"steppedLine": true,
"yaxis": 2
}
],
"spaceLength": 10,
"stack": true,
"steppedLine": false,
"targets": [
{
"expr": "rate(ligato_govppmux_successful_request_duration_seconds_sum{message!~\".*dump$\"}[$period])\n/\nrate(ligato_govppmux_successful_request_duration_seconds_count{message!~\".*dump$\"}[$period])",
"format": "time_series",
"hide": false,
"legendFormat": "{{message}}",
"refId": "A"
},
{
"expr": "sum(rate(ligato_govppmux_successful_request_duration_seconds_sum{message!~\".*dump$\"}[$period])) by (instance)",
"format": "time_series",
"hide": false,
"legendFormat": "duration total",
"refId": "D"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "govppmux - requests duration",
"tooltip": {
"shared": true,
"sort": 2,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"decimals": null,
"format": "s",
"label": "",
"logBase": 1,
"max": null,
"min": "0",
"show": true
},
{
"decimals": null,
"format": "s",
"label": "",
"logBase": 1,
"max": null,
"min": "0",
"show": true
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
}
],
"refresh": false,
"schemaVersion": 22,
"style": "dark",
"tags": [],
"templating": {
"list": [
{
"auto": true,
"auto_count": 50,
"auto_min": "10s",
"current": {
"selected": true,
"text": "5s",
"value": "5s"
},
"hide": 0,
"label": "Period",
"name": "period",
"options": [
{
"selected": false,
"text": "auto",
"value": "$__auto_interval_period"
},
{
"selected": false,
"text": "1s",
"value": "1s"
},
{
"selected": true,
"text": "5s",
"value": "5s"
},
{
"selected": false,
"text": "10s",
"value": "10s"
},
{
"selected": false,
"text": "15s",
"value": "15s"
},
{
"selected": false,
"text": "30s",
"value": "30s"
},
{
"selected": false,
"text": "1m",
"value": "1m"
},
{
"selected": false,
"text": "5m",
"value": "5m"
},
{
"selected": false,
"text": "10m",
"value": "10m"
},
{
"selected": false,
"text": "30m",
"value": "30m"
},
{
"selected": false,
"text": "1h",
"value": "1h"
},
{
"selected": false,
"text": "6h",
"value": "6h"
},
{
"selected": false,
"text": "12h",
"value": "12h"
},
{
"selected": false,
"text": "24h",
"value": "24h"
}
],
"query": "1s,5s,10s,15s,30s,1m,5m,10m,30m,1h,6h,12h,24h",
"refresh": 2,
"skipUrlSync": false,
"type": "interval"
},
{
"allValue": null,
"current": {
"text": "agent1:9191",
"value": "agent1:9191"
},
"datasource": "Prometheus",
"definition": "label_values(ligato_build_info{job=\"agent\"}, instance)",
"hide": 0,
"includeAll": false,
"label": "",
"multi": false,
"name": "agent",
"options": [],
"query": "label_values(ligato_build_info{job=\"agent\"}, instance)",
"refresh": 2,
"regex": "",
"skipUrlSync": false,
"sort": 0,
"tagValuesQuery": "",
"tags": [],
"tagsQuery": "",
"type": "query",
"useTags": false
},
{
"allValue": null,
"current": {
"selected": true,
"text": "0.005",
"value": "0.005"
},
"datasource": "Prometheus",
"definition": "label_values(grpc_server_handling_seconds_bucket{job=\"agent\"}, le)",
"hide": 0,
"includeAll": false,
"label": "grpc request dur",
"multi": false,
"name": "grpcreqdur",
"options": [],
"query": "label_values(grpc_server_handling_seconds_bucket{job=\"agent\"}, le)",
"refresh": 1,
"regex": "",
"skipUrlSync": false,
"sort": 0,
"tagValuesQuery": "",
"tags": [],
"tagsQuery": "",
"type": "query",
"useTags": false
}
]
},
"time": {
"from": "2020-02-26T13:26:00.526Z",
"to": "2020-02-26T13:27:26.486Z"
},
"timepicker": {
"hidden": false,
"nowDelay": "5s",
"refresh_intervals": [
"1s",
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
]
},
"timezone": "",
"title": "VPP Agent Copy",
"uid": "gygjs3wWk",
"version": 12
}
git clone https://github.com/ligato/vpp-agent
cd vpp-agent
# run basic perf test
bash ./scripts/run_perf_test.sh
Customize test parameters:
# usage: run_perf_test.sh <client_req> <tunnels_per_req> <num_clients>
# run perf test with 1 client, 20k requests per client, 100 tunnels per request (20k tunnels total)
bash ./scripts/run_perf_test.sh 20000 100
# run perf test with 5 clients, 10k requests per client, 5 tunnels per request (50k tunnels total)
bash ./scripts/run_perf_test.sh 10000 10 5
Using image built locally:
# build dev image
make dev-image
# run with local image
AGENT_IMG=dev_vpp_agent bash ./scripts/run/perf_test.sh