From 262edcc26c0356b6476f43f69674e54bad587321 Mon Sep 17 00:00:00 2001 From: galargh Date: Tue, 23 May 2023 17:24:58 +0200 Subject: [PATCH 01/41] feat: prepare perf for automation --- perf/Makefile | 18 +++++ perf/README.md | 19 +++++- perf/terraform/common/main.tf | 33 +++++++++ perf/terraform/region/main.tf | 21 +++--- perf/terraform/region/scale-down.tf | 100 ++++++++++++++++++++++++++++ perf/terraform/scale_down.py | 26 ++++++++ perf/terraform/terraform.tf | 31 +++++---- 7 files changed, 220 insertions(+), 28 deletions(-) create mode 100644 perf/Makefile create mode 100644 perf/terraform/common/main.tf create mode 100644 perf/terraform/region/scale-down.tf create mode 100644 perf/terraform/scale_down.py diff --git a/perf/Makefile b/perf/Makefile new file mode 100644 index 000000000..834a7364c --- /dev/null +++ b/perf/Makefile @@ -0,0 +1,18 @@ +provision-server: + aws ec2 run-instances --region=us-west-2 --launch-template LaunchTemplateName=perf-node --count 1 --query 'Instances[0].InstanceId' --output text + +provision-client: + aws ec2 run-instances --region=us-east-1 --launch-template LaunchTemplateName=perf-node --count 1 --query 'Instances[0].InstanceId' --output text + +wait: + aws ec2 wait instance-running --region us-west-2 --instance-ids "$SERVER_ID" + aws ec2 wait instance-running --region us-east-1 --instance-ids "$CLIENT_ID" + SERVER_IP="$(aws ec2 describe-instances --region us-west-2 --instance-ids "$SERVER_ID" --query 'Reservations[0].Instances[0].PublicIpAddress' --output text)" + CLIENT_IP="$(aws ec2 describe-instances --region us-east-1 --instance-ids "$CLIENT_ID" --query 'Reservations[0].Instances[0].PublicIpAddress' --output text)" + echo "$SERVER_IP $CLIENT_IP" + +deprovision-server: + aws ec2 terminate-instances --region=us-west-2 --instance-ids "$SERVER_ID" + +deprovision-client: + aws ec2 terminate-instances --region=us-east-1 --instance-ids "$CLIENT_ID" diff --git a/perf/README.md b/perf/README.md index 5463f410b..c9b0e452f 100644 --- a/perf/README.md +++ b/perf/README.md @@ -10,21 +10,36 @@ Benchmark results can be visualized with https://observablehq.com/@mxinden-works ## Provision infrastructure +### Bootstrap + 1. `cd terraform` 2. Save your public SSH key as the file `./user.pub`. 3. `terraform init` 4. `terraform apply` +### Nodes + +1. `SERVER_ID=$(make provision-server)` +2. `CLIENT_ID=$(make provision-client)` +3. `read SERVER_IP CLIENT_IP <<< $(SERVER_ID=$SERVER_ID CLIENT_ID=$CLIENT_ID make wait)` + ## Build and run implementations 1. `cd runner` 2. `npm ci` -3. `npm run start -- --client-public-ip $(terraform output -raw -state ../terraform/terraform.tfstate client_public_ip) --server-public-ip $(terraform output -raw -state ../terraform/terraform.tfstate server_public_ip)` +3. `npm run start -- --client-public-ip $CLIENT_IP --server-public-ip $SERVER_IP` ## Deprovision infrastructure +### Nodes + +1. `CLIENT_ID=$CLIENT_ID make deprovision-client` +2. `SERVER_ID=$SERVER_ID make deprovision-server` + +### Bootstrap + 1. `cd terraform` -3. `terraform destroy` +2. `terraform destroy` ## Adding a new implementation diff --git a/perf/terraform/common/main.tf b/perf/terraform/common/main.tf new file mode 100644 index 000000000..6d30a07ed --- /dev/null +++ b/perf/terraform/common/main.tf @@ -0,0 +1,33 @@ +variable "region" { + description = "The AWS region to create resources in" +} + +variable "common_tags" { + type = map(string) + description = "Common tags to apply to all resources" +} + +provider "aws" { + region = var.region + + tags = var.common_tags +} + +resource "aws_iam_user" "perf" { + name = "perf" +} + +data "aws_iam_policy_document" "perf" { + statement { + actions = ["ec2:*"] + resources = ["*"] + effect = "Allow" + } +} + +resource "aws_iam_user_policy" "perf" { + name = "perf" + user = "${aws_iam_user.perf.name}" + + policy = "${data.aws_iam_policy_document.perf.json}" +} diff --git a/perf/terraform/region/main.tf b/perf/terraform/region/main.tf index 81a3db2bc..c4f277725 100644 --- a/perf/terraform/region/main.tf +++ b/perf/terraform/region/main.tf @@ -116,8 +116,9 @@ resource "aws_key_pair" "perf" { public_key = file("./user.pub") } -resource "aws_instance" "node" { - ami = var.ami +resource "aws_launch_template" "perf" { + name = "perf-node" + image_id = var.ami instance_type = "m5n.8xlarge" subnet_id = aws_subnet.perf.id @@ -130,14 +131,14 @@ resource "aws_instance" "node" { # - /var/log/cloud-init.log and # - /var/log/cloud-init-output.log user_data = file("./user-data.sh") - user_data_replace_on_change = true - tags = merge(var.common_tags, { - Name = "node" - }) -} + tag_specifications { + resource_type = "instance" + + tags = merge(var.common_tags, { + Name = "node" + }) + } -output "node_public_ip" { - value = aws_instance.node.public_ip - description = "Public IP address of the node instance" + instance_initiated_shutdown_behavior = "terminate" } diff --git a/perf/terraform/region/scale-down.tf b/perf/terraform/region/scale-down.tf new file mode 100644 index 000000000..4fa830d54 --- /dev/null +++ b/perf/terraform/region/scale-down.tf @@ -0,0 +1,100 @@ +data "archive_file" "scale_down" { + type = "zip" + source_file = "${path.module}/scale_down.py" + output_path = "${path.module}/scale_down.zip" +} + +resource "aws_lambda_function" "scale_down" { + filename = data.archive_file.scale_down.output_path + source_code_hash = data.archive_file.scale_down.output_base64sha256 + function_name = "perf-scale-down" + role = aws_iam_role.scale_down.arn + handler = "scale_down.lambda_handler" + runtime = "python3.10" + memory_size = 128 + timeout = 30 + tags = var.common_tags + + environment { + variables = { + TAGS = jsonencode(aws_launch_template.perf.tag_specifications.tags) + MAX_AGE_MINUTES = 30 + } + } +} + +resource "aws_cloudwatch_log_group" "scale_down" { + name = "/aws/lambda/${aws_lambda_function.scale_down.function_name}" + retention_in_days = 7 + tags = var.common_tags +} + +resource "aws_cloudwatch_event_rule" "scale_down" { + name = "perf-scale-down-rule" + schedule_expression = "rate(1 hour)" + tags = var.common_tags +} + +resource "aws_cloudwatch_event_target" "scale_down" { + rule = aws_cloudwatch_event_rule.scale_down.name + arn = aws_lambda_function.scale_down.arn +} + +resource "aws_lambda_permission" "scale_down" { + statement_id = "AllowExecutionFromCloudWatch" + action = "lambda:InvokeFunction" + function_name = aws_lambda_function.scale_down.function_name + principal = "events.amazonaws.com" + source_arn = aws_cloudwatch_event_rule.scale_down.arn +} + +resource "aws_iam_role" "scale_down" { + name = "perf-${var.region}-scale-down-lambda-role" + assume_role_policy = data.aws_iam_policy_document.lambda_assume_role_policy.json + tags = var.common_tags +} + +data "aws_iam_policy_document" "scale_down" { + statement { + actions = ["ec2:DescribeInstances", "ec2:DescribeTags"] + resources = ["*"] + effect = "Allow" + } + + statement { + actions = ["ec2:TerminateInstances"] + resources = ["*"] + effect = "Allow" + + dynamic "condition" { + for_each = aws_launch_template.perf.tag_specifications.tags + + content { + test = "StringEquals" + variable = "ec2:ResourceTag/${condition.value.Key}" + values = [condition.value.Value] + } + } + } +} + +resource "aws_iam_role_policy" "scale_down" { + name = "perf-${var.region}-scale-down-lamda-policy" + role = aws_iam_role.scale_down.name + policy = data.aws_iam_policy_document.scale_down.json +} + +data "aws_iam_policy_document" "scale_down_logging" { + statement { + actions = ["logs:CreateLogStream", "logs:PutLogEvents"] + resources = ["${aws_cloudwatch_log_group.scale_down.arn}*"] + effect = "Allow" + } + +} + +resource "aws_iam_role_policy" "scale_down_logging" { + name = "perf-${var.region}-lambda-logging" + role = aws_iam_role.scale_down.name + policy = data.aws_iam_policy_document.scale_down_logging.json +} diff --git a/perf/terraform/scale_down.py b/perf/terraform/scale_down.py new file mode 100644 index 000000000..451ed0a4e --- /dev/null +++ b/perf/terraform/scale_down.py @@ -0,0 +1,26 @@ +import boto3 +import os +import json +import datetime + +region = os.environ['AWS_REGION'] +ec2 = boto3.client('ec2', region_name=region) +tags = os.environ['TAGS'] +max_age_minutes = os.environ['MAX_AGE_MINUTES'] + + +def is_lost(instance): + return instance.launch_time.replace(tzinfo=None) < datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(minutes=max_age_minutes) + + +def lambda_handler(event, context): + filter = [{'Name': 'instance-state-name', 'Values': ['running']}] + filter = filter + [{ + 'Name': 'tag:' + k, + 'Values': [v] + } for k, v in tags.items()] + instances = [i.id for i in ec2.describe_instances( + Filters=filter) if is_lost(i)] + print('found instances: ' + str(instances)) + ec2.stop_instances(InstanceIds=instances) + print('stopped instances: ' + str(instances)) diff --git a/perf/terraform/terraform.tf b/perf/terraform/terraform.tf index 79ad18050..a50a28ff6 100644 --- a/perf/terraform/terraform.tf +++ b/perf/terraform/terraform.tf @@ -7,14 +7,25 @@ terraform { } } +locals { + tags = { + Project = "perf" + } +} + +module "common" { + source = "./common" + region = "us-west-2" + + common_tags = local.tags +} + module "server_region" { source = "./region" region = "us-west-2" ami = "ami-0747e613a2a1ff483" - common_tags = { - Project = "perf" - } + common_tags = local.tags } module "client_region" { @@ -22,17 +33,5 @@ module "client_region" { region = "us-east-1" ami = "ami-06e46074ae430fba6" - common_tags = { - Project = "perf" - } -} - -output "server_public_ip" { - value = module.server_region.node_public_ip - description = "Public IP address of the server instance" -} - -output "client_public_ip" { - value = module.client_region.node_public_ip - description = "Public IP address of the client instance" + common_tags = local.tags } From be80ae7fbd382775f4fa7ea8615f3e07373353a4 Mon Sep 17 00:00:00 2001 From: galargh Date: Wed, 24 May 2023 09:47:03 +0200 Subject: [PATCH 02/41] chore: make scale down lambda common --- perf/README.md | 2 +- perf/terraform/.gitignore | 1 + perf/terraform/common/files/scale_down.py | 28 +++++++++++++++++++ .../{region => common}/scale-down.tf | 13 +++++---- .../terraform/{ => region/files}/user-data.sh | 0 perf/terraform/region/main.tf | 4 +-- perf/terraform/scale_down.py | 26 ----------------- perf/terraform/terraform.tf | 6 ++-- 8 files changed, 42 insertions(+), 38 deletions(-) create mode 100644 perf/terraform/common/files/scale_down.py rename perf/terraform/{region => common}/scale-down.tf (88%) rename perf/terraform/{ => region/files}/user-data.sh (100%) delete mode 100644 perf/terraform/scale_down.py diff --git a/perf/README.md b/perf/README.md index c9b0e452f..cb33876a6 100644 --- a/perf/README.md +++ b/perf/README.md @@ -13,7 +13,7 @@ Benchmark results can be visualized with https://observablehq.com/@mxinden-works ### Bootstrap 1. `cd terraform` -2. Save your public SSH key as the file `./user.pub`. +2. Save your public SSH key as the file `./regions/files/user.pub`. 3. `terraform init` 4. `terraform apply` diff --git a/perf/terraform/.gitignore b/perf/terraform/.gitignore index bb09c5300..65888d37c 100644 --- a/perf/terraform/.gitignore +++ b/perf/terraform/.gitignore @@ -34,3 +34,4 @@ override.tf.json terraform.rc *.pub +scale_down.zip diff --git a/perf/terraform/common/files/scale_down.py b/perf/terraform/common/files/scale_down.py new file mode 100644 index 000000000..1b047df68 --- /dev/null +++ b/perf/terraform/common/files/scale_down.py @@ -0,0 +1,28 @@ +import boto3 +import os +import json +import datetime + +regions = os.environ['AWS_REGIONS'] +tags = os.environ['TAGS'] +max_age_minutes = os.environ['MAX_AGE_MINUTES'] + + +def is_lost(instance): + return instance.launch_time.replace(tzinfo=None) < datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(minutes=max_age_minutes) + + +def lambda_handler(event, context): + # iterate over all regions + for region in regions.split(','): + ec2 = boto3.client('ec2', region_name=region) + filter = [{'Name': 'instance-state-name', 'Values': ['running']}] + filter = filter + [{ + 'Name': 'tag:' + k, + 'Values': [v] + } for k, v in json.loads(tags).items()] + instances = [i.id for i in ec2.describe_instances( + Filters=filter) if is_lost(i)] + print('found instances: ' + str(instances)) + ec2.stop_instances(InstanceIds=instances) + print('stopped instances: ' + str(instances)) diff --git a/perf/terraform/region/scale-down.tf b/perf/terraform/common/scale-down.tf similarity index 88% rename from perf/terraform/region/scale-down.tf rename to perf/terraform/common/scale-down.tf index 4fa830d54..073dde896 100644 --- a/perf/terraform/region/scale-down.tf +++ b/perf/terraform/common/scale-down.tf @@ -1,7 +1,7 @@ data "archive_file" "scale_down" { type = "zip" - source_file = "${path.module}/scale_down.py" - output_path = "${path.module}/scale_down.zip" + source_file = "${path.module}/files/scale_down.py" + output_path = "${path.module}/files/scale_down.zip" } resource "aws_lambda_function" "scale_down" { @@ -17,7 +17,8 @@ resource "aws_lambda_function" "scale_down" { environment { variables = { - TAGS = jsonencode(aws_launch_template.perf.tag_specifications.tags) + REGIONS = ["us-east-1", "us-west-2"] + TAGS = merge(var.common_tags, { "Name" = "node" }) MAX_AGE_MINUTES = 30 } } @@ -49,7 +50,7 @@ resource "aws_lambda_permission" "scale_down" { } resource "aws_iam_role" "scale_down" { - name = "perf-${var.region}-scale-down-lambda-role" + name = "perf-scale-down-lambda-role" assume_role_policy = data.aws_iam_policy_document.lambda_assume_role_policy.json tags = var.common_tags } @@ -79,7 +80,7 @@ data "aws_iam_policy_document" "scale_down" { } resource "aws_iam_role_policy" "scale_down" { - name = "perf-${var.region}-scale-down-lamda-policy" + name = "perf-scale-down-lamda-policy" role = aws_iam_role.scale_down.name policy = data.aws_iam_policy_document.scale_down.json } @@ -94,7 +95,7 @@ data "aws_iam_policy_document" "scale_down_logging" { } resource "aws_iam_role_policy" "scale_down_logging" { - name = "perf-${var.region}-lambda-logging" + name = "perf-lambda-logging" role = aws_iam_role.scale_down.name policy = data.aws_iam_policy_document.scale_down_logging.json } diff --git a/perf/terraform/user-data.sh b/perf/terraform/region/files/user-data.sh similarity index 100% rename from perf/terraform/user-data.sh rename to perf/terraform/region/files/user-data.sh diff --git a/perf/terraform/region/main.tf b/perf/terraform/region/main.tf index c4f277725..61264a470 100644 --- a/perf/terraform/region/main.tf +++ b/perf/terraform/region/main.tf @@ -113,7 +113,7 @@ resource "aws_security_group" "restricted_inbound" { resource "aws_key_pair" "perf" { key_name = "user-public-key" - public_key = file("./user.pub") + public_key = file("${path.module}/files/user.pub") } resource "aws_launch_template" "perf" { @@ -130,7 +130,7 @@ resource "aws_launch_template" "perf" { # Debug via: # - /var/log/cloud-init.log and # - /var/log/cloud-init-output.log - user_data = file("./user-data.sh") + user_data = file("${path.module}/files/user-data.sh") tag_specifications { resource_type = "instance" diff --git a/perf/terraform/scale_down.py b/perf/terraform/scale_down.py deleted file mode 100644 index 451ed0a4e..000000000 --- a/perf/terraform/scale_down.py +++ /dev/null @@ -1,26 +0,0 @@ -import boto3 -import os -import json -import datetime - -region = os.environ['AWS_REGION'] -ec2 = boto3.client('ec2', region_name=region) -tags = os.environ['TAGS'] -max_age_minutes = os.environ['MAX_AGE_MINUTES'] - - -def is_lost(instance): - return instance.launch_time.replace(tzinfo=None) < datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(minutes=max_age_minutes) - - -def lambda_handler(event, context): - filter = [{'Name': 'instance-state-name', 'Values': ['running']}] - filter = filter + [{ - 'Name': 'tag:' + k, - 'Values': [v] - } for k, v in tags.items()] - instances = [i.id for i in ec2.describe_instances( - Filters=filter) if is_lost(i)] - print('found instances: ' + str(instances)) - ec2.stop_instances(InstanceIds=instances) - print('stopped instances: ' + str(instances)) diff --git a/perf/terraform/terraform.tf b/perf/terraform/terraform.tf index a50a28ff6..8bc269af7 100644 --- a/perf/terraform/terraform.tf +++ b/perf/terraform/terraform.tf @@ -14,14 +14,14 @@ locals { } module "common" { - source = "./common" + source = "${path.module}/common" region = "us-west-2" common_tags = local.tags } module "server_region" { - source = "./region" + source = "${path.module}/region" region = "us-west-2" ami = "ami-0747e613a2a1ff483" @@ -29,7 +29,7 @@ module "server_region" { } module "client_region" { - source = "./region" + source = "${path.module}/region" region = "us-east-1" ami = "ami-06e46074ae430fba6" From 6d4e3c434a49ae3c949c8243b047d33536bb2615 Mon Sep 17 00:00:00 2001 From: galargh Date: Wed, 24 May 2023 10:10:41 +0200 Subject: [PATCH 03/41] feat: make it easier to create a one-off ssh key --- perf/Makefile | 6 ++++++ perf/README.md | 4 ++-- perf/terraform/.gitignore | 3 --- perf/terraform/common/files/.gitignore | 2 ++ perf/terraform/region/files/.gitignore | 3 +++ 5 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 perf/terraform/common/files/.gitignore create mode 100644 perf/terraform/region/files/.gitignore diff --git a/perf/Makefile b/perf/Makefile index 834a7364c..6917d7247 100644 --- a/perf/Makefile +++ b/perf/Makefile @@ -1,3 +1,9 @@ +ssh-keygen: + ssh-keygen -t ed25519 -f ./terraform/region/files/user -N '' + +ssh-add: + ssh-add ./terraform/region/files/user + provision-server: aws ec2 run-instances --region=us-west-2 --launch-template LaunchTemplateName=perf-node --count 1 --query 'Instances[0].InstanceId' --output text diff --git a/perf/README.md b/perf/README.md index cb33876a6..2eaf5bbd6 100644 --- a/perf/README.md +++ b/perf/README.md @@ -12,8 +12,8 @@ Benchmark results can be visualized with https://observablehq.com/@mxinden-works ### Bootstrap -1. `cd terraform` -2. Save your public SSH key as the file `./regions/files/user.pub`. +1. Save your public SSH key as the file `./regions/files/user.pub`; or generate a new key pair with `make ssh-keygen` and add it to your SSH agent with `make ssh-add`. +2. `cd terraform` 3. `terraform init` 4. `terraform apply` diff --git a/perf/terraform/.gitignore b/perf/terraform/.gitignore index 65888d37c..6304eb3c1 100644 --- a/perf/terraform/.gitignore +++ b/perf/terraform/.gitignore @@ -32,6 +32,3 @@ override.tf.json # Ignore CLI configuration files .terraformrc terraform.rc - -*.pub -scale_down.zip diff --git a/perf/terraform/common/files/.gitignore b/perf/terraform/common/files/.gitignore new file mode 100644 index 000000000..3fc577864 --- /dev/null +++ b/perf/terraform/common/files/.gitignore @@ -0,0 +1,2 @@ +# generated ZIP for AWS Lambda +scale_down.zip diff --git a/perf/terraform/region/files/.gitignore b/perf/terraform/region/files/.gitignore new file mode 100644 index 000000000..d1ddebdff --- /dev/null +++ b/perf/terraform/region/files/.gitignore @@ -0,0 +1,3 @@ +# generated SSH key +user +user.pub From 255f3bcc3f7e59a811cc4c0c568d925d613c985c Mon Sep 17 00:00:00 2001 From: galargh Date: Wed, 24 May 2023 13:58:46 +0200 Subject: [PATCH 04/41] feat: create a bucket and allow server/client to interact with it --- perf/terraform/common/files/scale_down.py | 2 +- perf/terraform/common/main.tf | 60 ++++++++++++++++++++++- perf/terraform/common/scale-down.tf | 16 +++--- perf/terraform/region/main.tf | 10 ++-- perf/terraform/terraform.tf | 13 ++++- 5 files changed, 85 insertions(+), 16 deletions(-) diff --git a/perf/terraform/common/files/scale_down.py b/perf/terraform/common/files/scale_down.py index 1b047df68..f9609b40b 100644 --- a/perf/terraform/common/files/scale_down.py +++ b/perf/terraform/common/files/scale_down.py @@ -14,7 +14,7 @@ def is_lost(instance): def lambda_handler(event, context): # iterate over all regions - for region in regions.split(','): + for region in json.loads(regions): ec2 = boto3.client('ec2', region_name=region) filter = [{'Name': 'instance-state-name', 'Values': ['running']}] filter = filter + [{ diff --git a/perf/terraform/common/main.tf b/perf/terraform/common/main.tf index 6d30a07ed..ddd6a6edc 100644 --- a/perf/terraform/common/main.tf +++ b/perf/terraform/common/main.tf @@ -1,4 +1,5 @@ variable "region" { + type = string description = "The AWS region to create resources in" } @@ -7,6 +8,11 @@ variable "common_tags" { description = "Common tags to apply to all resources" } +variable "bucket_name" { + type = string + description = "The name of the S3 bucket to create" +} + provider "aws" { region = var.region @@ -27,7 +33,57 @@ data "aws_iam_policy_document" "perf" { resource "aws_iam_user_policy" "perf" { name = "perf" - user = "${aws_iam_user.perf.name}" + user = aws_iam_user.perf.name + + policy = data.aws_iam_policy_document.perf.json +} + +resource "aws_s3_bucket" "perf" { + bucket = var.bucket_name +} + +resource "aws_s3_bucket_acl" "perf" { + bucket = aws_s3_bucket.perf.id + acl = "private" +} + +data "aws_iam_policy_document" "perf_assume_role" { + statement { + sid = "" + effect = "Allow" + principals { + type = "Service" + identifiers = ["ec2.amazonaws.com"] + } + actions = ["sts:AssumeRole"] + } +} + +resource "aws_iam_role" "perf_role" { + name = "perf-node-role" + assume_role_policy = data.aws_iam_policy_document.perf_assume_role.json +} + +resource "aws_iam_instance_profile" "perf_profile" { + name = "perf-node-profile" + role = aws_iam_role.perf_role.name +} + +data "aws_iam_policy_document" "perf_bucket" { + statement { + actions = ["s3:GetObject", "s3:GetObjectAcl", "s3:PutObject", "s3:PutObjectAcl"] + resources = ["${aws_s3_bucket.perf.arn}/*"] + effect = "Allow" + } + statement { + actions = ["s3:ListBucket"] + resources = ["${aws_s3_bucket.perf.arn}"] + effect = "Allow" + } +} - policy = "${data.aws_iam_policy_document.perf.json}" +resource "aws_iam_role_policy" "perf_bucket" { + name = "perf-bucket-policy" + role = aws_iam_role.perf_role.name + policy = data.aws_iam_policy_document.perf_bucket.json } diff --git a/perf/terraform/common/scale-down.tf b/perf/terraform/common/scale-down.tf index 073dde896..c2352424f 100644 --- a/perf/terraform/common/scale-down.tf +++ b/perf/terraform/common/scale-down.tf @@ -1,3 +1,8 @@ +locals { + regions = ["us-east-1", "us-west-2"] + tags = merge(var.common_tags, { "Name" = "node" }) +} + data "archive_file" "scale_down" { type = "zip" source_file = "${path.module}/files/scale_down.py" @@ -13,12 +18,11 @@ resource "aws_lambda_function" "scale_down" { runtime = "python3.10" memory_size = 128 timeout = 30 - tags = var.common_tags environment { variables = { - REGIONS = ["us-east-1", "us-west-2"] - TAGS = merge(var.common_tags, { "Name" = "node" }) + REGIONS = jsonencode(local.regions) + TAGS = jsonencode(local.tags) MAX_AGE_MINUTES = 30 } } @@ -27,13 +31,11 @@ resource "aws_lambda_function" "scale_down" { resource "aws_cloudwatch_log_group" "scale_down" { name = "/aws/lambda/${aws_lambda_function.scale_down.function_name}" retention_in_days = 7 - tags = var.common_tags } resource "aws_cloudwatch_event_rule" "scale_down" { name = "perf-scale-down-rule" schedule_expression = "rate(1 hour)" - tags = var.common_tags } resource "aws_cloudwatch_event_target" "scale_down" { @@ -52,7 +54,6 @@ resource "aws_lambda_permission" "scale_down" { resource "aws_iam_role" "scale_down" { name = "perf-scale-down-lambda-role" assume_role_policy = data.aws_iam_policy_document.lambda_assume_role_policy.json - tags = var.common_tags } data "aws_iam_policy_document" "scale_down" { @@ -68,7 +69,7 @@ data "aws_iam_policy_document" "scale_down" { effect = "Allow" dynamic "condition" { - for_each = aws_launch_template.perf.tag_specifications.tags + for_each = local.tags content { test = "StringEquals" @@ -91,7 +92,6 @@ data "aws_iam_policy_document" "scale_down_logging" { resources = ["${aws_cloudwatch_log_group.scale_down.arn}*"] effect = "Allow" } - } resource "aws_iam_role_policy" "scale_down_logging" { diff --git a/perf/terraform/region/main.tf b/perf/terraform/region/main.tf index 61264a470..d1232b65b 100644 --- a/perf/terraform/region/main.tf +++ b/perf/terraform/region/main.tf @@ -117,8 +117,8 @@ resource "aws_key_pair" "perf" { } resource "aws_launch_template" "perf" { - name = "perf-node" - image_id = var.ami + name = "perf-node" + image_id = var.ami instance_type = "m5n.8xlarge" subnet_id = aws_subnet.perf.id @@ -130,7 +130,7 @@ resource "aws_launch_template" "perf" { # Debug via: # - /var/log/cloud-init.log and # - /var/log/cloud-init-output.log - user_data = file("${path.module}/files/user-data.sh") + user_data = file("${path.module}/files/user-data.sh") tag_specifications { resource_type = "instance" @@ -141,4 +141,8 @@ resource "aws_launch_template" "perf" { } instance_initiated_shutdown_behavior = "terminate" + + iam_instance_profile { + name = "perf-node-profile" + } } diff --git a/perf/terraform/terraform.tf b/perf/terraform/terraform.tf index 8bc269af7..5e2ea354b 100644 --- a/perf/terraform/terraform.tf +++ b/perf/terraform/terraform.tf @@ -13,17 +13,22 @@ locals { } } +resource "random_id" "bucket_id" { + byte_length = 4 +} + module "common" { source = "${path.module}/common" region = "us-west-2" common_tags = local.tags + bucket_name = "perf-test-bucket-${random_id.bucket_id.hex}" } module "server_region" { source = "${path.module}/region" region = "us-west-2" - ami = "ami-0747e613a2a1ff483" + ami = "ami-0747e613a2a1ff483" common_tags = local.tags } @@ -31,7 +36,11 @@ module "server_region" { module "client_region" { source = "${path.module}/region" region = "us-east-1" - ami = "ami-06e46074ae430fba6" + ami = "ami-06e46074ae430fba6" common_tags = local.tags } + +output "bucket_name" { + value = module.common.bucket_name +} From 561e849b63b8bbc429a157af2d4f4ebf61c09f88 Mon Sep 17 00:00:00 2001 From: galargh Date: Wed, 24 May 2023 20:01:13 +0200 Subject: [PATCH 05/41] fix: fixes found during testing in IPDX account --- perf/Makefile | 16 +++-- perf/README.md | 25 +++++-- perf/terraform/.terraform.lock.hcl | 72 ++++++++++++++++----- perf/terraform/common/files/scale_down.json | 1 + perf/terraform/common/files/scale_down.py | 48 +++++++++----- perf/terraform/common/files/scale_down.yml | 19 ++++++ perf/terraform/common/main.tf | 22 ++++++- perf/terraform/common/scale-down.tf | 23 +++++-- perf/terraform/region/main.tf | 12 ++-- perf/terraform/terraform.tf | 8 +-- 10 files changed, 184 insertions(+), 62 deletions(-) create mode 100644 perf/terraform/common/files/scale_down.json create mode 100644 perf/terraform/common/files/scale_down.yml diff --git a/perf/Makefile b/perf/Makefile index 6917d7247..999510748 100644 --- a/perf/Makefile +++ b/perf/Makefile @@ -11,14 +11,16 @@ provision-client: aws ec2 run-instances --region=us-east-1 --launch-template LaunchTemplateName=perf-node --count 1 --query 'Instances[0].InstanceId' --output text wait: - aws ec2 wait instance-running --region us-west-2 --instance-ids "$SERVER_ID" - aws ec2 wait instance-running --region us-east-1 --instance-ids "$CLIENT_ID" - SERVER_IP="$(aws ec2 describe-instances --region us-west-2 --instance-ids "$SERVER_ID" --query 'Reservations[0].Instances[0].PublicIpAddress' --output text)" - CLIENT_IP="$(aws ec2 describe-instances --region us-east-1 --instance-ids "$CLIENT_ID" --query 'Reservations[0].Instances[0].PublicIpAddress' --output text)" - echo "$SERVER_IP $CLIENT_IP" + aws ec2 wait instance-running --region us-west-2 --instance-ids "$(SERVER_ID)" + aws ec2 wait instance-running --region us-east-1 --instance-ids "$(CLIENT_ID)" + echo "$$(aws ec2 describe-instances --region us-west-2 --instance-ids "$(SERVER_ID)" --query 'Reservations[0].Instances[0].PublicIpAddress' --output text)" "$$(aws ec2 describe-instances --region us-east-1 --instance-ids "$(CLIENT_ID)" --query 'Reservations[0].Instances[0].PublicIpAddress' --output text)" deprovision-server: - aws ec2 terminate-instances --region=us-west-2 --instance-ids "$SERVER_ID" + aws ec2 terminate-instances --region=us-west-2 --instance-ids "$(SERVER_ID)" deprovision-client: - aws ec2 terminate-instances --region=us-east-1 --instance-ids "$CLIENT_ID" + aws ec2 terminate-instances --region=us-east-1 --instance-ids "$(CLIENT_ID)" + +# https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html +scale-down: + sam local invoke ScaleDown --template terraform/common/files/scale_down.yml --event terraform/common/files/scale_down.json diff --git a/perf/README.md b/perf/README.md index 2eaf5bbd6..234a828be 100644 --- a/perf/README.md +++ b/perf/README.md @@ -17,14 +17,29 @@ Benchmark results can be visualized with https://observablehq.com/@mxinden-works 3. `terraform init` 4. `terraform apply` +#### [OPTIONAL] Limited AWS credentials + +If you want to limit the AWS credentials used by subsequent steps, you can create Access Keys for the `perf` user that terraform created. + +1. Go to https://console.aws.amazon.com/iamv2/home?#/users/details/perf?section=security_credentials +2. Create access key +3. Download `perf_accessKeys.csv` +4. Configure AWS CLI to use the credentials. For example: +```bash +export AWS_ACCESS_KEY_ID=$(cat perf_accessKeys.csv | tail -n 1 | cut -d, -f1) +export AWS_SECRET_ACCESS_KEY=$(cat perf_accessKeys.csv | tail -n 1 | cut -d, -f2) +``` + ### Nodes -1. `SERVER_ID=$(make provision-server)` -2. `CLIENT_ID=$(make provision-client)` -3. `read SERVER_IP CLIENT_IP <<< $(SERVER_ID=$SERVER_ID CLIENT_ID=$CLIENT_ID make wait)` +1. `SERVER_ID=$(make provision-server | tail -n 1)` +2. `CLIENT_ID=$(make provision-client | tail -n 1)` +3. `read SERVER_IP CLIENT_IP <<< $(make wait SERVER_ID=$SERVER_ID CLIENT_ID=$CLIENT_ID | tail -n 1)` ## Build and run implementations +_WARNING_: Running the perf tests might take a while. + 1. `cd runner` 2. `npm ci` 3. `npm run start -- --client-public-ip $CLIENT_IP --server-public-ip $SERVER_IP` @@ -33,8 +48,8 @@ Benchmark results can be visualized with https://observablehq.com/@mxinden-works ### Nodes -1. `CLIENT_ID=$CLIENT_ID make deprovision-client` -2. `SERVER_ID=$SERVER_ID make deprovision-server` +1. `make deprovision-client CLIENT_ID=$CLIENT_ID` +2. `make deprovision-server SERVER_ID=$SERVER_ID ` ### Bootstrap diff --git a/perf/terraform/.terraform.lock.hcl b/perf/terraform/.terraform.lock.hcl index e54d18d34..05146c6ea 100644 --- a/perf/terraform/.terraform.lock.hcl +++ b/perf/terraform/.terraform.lock.hcl @@ -1,25 +1,63 @@ # This file is maintained automatically by "terraform init". # Manual edits may be lost in future updates. +provider "registry.terraform.io/hashicorp/archive" { + version = "2.3.0" + hashes = [ + "h1:NaDbOqAcA9d8DiAS5/6+5smXwN3/+twJGb3QRiz6pNw=", + "zh:0869128d13abe12b297b0cd13b8767f10d6bf047f5afc4215615aabc39c2eb4f", + "zh:481ed837d63ba3aa45dd8736da83e911e3509dee0e7961bf5c00ed2644f807b3", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:9f08fe2977e2166849be24fb9f394e4d2697414d463f7996fd0d7beb4e19a29c", + "zh:9fe566deeafd460d27999ca0bbfd85426a5fcfcb40007b23884deb76da127b6f", + "zh:a1bd9a60925d9769e0da322e4523330ee86af9dc2e770cba1d0247a999ef29cb", + "zh:bb4094c8149f74308b22a87e1ac19bcccca76e8ef021b571074d9bccf1c0c6f0", + "zh:c8984c9def239041ce41ec8e19bbd76a49e74ed2024ff736dad60429dee89bcc", + "zh:ea4bb5ae73db1de3a586e62f39106f5e56770804a55aa5e6b4f642df973e0e75", + "zh:f44a9d596ecc3a8c5653f56ba0cd202ad93b49f76767f4608daf7260b813289e", + "zh:f5c5e6cc9f7f070020ab7d95fcc9ed8e20d5cf219978295a71236e22cbb6d508", + "zh:fd2273f51dcc8f43403bf1e425ba9db08a57c3ddcba5ad7a51742ccde21ca611", + ] +} + provider "registry.terraform.io/hashicorp/aws" { - version = "4.61.0" - constraints = "~> 4.0" + version = "4.67.0" + constraints = "4.67.0" hashes = [ - "h1:mJSchOA6VkYwEsi+tuspadRmyyE+FGZGYJFUt5kHV+M=", - "zh:051e2588410b7448a5c4c30d668948dd6fdfa8037700bfc00fb228986ccbf3a5", - "zh:082fbcf9706b48d0880ba552a11c29527e228dadd6d83668d0789abda24e5922", - "zh:0e0e72f214fb24f4f9c601cab088a2d8e00ec3327c451bc753911951d773214a", - "zh:3af6d38ca733ca66cce15c6a5735ded7c18348ad26040ebd9a59778b2cd9cf6c", - "zh:404898bc2258bbb9527fa06c72cb927ca011fd9bc3f4b90931c0912652c3f9e9", - "zh:4f617653b0f17a7708bc896f029c4ab0b677a1a1c987bd77166acad1d82db469", - "zh:5dbe393355ac137aa3fd329e3d24871f27012d3ba93d714485b55820df240349", - "zh:6067c2127eb5c879227aca671f101de6dcba909d0d8d15d5711480351962a248", + "h1:5Zfo3GfRSWBaXs4TGQNOflr1XaYj6pRnVJLX5VAjFX4=", + "zh:0843017ecc24385f2b45f2c5fce79dc25b258e50d516877b3affee3bef34f060", + "zh:19876066cfa60de91834ec569a6448dab8c2518b8a71b5ca870b2444febddac6", + "zh:24995686b2ad88c1ffaa242e36eee791fc6070e6144f418048c4ce24d0ba5183", + "zh:4a002990b9f4d6d225d82cb2fb8805789ffef791999ee5d9cb1fef579aeff8f1", + "zh:559a2b5ace06b878c6de3ecf19b94fbae3512562f7a51e930674b16c2f606e29", + "zh:6a07da13b86b9753b95d4d8218f6dae874cf34699bca1470d6effbb4dee7f4b7", + "zh:768b3bfd126c3b77dc975c7c0e5db3207e4f9997cf41aa3385c63206242ba043", + "zh:7be5177e698d4b547083cc738b977742d70ed68487ce6f49ecd0c94dbf9d1362", + "zh:8b562a818915fb0d85959257095251a05c76f3467caa3ba95c583ba5fe043f9b", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:a939f94461f91aa3b7ec7096271e2714309bd917fe9a03e02f68afb556d65e0f", - "zh:b21227b9082e5fafe8b7c415dc6a99c0d82da05492457377a5fe7d4acaed80e2", - "zh:b8d9f09ed5fc8c654b768b7bee1237eaf1e2287c898249e740695055fb0fe072", - "zh:d360e1e185b148ff6b1d0ed4f7d574e08f2391697ab43df62085b04a1a5b1284", - "zh:da962da17ddda744911cb1e92b983fa3874d73a28f3ee72faa9ddb6680a63774", - "zh:e2f1c4f5ebeb4fd7ef690178168a4c529025b54a91bb7a087dcea48e0b82737a", + "zh:9c385d03a958b54e2afd5279cd8c7cbdd2d6ca5c7d6a333e61092331f38af7cf", + "zh:b3ca45f2821a89af417787df8289cb4314b273d29555ad3b2a5ab98bb4816b3b", + "zh:da3c317f1db2469615ab40aa6baba63b5643bae7110ff855277a1fb9d8eb4f2c", + "zh:dc6430622a8dc5cdab359a8704aec81d3825ea1d305bbb3bbd032b1c6adfae0c", + "zh:fac0d2ddeadf9ec53da87922f666e1e73a603a611c57bcbc4b86ac2821619b1d", + ] +} + +provider "registry.terraform.io/hashicorp/random" { + version = "3.5.1" + hashes = [ + "h1:IL9mSatmwov+e0+++YX2V6uel+dV6bn+fC/cnGDK3Ck=", + "zh:04e3fbd610cb52c1017d282531364b9c53ef72b6bc533acb2a90671957324a64", + "zh:119197103301ebaf7efb91df8f0b6e0dd31e6ff943d231af35ee1831c599188d", + "zh:4d2b219d09abf3b1bb4df93d399ed156cadd61f44ad3baf5cf2954df2fba0831", + "zh:6130bdde527587bbe2dcaa7150363e96dbc5250ea20154176d82bc69df5d4ce3", + "zh:6cc326cd4000f724d3086ee05587e7710f032f94fc9af35e96a386a1c6f2214f", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:b6d88e1d28cf2dfa24e9fdcc3efc77adcdc1c3c3b5c7ce503a423efbdd6de57b", + "zh:ba74c592622ecbcef9dc2a4d81ed321c4e44cddf7da799faa324da9bf52a22b2", + "zh:c7c5cde98fe4ef1143bd1b3ec5dc04baf0d4cc3ca2c5c7d40d17c0e9b2076865", + "zh:dac4bad52c940cd0dfc27893507c1e92393846b024c5a9db159a93c534a3da03", + "zh:de8febe2a2acd9ac454b844a4106ed295ae9520ef54dc8ed2faf29f12716b602", + "zh:eab0d0495e7e711cca367f7d4df6e322e6c562fc52151ec931176115b83ed014", ] } diff --git a/perf/terraform/common/files/scale_down.json b/perf/terraform/common/files/scale_down.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/perf/terraform/common/files/scale_down.json @@ -0,0 +1 @@ +{} diff --git a/perf/terraform/common/files/scale_down.py b/perf/terraform/common/files/scale_down.py index f9609b40b..e8d0f530c 100644 --- a/perf/terraform/common/files/scale_down.py +++ b/perf/terraform/common/files/scale_down.py @@ -3,26 +3,40 @@ import json import datetime -regions = os.environ['AWS_REGIONS'] -tags = os.environ['TAGS'] -max_age_minutes = os.environ['MAX_AGE_MINUTES'] - - -def is_lost(instance): - return instance.launch_time.replace(tzinfo=None) < datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(minutes=max_age_minutes) - +regions = json.loads(os.environ['REGIONS']) # Assuming this is a JSON array +tags = json.loads(os.environ['TAGS']) # Assuming this is a JSON object +max_age_minutes = int(os.environ['MAX_AGE_MINUTES']) # Assuming this is an integer def lambda_handler(event, context): # iterate over all regions - for region in json.loads(regions): + for region in regions: ec2 = boto3.client('ec2', region_name=region) - filter = [{'Name': 'instance-state-name', 'Values': ['running']}] - filter = filter + [{ + + now = datetime.datetime.now(datetime.timezone.utc) + + filters = [{'Name': 'instance-state-name', 'Values': ['running']}] + filters = filters + [{ 'Name': 'tag:' + k, 'Values': [v] - } for k, v in json.loads(tags).items()] - instances = [i.id for i in ec2.describe_instances( - Filters=filter) if is_lost(i)] - print('found instances: ' + str(instances)) - ec2.stop_instances(InstanceIds=instances) - print('stopped instances: ' + str(instances)) + } for k, v in tags.items()] + + response = ec2.describe_instances(Filters=filters) + + instances = [] + + for reservation in response['Reservations']: + for instance in reservation['Instances']: + launch_time = instance['LaunchTime'] + instance_id = instance['InstanceId'] + + print( + f'Instance ID: {instance_id} has been running since {launch_time}.') + + if launch_time < now - datetime.timedelta(minutes=max_age_minutes): + print( + f'Instance ID: {instance_id} has been running for more than {max_age_minutes} minutes.') + instances.append(instance_id) + + if instances: + ec2.terminate_instances(InstanceIds=instances) + print(f'Terminating instances: {instances}') diff --git a/perf/terraform/common/files/scale_down.yml b/perf/terraform/common/files/scale_down.yml new file mode 100644 index 000000000..afafca1c7 --- /dev/null +++ b/perf/terraform/common/files/scale_down.yml @@ -0,0 +1,19 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: An AWS Lambda application. + +Resources: + ScaleDown: + Type: AWS::Serverless::Function + Properties: + Handler: scale_down.lambda_handler + Runtime: python3.9 + CodeUri: . + Environment: + Variables: + REGIONS: '["us-west-2", "us-east-1"]' + TAGS: '{"Project":"perf", "Name":"node"}' + MAX_AGE_MINUTES: '30' + Policies: + - AmazonEC2FullAccess + Timeout: 30 diff --git a/perf/terraform/common/main.tf b/perf/terraform/common/main.tf index ddd6a6edc..b7619898c 100644 --- a/perf/terraform/common/main.tf +++ b/perf/terraform/common/main.tf @@ -16,7 +16,9 @@ variable "bucket_name" { provider "aws" { region = var.region - tags = var.common_tags + default_tags { + tags = var.common_tags + } } resource "aws_iam_user" "perf" { @@ -29,6 +31,11 @@ data "aws_iam_policy_document" "perf" { resources = ["*"] effect = "Allow" } + statement { + actions = ["iam:PassRole"] + resources = [aws_iam_role.perf_role.arn] + effect = "Allow" + } } resource "aws_iam_user_policy" "perf" { @@ -42,7 +49,16 @@ resource "aws_s3_bucket" "perf" { bucket = var.bucket_name } +resource "aws_s3_bucket_ownership_controls" "perf" { + bucket = aws_s3_bucket.perf.id + rule { + object_ownership = "BucketOwnerPreferred" + } +} + resource "aws_s3_bucket_acl" "perf" { + depends_on = [aws_s3_bucket_ownership_controls.perf] + bucket = aws_s3_bucket.perf.id acl = "private" } @@ -87,3 +103,7 @@ resource "aws_iam_role_policy" "perf_bucket" { role = aws_iam_role.perf_role.name policy = data.aws_iam_policy_document.perf_bucket.json } + +output "bucket_name" { + value = aws_s3_bucket.perf.bucket +} diff --git a/perf/terraform/common/scale-down.tf b/perf/terraform/common/scale-down.tf index c2352424f..f9eeae608 100644 --- a/perf/terraform/common/scale-down.tf +++ b/perf/terraform/common/scale-down.tf @@ -15,7 +15,7 @@ resource "aws_lambda_function" "scale_down" { function_name = "perf-scale-down" role = aws_iam_role.scale_down.arn handler = "scale_down.lambda_handler" - runtime = "python3.10" + runtime = "python3.9" memory_size = 128 timeout = 30 @@ -23,7 +23,7 @@ resource "aws_lambda_function" "scale_down" { variables = { REGIONS = jsonencode(local.regions) TAGS = jsonencode(local.tags) - MAX_AGE_MINUTES = 30 + MAX_AGE_MINUTES = 90 } } } @@ -35,7 +35,7 @@ resource "aws_cloudwatch_log_group" "scale_down" { resource "aws_cloudwatch_event_rule" "scale_down" { name = "perf-scale-down-rule" - schedule_expression = "rate(1 hour)" + schedule_expression = "cron(0 * * * ? *)" } resource "aws_cloudwatch_event_target" "scale_down" { @@ -51,9 +51,20 @@ resource "aws_lambda_permission" "scale_down" { source_arn = aws_cloudwatch_event_rule.scale_down.arn } +data "aws_iam_policy_document" "scale_down_assume_role" { + statement { + actions = ["sts:AssumeRole"] + + principals { + type = "Service" + identifiers = ["lambda.amazonaws.com"] + } + } +} + resource "aws_iam_role" "scale_down" { name = "perf-scale-down-lambda-role" - assume_role_policy = data.aws_iam_policy_document.lambda_assume_role_policy.json + assume_role_policy = data.aws_iam_policy_document.scale_down_assume_role.json } data "aws_iam_policy_document" "scale_down" { @@ -73,8 +84,8 @@ data "aws_iam_policy_document" "scale_down" { content { test = "StringEquals" - variable = "ec2:ResourceTag/${condition.value.Key}" - values = [condition.value.Value] + variable = "ec2:ResourceTag/${condition.key}" + values = [condition.value] } } } diff --git a/perf/terraform/region/main.tf b/perf/terraform/region/main.tf index d1232b65b..14ebf8663 100644 --- a/perf/terraform/region/main.tf +++ b/perf/terraform/region/main.tf @@ -121,16 +121,12 @@ resource "aws_launch_template" "perf" { image_id = var.ami instance_type = "m5n.8xlarge" - subnet_id = aws_subnet.perf.id - key_name = aws_key_pair.perf.key_name - vpc_security_group_ids = [aws_security_group.restricted_inbound.id] - # Debug via: # - /var/log/cloud-init.log and # - /var/log/cloud-init-output.log - user_data = file("${path.module}/files/user-data.sh") + user_data = filebase64("${path.module}/files/user-data.sh") tag_specifications { resource_type = "instance" @@ -145,4 +141,10 @@ resource "aws_launch_template" "perf" { iam_instance_profile { name = "perf-node-profile" } + + network_interfaces { + subnet_id = aws_subnet.perf.id + security_groups = [aws_security_group.restricted_inbound.id] + delete_on_termination = true + } } diff --git a/perf/terraform/terraform.tf b/perf/terraform/terraform.tf index 5e2ea354b..c3b20e500 100644 --- a/perf/terraform/terraform.tf +++ b/perf/terraform/terraform.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "~> 4.0" + version = "4.67.0" } } } @@ -18,7 +18,7 @@ resource "random_id" "bucket_id" { } module "common" { - source = "${path.module}/common" + source = "./common" region = "us-west-2" common_tags = local.tags @@ -26,7 +26,7 @@ module "common" { } module "server_region" { - source = "${path.module}/region" + source = "./region" region = "us-west-2" ami = "ami-0747e613a2a1ff483" @@ -34,7 +34,7 @@ module "server_region" { } module "client_region" { - source = "${path.module}/region" + source = "./region" region = "us-east-1" ami = "ami-06e46074ae430fba6" From f76bf6783fa120a30361752ab2a5dc424d4fe42b Mon Sep 17 00:00:00 2001 From: galargh Date: Wed, 24 May 2023 21:38:24 +0200 Subject: [PATCH 06/41] debug: make perf tests quicker for testing automation --- perf/runner/.gitignore | 2 +- perf/runner/benchmark-results.json | 4661 ++++++++++++++-------------- perf/runner/src/index.ts | 9 +- 3 files changed, 2310 insertions(+), 2362 deletions(-) diff --git a/perf/runner/.gitignore b/perf/runner/.gitignore index 6a7f7218f..5c09c53cd 100644 --- a/perf/runner/.gitignore +++ b/perf/runner/.gitignore @@ -1,2 +1,2 @@ # Ignore built ts files -dist/**/* \ No newline at end of file +dist/**/* diff --git a/perf/runner/benchmark-results.json b/perf/runner/benchmark-results.json index e7370ad16..89582d4e8 100644 --- a/perf/runner/benchmark-results.json +++ b/perf/runner/benchmark-results.json @@ -7,29 +7,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.071717831, - "uploadSeconds": 1.108251356, - "downloadSeconds": 8.7e-8 + "connectionEstablishedSeconds": 0.068663639, + "uploadSeconds": 0.971522237, + "downloadSeconds": 7.5e-8 }, { - "connectionEstablishedSeconds": 0.06313201, - "uploadSeconds": 0.985241566, - "downloadSeconds": 1.05e-7 + "connectionEstablishedSeconds": 0.064571264, + "uploadSeconds": 1.006864584, + "downloadSeconds": 8.9e-8 }, { - "connectionEstablishedSeconds": 0.066539845, - "uploadSeconds": 1.032252996, - "downloadSeconds": 7.7e-8 + "connectionEstablishedSeconds": 0.066528055, + "uploadSeconds": 1.036081606, + "downloadSeconds": 9e-8 }, { - "connectionEstablishedSeconds": 0.06276987, - "uploadSeconds": 0.976620431, - "downloadSeconds": 8.2e-8 + "connectionEstablishedSeconds": 0.065578595, + "uploadSeconds": 1.019824496, + "downloadSeconds": 7.2e-8 }, { - "connectionEstablishedSeconds": 0.065300697, - "uploadSeconds": 1.018646835, - "downloadSeconds": 9.1e-8 + "connectionEstablishedSeconds": 0.064304559, + "uploadSeconds": 0.980179797, + "downloadSeconds": 8.8e-8 } ], "implementation": "quic-go", @@ -39,29 +39,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.126148138, - "uploadSeconds": 35.39770708, - "downloadSeconds": 0.062901647 + "connectionEstablishedSeconds": 0.128405044, + "uploadSeconds": 35.73242469, + "downloadSeconds": 0.063445019 }, { - "connectionEstablishedSeconds": 0.12372451, - "uploadSeconds": 34.877587988, - "downloadSeconds": 0.061690616 + "connectionEstablishedSeconds": 0.123901414, + "uploadSeconds": 41.486132683, + "downloadSeconds": 0.062074179 }, { - "connectionEstablishedSeconds": 0.125053112, - "uploadSeconds": 35.098348121, - "downloadSeconds": 0.062292537 + "connectionEstablishedSeconds": 0.11996276, + "uploadSeconds": 37.559449169, + "downloadSeconds": 0.059935097 }, { - "connectionEstablishedSeconds": 0.123974689, - "uploadSeconds": 34.782441092, - "downloadSeconds": 0.061811206 + "connectionEstablishedSeconds": 0.125793813, + "uploadSeconds": 35.25923725, + "downloadSeconds": 0.06271233 }, { - "connectionEstablishedSeconds": 0.125870163, - "uploadSeconds": 35.341888119, - "downloadSeconds": 0.062707768 + "connectionEstablishedSeconds": 0.129607113, + "uploadSeconds": 36.401483646, + "downloadSeconds": 0.064605546 } ], "implementation": "rust-libp2p", @@ -71,29 +71,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.06387589, - "uploadSeconds": 14.897244537, - "downloadSeconds": 0.000086712 + "connectionEstablishedSeconds": 0.064385572, + "uploadSeconds": 6.841925542, + "downloadSeconds": 0.000106173 }, { - "connectionEstablishedSeconds": 0.064333418, - "uploadSeconds": 10.918767598, - "downloadSeconds": 0.000107009 + "connectionEstablishedSeconds": 0.062341568, + "uploadSeconds": 14.459879836, + "downloadSeconds": 0.000094973 }, { - "connectionEstablishedSeconds": 0.073568486, - "uploadSeconds": 9.286607313, - "downloadSeconds": 0.000220465 + "connectionEstablishedSeconds": 0.062272847, + "uploadSeconds": 14.251757072, + "downloadSeconds": 0.000139221 }, { - "connectionEstablishedSeconds": 0.064221808, - "uploadSeconds": 6.274033928, - "downloadSeconds": 0.000063738 + "connectionEstablishedSeconds": 0.064950359, + "uploadSeconds": 12.733163519, + "downloadSeconds": 0.000235574 }, { - "connectionEstablishedSeconds": 0.063970082, - "uploadSeconds": 13.355328015, - "downloadSeconds": 0.00011874 + "connectionEstablishedSeconds": 0.063323857, + "uploadSeconds": 9.784013955, + "downloadSeconds": 0.000182479 } ], "implementation": "rust-libp2p", @@ -103,29 +103,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.0656414, - "uploadSeconds": 1.441617759, - "downloadSeconds": 0.000192843 + "connectionEstablishedSeconds": 0.066722219, + "uploadSeconds": 1.418815168, + "downloadSeconds": 0.000120128 }, { - "connectionEstablishedSeconds": 0.063041674, - "uploadSeconds": 1.391953849, - "downloadSeconds": 0.000051184 + "connectionEstablishedSeconds": 0.065270178, + "uploadSeconds": 1.4420772, + "downloadSeconds": 0.00003674 }, { - "connectionEstablishedSeconds": 0.062063281, - "uploadSeconds": 1.384806358, - "downloadSeconds": 0.000057135 + "connectionEstablishedSeconds": 0.064480199, + "uploadSeconds": 1.474654688, + "downloadSeconds": 0.000168878 }, { - "connectionEstablishedSeconds": 0.064573601, - "uploadSeconds": 1.424646168, - "downloadSeconds": 0.000048773 + "connectionEstablishedSeconds": 0.066338957, + "uploadSeconds": 1.4550637499999999, + "downloadSeconds": 0.000088704 }, { - "connectionEstablishedSeconds": 0.064452347, - "uploadSeconds": 1.41460567, - "downloadSeconds": 0.000047386 + "connectionEstablishedSeconds": 0.064319592, + "uploadSeconds": 1.421135676, + "downloadSeconds": 0.000038847 } ], "implementation": "rust-libp2p-quinn", @@ -136,28 +136,28 @@ "result": [ { "connectionEstablishedSeconds": 0, - "uploadSeconds": 2.7907368139999997, - "downloadSeconds": 0.000004624 + "uploadSeconds": 3.008602379, + "downloadSeconds": 0.000003705 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 2.7706807060000003, - "downloadSeconds": 0.00000681 + "uploadSeconds": 2.759663186, + "downloadSeconds": 0.000006407 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 2.719605393, - "downloadSeconds": 0.000004626 + "uploadSeconds": 2.71729437, + "downloadSeconds": 0.000004401 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 3.003131051, - "downloadSeconds": 0.000004275 + "uploadSeconds": 2.979351147, + "downloadSeconds": 0.000002086 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 3.074974594, - "downloadSeconds": 0.000004652 + "uploadSeconds": 2.763083469, + "downloadSeconds": 0.000003775 } ], "implementation": "https", @@ -167,29 +167,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.18356968, - "uploadSeconds": 2.845136064, - "downloadSeconds": 0.121465042 + "connectionEstablishedSeconds": 0.193456319, + "uploadSeconds": 2.894589803, + "downloadSeconds": 0.126693121 }, { - "connectionEstablishedSeconds": 0.194598603, - "uploadSeconds": 2.849080344, - "downloadSeconds": 0.126641813 + "connectionEstablishedSeconds": 0.19064022, + "uploadSeconds": 2.862888042, + "downloadSeconds": 0.125102764 }, { - "connectionEstablishedSeconds": 0.187702518, - "uploadSeconds": 2.859621042, - "downloadSeconds": 0.12183152 + "connectionEstablishedSeconds": 0.192647656, + "uploadSeconds": 2.920079595, + "downloadSeconds": 0.127129465 }, { - "connectionEstablishedSeconds": 0.191923365, - "uploadSeconds": 2.864386991, - "downloadSeconds": 0.124702355 + "connectionEstablishedSeconds": 0.189460382, + "uploadSeconds": 2.856993687, + "downloadSeconds": 0.125608271 }, { - "connectionEstablishedSeconds": 0.194006051, - "uploadSeconds": 2.887186679, - "downloadSeconds": 0.125618279 + "connectionEstablishedSeconds": 0.19275431, + "uploadSeconds": 2.841484546, + "downloadSeconds": 0.12705017 } ], "implementation": "go-libp2p", @@ -199,29 +199,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.063861006, - "uploadSeconds": 1.258915335, - "downloadSeconds": 0.060972729 + "connectionEstablishedSeconds": 0.067095593, + "uploadSeconds": 1.290156429, + "downloadSeconds": 0.062674435 }, { - "connectionEstablishedSeconds": 0.066730983, - "uploadSeconds": 1.283791855, - "downloadSeconds": 0.062247951 + "connectionEstablishedSeconds": 0.067585844, + "uploadSeconds": 1.306165302, + "downloadSeconds": 0.063240936 }, { - "connectionEstablishedSeconds": 0.063911766, - "uploadSeconds": 1.229570152, - "downloadSeconds": 0.059556412 + "connectionEstablishedSeconds": 0.066898552, + "uploadSeconds": 1.306257807, + "downloadSeconds": 0.063334017 }, { - "connectionEstablishedSeconds": 0.067878354, - "uploadSeconds": 1.310084448, - "downloadSeconds": 0.063338809 + "connectionEstablishedSeconds": 0.065124711, + "uploadSeconds": 1.249441625, + "downloadSeconds": 0.060611316 }, { - "connectionEstablishedSeconds": 0.065068424, - "uploadSeconds": 1.251689327, - "downloadSeconds": 0.060601996 + "connectionEstablishedSeconds": 0.067058528, + "uploadSeconds": 1.3092639130000001, + "downloadSeconds": 0.063869855 } ], "implementation": "go-libp2p", @@ -241,29 +241,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.063035848, - "uploadSeconds": 5.57e-7, - "downloadSeconds": 1.031684635 + "connectionEstablishedSeconds": 0.063838891, + "uploadSeconds": 5.37e-7, + "downloadSeconds": 1.057076028 }, { - "connectionEstablishedSeconds": 0.062549491, - "uploadSeconds": 6.24e-7, - "downloadSeconds": 1.062655087 + "connectionEstablishedSeconds": 0.064265954, + "uploadSeconds": 4.84e-7, + "downloadSeconds": 1.082103842 }, { - "connectionEstablishedSeconds": 0.063882753, - "uploadSeconds": 6.15e-7, - "downloadSeconds": 1.365721807 + "connectionEstablishedSeconds": 0.064477977, + "uploadSeconds": 5.17e-7, + "downloadSeconds": 1.058943773 }, { - "connectionEstablishedSeconds": 0.068691444, - "uploadSeconds": 6.46e-7, - "downloadSeconds": 1.129898296 + "connectionEstablishedSeconds": 0.064552736, + "uploadSeconds": 5.06e-7, + "downloadSeconds": 1.059989485 }, { - "connectionEstablishedSeconds": 0.063877163, - "uploadSeconds": 5.54e-7, - "downloadSeconds": 1.049462851 + "connectionEstablishedSeconds": 0.065375131, + "uploadSeconds": 4.4e-7, + "downloadSeconds": 1.074151562 } ], "implementation": "quic-go", @@ -273,29 +273,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.125497053, - "uploadSeconds": 0.062505884, - "downloadSeconds": 41.707398634 + "connectionEstablishedSeconds": 0.1196204, + "uploadSeconds": 0.059629591, + "downloadSeconds": 40.658258768 }, { - "connectionEstablishedSeconds": 0.121197039, - "uploadSeconds": 0.060202899, - "downloadSeconds": 34.43093803 + "connectionEstablishedSeconds": 0.123982377, + "uploadSeconds": 0.061622624, + "downloadSeconds": 34.689422119 }, { - "connectionEstablishedSeconds": 0.127645116, - "uploadSeconds": 0.063521098, - "downloadSeconds": 35.914196199 + "connectionEstablishedSeconds": 0.125931472, + "uploadSeconds": 0.062612666, + "downloadSeconds": 38.848739706 }, { - "connectionEstablishedSeconds": 0.129042543, - "uploadSeconds": 0.06410038, - "downloadSeconds": 36.30029051 + "connectionEstablishedSeconds": 0.124011057, + "uploadSeconds": 0.061629721, + "downloadSeconds": 34.824431693 }, { - "connectionEstablishedSeconds": 0.139024871, - "uploadSeconds": 0.069074608, - "downloadSeconds": 39.297212503 + "connectionEstablishedSeconds": 0.124096367, + "uploadSeconds": 0.061687859, + "downloadSeconds": 36.513967304 } ], "implementation": "rust-libp2p", @@ -305,29 +305,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.061232706, - "uploadSeconds": 0.118743292, - "downloadSeconds": 9.754380328 + "connectionEstablishedSeconds": 0.065462231, + "uploadSeconds": 0.126806154, + "downloadSeconds": 12.391620245 }, { - "connectionEstablishedSeconds": 0.066431038, - "uploadSeconds": 0.129401107, - "downloadSeconds": 27.496442621 + "connectionEstablishedSeconds": 0.065134832, + "uploadSeconds": 0.127062979, + "downloadSeconds": 15.271370696 }, { - "connectionEstablishedSeconds": 0.068765541, - "uploadSeconds": 0.134091062, - "downloadSeconds": 28.775083466 + "connectionEstablishedSeconds": 0.062317905, + "uploadSeconds": 0.121204266, + "downloadSeconds": 10.961394891 }, { - "connectionEstablishedSeconds": 0.062047614, - "uploadSeconds": 0.120672787, - "downloadSeconds": 8.824578368 + "connectionEstablishedSeconds": 0.063375264, + "uploadSeconds": 0.123399154, + "downloadSeconds": 22.563862097 }, { - "connectionEstablishedSeconds": 0.063827674, - "uploadSeconds": 0.124235372, - "downloadSeconds": 25.670433799 + "connectionEstablishedSeconds": 0.065357509, + "uploadSeconds": 0.127505159, + "downloadSeconds": 6.551619549 } ], "implementation": "rust-libp2p", @@ -337,29 +337,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.06307016, - "uploadSeconds": 0.121919556, - "downloadSeconds": 1.317938822 + "connectionEstablishedSeconds": 0.062966123, + "uploadSeconds": 0.121806319, + "downloadSeconds": 1.30233279 }, { - "connectionEstablishedSeconds": 0.063818881, - "uploadSeconds": 0.124205443, - "downloadSeconds": 1.348505136 + "connectionEstablishedSeconds": 0.064318679, + "uploadSeconds": 0.125496609, + "downloadSeconds": 1.34338631 }, { - "connectionEstablishedSeconds": 0.06458344, - "uploadSeconds": 0.125787226, - "downloadSeconds": 1.358472583 + "connectionEstablishedSeconds": 0.065182719, + "uploadSeconds": 0.127050397, + "downloadSeconds": 1.3743094089999999 }, { - "connectionEstablishedSeconds": 0.062156734, - "uploadSeconds": 0.120884064, - "downloadSeconds": 1.306500379 + "connectionEstablishedSeconds": 0.065216987, + "uploadSeconds": 0.127165225, + "downloadSeconds": 1.382179301 }, { - "connectionEstablishedSeconds": 0.063961475, - "uploadSeconds": 0.124511573, - "downloadSeconds": 1.345313962 + "connectionEstablishedSeconds": 0.062322094, + "uploadSeconds": 0.121392866, + "downloadSeconds": 1.316588984 } ], "implementation": "rust-libp2p-quinn", @@ -370,28 +370,28 @@ "result": [ { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187973696, - "downloadSeconds": 2.848235973 + "uploadSeconds": 0.188743823, + "downloadSeconds": 2.642548859 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.179092659, - "downloadSeconds": 2.597372658 + "uploadSeconds": 0.179568213, + "downloadSeconds": 2.630649672 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.186427252, - "downloadSeconds": 2.6870848929999998 + "uploadSeconds": 0.188641591, + "downloadSeconds": 2.642123384 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185136008, - "downloadSeconds": 2.752771338 + "uploadSeconds": 0.186251128, + "downloadSeconds": 2.687805906 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18952669, - "downloadSeconds": 2.80348634 + "uploadSeconds": 0.191026056, + "downloadSeconds": 2.732869955 } ], "implementation": "https", @@ -401,29 +401,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.179393572, - "uploadSeconds": 0.000002311, - "downloadSeconds": 2.832866447 + "connectionEstablishedSeconds": 0.191964023, + "uploadSeconds": 0.000001396, + "downloadSeconds": 3.085054406 }, { - "connectionEstablishedSeconds": 0.19359588, - "uploadSeconds": 0.000003047, - "downloadSeconds": 3.205773539 + "connectionEstablishedSeconds": 0.176920085, + "uploadSeconds": 0.000002603, + "downloadSeconds": 2.799810482 }, { - "connectionEstablishedSeconds": 0.182081015, - "uploadSeconds": 0.000002786, - "downloadSeconds": 2.847979808 + "connectionEstablishedSeconds": 0.185101448, + "uploadSeconds": 0.00000264, + "downloadSeconds": 2.892284196 }, { - "connectionEstablishedSeconds": 0.191907804, - "uploadSeconds": 0.000003374, - "downloadSeconds": 3.195657566 + "connectionEstablishedSeconds": 0.196307763, + "uploadSeconds": 0.000002245, + "downloadSeconds": 3.341566963 }, { - "connectionEstablishedSeconds": 0.190046212, - "uploadSeconds": 0.000002577, - "downloadSeconds": 2.9906799 + "connectionEstablishedSeconds": 0.183285657, + "uploadSeconds": 0.000002387, + "downloadSeconds": 2.895720577 } ], "implementation": "go-libp2p", @@ -433,29 +433,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.065825098, - "uploadSeconds": 0.000003218, - "downloadSeconds": 1.3629588369999999 + "connectionEstablishedSeconds": 0.063238427, + "uploadSeconds": 0.000001392, + "downloadSeconds": 1.26596464 }, { - "connectionEstablishedSeconds": 0.068266897, - "uploadSeconds": 0.000001669, - "downloadSeconds": 1.38042863 + "connectionEstablishedSeconds": 0.067490232, + "uploadSeconds": 0.000001589, + "downloadSeconds": 1.37421532 }, { - "connectionEstablishedSeconds": 0.063680453, - "uploadSeconds": 0.000001863, - "downloadSeconds": 1.328038099 + "connectionEstablishedSeconds": 0.066926398, + "uploadSeconds": 0.000002128, + "downloadSeconds": 1.37513495 }, { - "connectionEstablishedSeconds": 0.06607397, - "uploadSeconds": 0.000002147, - "downloadSeconds": 1.371688504 + "connectionEstablishedSeconds": 0.062912739, + "uploadSeconds": 0.000001221, + "downloadSeconds": 1.311702462 }, { - "connectionEstablishedSeconds": 0.067246739, - "uploadSeconds": 0.000002139, - "downloadSeconds": 1.359028703 + "connectionEstablishedSeconds": 0.065896618, + "uploadSeconds": 0.000001314, + "downloadSeconds": 1.286536913 } ], "implementation": "go-libp2p", @@ -475,504 +475,504 @@ { "result": [ { - "connectionEstablishedSeconds": 0.065165399, - "uploadSeconds": 0.00000205, - "downloadSeconds": 0.062984402 + "connectionEstablishedSeconds": 0.06488713, + "uploadSeconds": 9.19e-7, + "downloadSeconds": 0.062857319 }, { - "connectionEstablishedSeconds": 0.062747394, - "uploadSeconds": 0.000001998, - "downloadSeconds": 0.060839292 + "connectionEstablishedSeconds": 0.062483946, + "uploadSeconds": 0.000001831, + "downloadSeconds": 0.060607392 }, { - "connectionEstablishedSeconds": 0.064625822, - "uploadSeconds": 0.000002479, - "downloadSeconds": 0.062788394 + "connectionEstablishedSeconds": 0.06142815, + "uploadSeconds": 8.84e-7, + "downloadSeconds": 0.059845901 }, { - "connectionEstablishedSeconds": 0.063698972, - "uploadSeconds": 0.000001982, - "downloadSeconds": 0.06184015 + "connectionEstablishedSeconds": 0.063266126, + "uploadSeconds": 0.000001814, + "downloadSeconds": 0.061542901 }, { - "connectionEstablishedSeconds": 0.062634644, - "uploadSeconds": 0.000001991, - "downloadSeconds": 0.060870242 + "connectionEstablishedSeconds": 0.064322322, + "uploadSeconds": 8.1e-7, + "downloadSeconds": 0.062794106 }, { - "connectionEstablishedSeconds": 0.064013275, - "uploadSeconds": 0.000001995, - "downloadSeconds": 0.062124273 + "connectionEstablishedSeconds": 0.063579917, + "uploadSeconds": 0.000001939, + "downloadSeconds": 0.061793134 }, { - "connectionEstablishedSeconds": 0.064267083, - "uploadSeconds": 9.64e-7, - "downloadSeconds": 0.062409567 + "connectionEstablishedSeconds": 0.062640298, + "uploadSeconds": 0.000002002, + "downloadSeconds": 0.060939348 }, { - "connectionEstablishedSeconds": 0.062738711, - "uploadSeconds": 0.000001009, - "downloadSeconds": 0.061048678 + "connectionEstablishedSeconds": 0.061572764, + "uploadSeconds": 0.000001864, + "downloadSeconds": 0.059844235 }, { - "connectionEstablishedSeconds": 0.064751569, - "uploadSeconds": 8.54e-7, - "downloadSeconds": 0.062899016 + "connectionEstablishedSeconds": 0.062662707, + "uploadSeconds": 0.000001864, + "downloadSeconds": 0.061032725 }, { - "connectionEstablishedSeconds": 0.065416862, - "uploadSeconds": 0.000002034, - "downloadSeconds": 0.06361402 + "connectionEstablishedSeconds": 0.062689451, + "uploadSeconds": 0.000001806, + "downloadSeconds": 0.060849314 }, { - "connectionEstablishedSeconds": 0.063444387, - "uploadSeconds": 8.11e-7, - "downloadSeconds": 0.061771271 + "connectionEstablishedSeconds": 0.060444245, + "uploadSeconds": 0.00000193, + "downloadSeconds": 0.059100418 }, { - "connectionEstablishedSeconds": 0.063137822, - "uploadSeconds": 8.55e-7, - "downloadSeconds": 0.061375102 + "connectionEstablishedSeconds": 0.062508004, + "uploadSeconds": 0.000001852, + "downloadSeconds": 0.060803652 }, { - "connectionEstablishedSeconds": 0.065550564, - "uploadSeconds": 8.8e-7, - "downloadSeconds": 0.063849843 + "connectionEstablishedSeconds": 0.064521009, + "uploadSeconds": 0.000002104, + "downloadSeconds": 0.062784003 }, { - "connectionEstablishedSeconds": 0.064651059, - "uploadSeconds": 8.99e-7, - "downloadSeconds": 0.062754622 + "connectionEstablishedSeconds": 0.062374518, + "uploadSeconds": 7.54e-7, + "downloadSeconds": 0.060729101 }, { - "connectionEstablishedSeconds": 0.065312324, - "uploadSeconds": 0.000001972, - "downloadSeconds": 0.063641094 + "connectionEstablishedSeconds": 0.062986822, + "uploadSeconds": 0.000001848, + "downloadSeconds": 0.061419526 }, { - "connectionEstablishedSeconds": 0.062753236, - "uploadSeconds": 8.91e-7, - "downloadSeconds": 0.06103999 + "connectionEstablishedSeconds": 0.063286766, + "uploadSeconds": 0.000001838, + "downloadSeconds": 0.061679645 }, { - "connectionEstablishedSeconds": 0.064600329, - "uploadSeconds": 0.000001966, - "downloadSeconds": 0.064458711 + "connectionEstablishedSeconds": 0.06449417, + "uploadSeconds": 0.00000187, + "downloadSeconds": 0.064305581 }, { - "connectionEstablishedSeconds": 0.065615952, - "uploadSeconds": 0.00000198, - "downloadSeconds": 0.063755344 + "connectionEstablishedSeconds": 0.061786826, + "uploadSeconds": 0.000002048, + "downloadSeconds": 0.059856496 }, { - "connectionEstablishedSeconds": 0.065301512, - "uploadSeconds": 0.000001254, - "downloadSeconds": 0.06361579 + "connectionEstablishedSeconds": 0.062537244, + "uploadSeconds": 0.000001849, + "downloadSeconds": 0.060909401 }, { - "connectionEstablishedSeconds": 0.065926556, - "uploadSeconds": 0.00000202, - "downloadSeconds": 0.064356162 + "connectionEstablishedSeconds": 0.064376883, + "uploadSeconds": 7.66e-7, + "downloadSeconds": 0.062798328 }, { - "connectionEstablishedSeconds": 0.064776862, - "uploadSeconds": 0.000002286, - "downloadSeconds": 0.063039969 + "connectionEstablishedSeconds": 0.061433574, + "uploadSeconds": 0.000001822, + "downloadSeconds": 0.059688401 }, { - "connectionEstablishedSeconds": 0.0653571, - "uploadSeconds": 0.000002036, - "downloadSeconds": 0.063505042 + "connectionEstablishedSeconds": 0.06241839, + "uploadSeconds": 7.49e-7, + "downloadSeconds": 0.060739731 }, { - "connectionEstablishedSeconds": 0.064668791, - "uploadSeconds": 8.23e-7, - "downloadSeconds": 0.062919029 + "connectionEstablishedSeconds": 0.063268989, + "uploadSeconds": 7.61e-7, + "downloadSeconds": 0.061596553 }, { - "connectionEstablishedSeconds": 0.062528538, - "uploadSeconds": 8.27e-7, - "downloadSeconds": 0.06084725 + "connectionEstablishedSeconds": 0.066414821, + "uploadSeconds": 7.46e-7, + "downloadSeconds": 0.064751068 }, { - "connectionEstablishedSeconds": 0.065401851, - "uploadSeconds": 0.000002032, - "downloadSeconds": 0.063516094 + "connectionEstablishedSeconds": 0.063524943, + "uploadSeconds": 0.000001903, + "downloadSeconds": 0.061841533 }, { - "connectionEstablishedSeconds": 0.067184136, - "uploadSeconds": 0.000001065, - "downloadSeconds": 0.065393404 + "connectionEstablishedSeconds": 0.063276246, + "uploadSeconds": 0.000001881, + "downloadSeconds": 0.061584436 }, { - "connectionEstablishedSeconds": 0.064649371, - "uploadSeconds": 8.6e-7, - "downloadSeconds": 0.062844864 + "connectionEstablishedSeconds": 0.064587839, + "uploadSeconds": 0.000001887, + "downloadSeconds": 0.063026474 }, { - "connectionEstablishedSeconds": 0.064501136, - "uploadSeconds": 0.000001924, - "downloadSeconds": 0.062687518 + "connectionEstablishedSeconds": 0.065250554, + "uploadSeconds": 0.000001901, + "downloadSeconds": 0.063914861 }, { - "connectionEstablishedSeconds": 0.063678919, - "uploadSeconds": 0.000002086, - "downloadSeconds": 0.061926582 + "connectionEstablishedSeconds": 0.062156357, + "uploadSeconds": 7.6e-7, + "downloadSeconds": 0.060566451 }, { - "connectionEstablishedSeconds": 0.064837881, - "uploadSeconds": 0.000001932, - "downloadSeconds": 0.063041324 + "connectionEstablishedSeconds": 0.065163547, + "uploadSeconds": 7.72e-7, + "downloadSeconds": 0.063670287 }, { - "connectionEstablishedSeconds": 0.065451424, - "uploadSeconds": 9.38e-7, - "downloadSeconds": 0.063633789 + "connectionEstablishedSeconds": 0.063315452, + "uploadSeconds": 0.0000018, + "downloadSeconds": 0.061674428 }, { - "connectionEstablishedSeconds": 0.06614835, - "uploadSeconds": 0.000001994, - "downloadSeconds": 0.064388666 + "connectionEstablishedSeconds": 0.063380478, + "uploadSeconds": 0.000001745, + "downloadSeconds": 0.061790406 }, { - "connectionEstablishedSeconds": 0.065818051, - "uploadSeconds": 0.00000108, - "downloadSeconds": 0.06417327 + "connectionEstablishedSeconds": 0.064626595, + "uploadSeconds": 0.000001872, + "downloadSeconds": 0.062913441 }, { - "connectionEstablishedSeconds": 0.064165866, - "uploadSeconds": 0.000001895, - "downloadSeconds": 0.061931799 + "connectionEstablishedSeconds": 0.06514523, + "uploadSeconds": 0.000001879, + "downloadSeconds": 0.062825222 }, { - "connectionEstablishedSeconds": 0.065610024, - "uploadSeconds": 7.56e-7, - "downloadSeconds": 0.063755582 + "connectionEstablishedSeconds": 0.064459485, + "uploadSeconds": 0.000001887, + "downloadSeconds": 0.062821292 }, { - "connectionEstablishedSeconds": 0.064895944, - "uploadSeconds": 0.000001911, - "downloadSeconds": 0.062890372 + "connectionEstablishedSeconds": 0.066253555, + "uploadSeconds": 0.000001886, + "downloadSeconds": 0.064580674 }, { - "connectionEstablishedSeconds": 0.063400465, - "uploadSeconds": 9.37e-7, - "downloadSeconds": 0.061724983 + "connectionEstablishedSeconds": 0.064468505, + "uploadSeconds": 7.2e-7, + "downloadSeconds": 0.062916373 }, { - "connectionEstablishedSeconds": 0.062550655, - "uploadSeconds": 0.00000184, - "downloadSeconds": 0.060743791 + "connectionEstablishedSeconds": 0.063095687, + "uploadSeconds": 7.59e-7, + "downloadSeconds": 0.061504988 }, { - "connectionEstablishedSeconds": 0.061837061, - "uploadSeconds": 7.97e-7, - "downloadSeconds": 0.060037219 + "connectionEstablishedSeconds": 0.062483352, + "uploadSeconds": 0.000001864, + "downloadSeconds": 0.060847342 }, { - "connectionEstablishedSeconds": 0.063318984, - "uploadSeconds": 9.51e-7, - "downloadSeconds": 0.061501912 + "connectionEstablishedSeconds": 0.064527068, + "uploadSeconds": 0.000001807, + "downloadSeconds": 0.06284921 }, { - "connectionEstablishedSeconds": 0.062755613, - "uploadSeconds": 0.000001847, - "downloadSeconds": 0.060933817 + "connectionEstablishedSeconds": 0.062523274, + "uploadSeconds": 0.000001939, + "downloadSeconds": 0.060896402 }, { - "connectionEstablishedSeconds": 0.064000301, - "uploadSeconds": 0.000001945, - "downloadSeconds": 0.062272194 + "connectionEstablishedSeconds": 0.065474079, + "uploadSeconds": 0.000001739, + "downloadSeconds": 0.063812404 }, { - "connectionEstablishedSeconds": 0.063320814, - "uploadSeconds": 8.07e-7, - "downloadSeconds": 0.061480115 + "connectionEstablishedSeconds": 0.062631776, + "uploadSeconds": 0.000001808, + "downloadSeconds": 0.060957735 }, { - "connectionEstablishedSeconds": 0.063596796, - "uploadSeconds": 0.000002113, - "downloadSeconds": 0.061863084 + "connectionEstablishedSeconds": 0.064478149, + "uploadSeconds": 0.000001811, + "downloadSeconds": 0.06328586 }, { - "connectionEstablishedSeconds": 0.0626508, - "uploadSeconds": 7.9e-7, - "downloadSeconds": 0.060858716 + "connectionEstablishedSeconds": 0.064369049, + "uploadSeconds": 0.000001755, + "downloadSeconds": 0.062731886 }, { - "connectionEstablishedSeconds": 0.065164927, - "uploadSeconds": 8.62e-7, - "downloadSeconds": 0.06338737 + "connectionEstablishedSeconds": 0.061508042, + "uploadSeconds": 0.000001887, + "downloadSeconds": 0.059872758 }, { - "connectionEstablishedSeconds": 0.065109136, - "uploadSeconds": 0.00000193, - "downloadSeconds": 0.062728035 + "connectionEstablishedSeconds": 0.064326436, + "uploadSeconds": 0.000001789, + "downloadSeconds": 0.061872659 }, { - "connectionEstablishedSeconds": 0.064769405, - "uploadSeconds": 0.000001872, - "downloadSeconds": 0.062852259 + "connectionEstablishedSeconds": 0.064240804, + "uploadSeconds": 0.00000169, + "downloadSeconds": 0.062725133 }, { - "connectionEstablishedSeconds": 0.061786286, - "uploadSeconds": 8.24e-7, - "downloadSeconds": 0.060027114 + "connectionEstablishedSeconds": 0.062320912, + "uploadSeconds": 7.04e-7, + "downloadSeconds": 0.060828243 }, { - "connectionEstablishedSeconds": 0.064935099, - "uploadSeconds": 0.000002051, - "downloadSeconds": 0.063098459 + "connectionEstablishedSeconds": 0.063464511, + "uploadSeconds": 0.000001826, + "downloadSeconds": 0.061819542 }, { - "connectionEstablishedSeconds": 0.065655911, - "uploadSeconds": 8.36e-7, - "downloadSeconds": 0.063901518 + "connectionEstablishedSeconds": 0.065340872, + "uploadSeconds": 0.000001809, + "downloadSeconds": 0.063616552 }, { - "connectionEstablishedSeconds": 0.064747825, - "uploadSeconds": 7.87e-7, - "downloadSeconds": 0.063124483 + "connectionEstablishedSeconds": 0.063314114, + "uploadSeconds": 0.000001829, + "downloadSeconds": 0.061738138 }, { - "connectionEstablishedSeconds": 0.063503289, - "uploadSeconds": 0.000001984, - "downloadSeconds": 0.061868251 + "connectionEstablishedSeconds": 0.065386979, + "uploadSeconds": 0.000001791, + "downloadSeconds": 0.063648812 }, { - "connectionEstablishedSeconds": 0.061415703, - "uploadSeconds": 0.000001962, - "downloadSeconds": 0.05970872 + "connectionEstablishedSeconds": 0.063517435, + "uploadSeconds": 0.000001769, + "downloadSeconds": 0.061911425 }, { - "connectionEstablishedSeconds": 0.064769602, - "uploadSeconds": 8.4e-7, - "downloadSeconds": 0.063023085 + "connectionEstablishedSeconds": 0.060455971, + "uploadSeconds": 0.000001961, + "downloadSeconds": 0.058811756 }, { - "connectionEstablishedSeconds": 0.065505636, - "uploadSeconds": 8.87e-7, - "downloadSeconds": 0.063739308 + "connectionEstablishedSeconds": 0.064616367, + "uploadSeconds": 0.000001923, + "downloadSeconds": 0.062953616 }, { - "connectionEstablishedSeconds": 0.06451846, - "uploadSeconds": 9.46e-7, - "downloadSeconds": 0.062635088 + "connectionEstablishedSeconds": 0.064410183, + "uploadSeconds": 0.000001956, + "downloadSeconds": 0.061932159 }, { - "connectionEstablishedSeconds": 0.066384201, - "uploadSeconds": 0.000002059, - "downloadSeconds": 0.063873253 + "connectionEstablishedSeconds": 0.066156053, + "uploadSeconds": 7.68e-7, + "downloadSeconds": 0.064566131 }, { - "connectionEstablishedSeconds": 0.062558555, - "uploadSeconds": 0.000001889, - "downloadSeconds": 0.060869005 + "connectionEstablishedSeconds": 0.062437355, + "uploadSeconds": 0.000001785, + "downloadSeconds": 0.060726981 }, { - "connectionEstablishedSeconds": 0.066144963, - "uploadSeconds": 0.000001031, - "downloadSeconds": 0.064446439 + "connectionEstablishedSeconds": 0.062192905, + "uploadSeconds": 0.000001946, + "downloadSeconds": 0.060536263 }, { - "connectionEstablishedSeconds": 0.064371163, - "uploadSeconds": 0.000001844, - "downloadSeconds": 0.062515291 + "connectionEstablishedSeconds": 0.065992475, + "uploadSeconds": 0.00000168, + "downloadSeconds": 0.064390333 }, { - "connectionEstablishedSeconds": 0.064233048, - "uploadSeconds": 0.000001994, - "downloadSeconds": 0.0624386 + "connectionEstablishedSeconds": 0.065525251, + "uploadSeconds": 7.09e-7, + "downloadSeconds": 0.063888511 }, { - "connectionEstablishedSeconds": 0.06191039, - "uploadSeconds": 0.00000197, - "downloadSeconds": 0.060132284 + "connectionEstablishedSeconds": 0.065939205, + "uploadSeconds": 8.32e-7, + "downloadSeconds": 0.064554815 }, { - "connectionEstablishedSeconds": 0.064568576, - "uploadSeconds": 0.000002053, - "downloadSeconds": 0.062796254 + "connectionEstablishedSeconds": 0.065506435, + "uploadSeconds": 0.000002034, + "downloadSeconds": 0.063856291 }, { - "connectionEstablishedSeconds": 0.066758576, - "uploadSeconds": 8.63e-7, - "downloadSeconds": 0.064851693 + "connectionEstablishedSeconds": 0.066425376, + "uploadSeconds": 0.000001844, + "downloadSeconds": 0.064728163 }, { - "connectionEstablishedSeconds": 0.061160558, - "uploadSeconds": 0.000001989, - "downloadSeconds": 0.059307607 + "connectionEstablishedSeconds": 0.066165293, + "uploadSeconds": 7.47e-7, + "downloadSeconds": 0.064545913 }, { - "connectionEstablishedSeconds": 0.063013566, - "uploadSeconds": 0.000002047, - "downloadSeconds": 0.061166608 + "connectionEstablishedSeconds": 0.065035418, + "uploadSeconds": 0.000002005, + "downloadSeconds": 0.063411556 }, { - "connectionEstablishedSeconds": 0.062846489, - "uploadSeconds": 0.000001952, - "downloadSeconds": 0.0610489 + "connectionEstablishedSeconds": 0.063229654, + "uploadSeconds": 0.000001932, + "downloadSeconds": 0.061787794 }, { - "connectionEstablishedSeconds": 0.063905027, - "uploadSeconds": 0.000001906, - "downloadSeconds": 0.062143314 + "connectionEstablishedSeconds": 0.065857536, + "uploadSeconds": 0.000001792, + "downloadSeconds": 0.063014235 }, { - "connectionEstablishedSeconds": 0.062881868, - "uploadSeconds": 0.000001966, - "downloadSeconds": 0.061308403 + "connectionEstablishedSeconds": 0.06297993, + "uploadSeconds": 0.000001822, + "downloadSeconds": 0.061267943 }, { - "connectionEstablishedSeconds": 0.064227255, - "uploadSeconds": 0.000001957, - "downloadSeconds": 0.06239708 + "connectionEstablishedSeconds": 0.062498822, + "uploadSeconds": 0.000001732, + "downloadSeconds": 0.060820382 }, { - "connectionEstablishedSeconds": 0.064044998, - "uploadSeconds": 0.000001985, - "downloadSeconds": 0.062253102 + "connectionEstablishedSeconds": 0.061334544, + "uploadSeconds": 7.68e-7, + "downloadSeconds": 0.059707498 }, { - "connectionEstablishedSeconds": 0.062412245, - "uploadSeconds": 0.000002063, - "downloadSeconds": 0.060736469 + "connectionEstablishedSeconds": 0.064359557, + "uploadSeconds": 0.000001835, + "downloadSeconds": 0.062715661 }, { - "connectionEstablishedSeconds": 0.063499965, - "uploadSeconds": 0.000001956, - "downloadSeconds": 0.061751684 + "connectionEstablishedSeconds": 0.06350886, + "uploadSeconds": 0.000001824, + "downloadSeconds": 0.061819536 }, { - "connectionEstablishedSeconds": 0.063699321, - "uploadSeconds": 0.000001905, - "downloadSeconds": 0.061931416 + "connectionEstablishedSeconds": 0.062510941, + "uploadSeconds": 0.000001847, + "downloadSeconds": 0.060904902 }, { - "connectionEstablishedSeconds": 0.066367568, - "uploadSeconds": 0.000001943, - "downloadSeconds": 0.064741811 + "connectionEstablishedSeconds": 0.064446726, + "uploadSeconds": 0.000001919, + "downloadSeconds": 0.062786546 }, { - "connectionEstablishedSeconds": 0.066423741, - "uploadSeconds": 8.75e-7, - "downloadSeconds": 0.064588142 + "connectionEstablishedSeconds": 0.06534114, + "uploadSeconds": 0.000001824, + "downloadSeconds": 0.063730181 }, { - "connectionEstablishedSeconds": 0.063184712, - "uploadSeconds": 0.000001091, - "downloadSeconds": 0.061426575 + "connectionEstablishedSeconds": 0.064263223, + "uploadSeconds": 7.33e-7, + "downloadSeconds": 0.062664078 }, { - "connectionEstablishedSeconds": 0.062697375, - "uploadSeconds": 0.000002063, - "downloadSeconds": 0.061594337 + "connectionEstablishedSeconds": 0.064327565, + "uploadSeconds": 0.000001789, + "downloadSeconds": 0.062762381 }, { - "connectionEstablishedSeconds": 0.065604173, - "uploadSeconds": 0.000001958, - "downloadSeconds": 0.063896418 + "connectionEstablishedSeconds": 0.064470892, + "uploadSeconds": 0.000001838, + "downloadSeconds": 0.062872479 }, { - "connectionEstablishedSeconds": 0.063786339, - "uploadSeconds": 0.000001924, - "downloadSeconds": 0.061962591 + "connectionEstablishedSeconds": 0.063361378, + "uploadSeconds": 7.26e-7, + "downloadSeconds": 0.061756714 }, { - "connectionEstablishedSeconds": 0.064901403, - "uploadSeconds": 8.44e-7, - "downloadSeconds": 0.063061015 + "connectionEstablishedSeconds": 0.066150732, + "uploadSeconds": 0.000001773, + "downloadSeconds": 0.064832635 }, { - "connectionEstablishedSeconds": 0.066902795, - "uploadSeconds": 0.000002142, - "downloadSeconds": 0.065148918 + "connectionEstablishedSeconds": 0.06447775, + "uploadSeconds": 0.000001747, + "downloadSeconds": 0.06280719 }, { - "connectionEstablishedSeconds": 0.06681438, - "uploadSeconds": 9.44e-7, - "downloadSeconds": 0.06453611 + "connectionEstablishedSeconds": 0.06250265, + "uploadSeconds": 0.00000172, + "downloadSeconds": 0.061143724 }, { - "connectionEstablishedSeconds": 0.06516872, - "uploadSeconds": 0.000001025, - "downloadSeconds": 0.063345599 + "connectionEstablishedSeconds": 0.065227921, + "uploadSeconds": 7.5e-7, + "downloadSeconds": 0.063628605 }, { - "connectionEstablishedSeconds": 0.065608415, - "uploadSeconds": 8.83e-7, - "downloadSeconds": 0.063954477 + "connectionEstablishedSeconds": 0.063523292, + "uploadSeconds": 7.94e-7, + "downloadSeconds": 0.06180878 }, { - "connectionEstablishedSeconds": 0.063050374, - "uploadSeconds": 0.0000019, - "downloadSeconds": 0.061264983 + "connectionEstablishedSeconds": 0.063022435, + "uploadSeconds": 0.000001936, + "downloadSeconds": 0.061456683 }, { - "connectionEstablishedSeconds": 0.06506769, - "uploadSeconds": 0.000001938, - "downloadSeconds": 0.06324869 + "connectionEstablishedSeconds": 0.065339679, + "uploadSeconds": 0.000001714, + "downloadSeconds": 0.063600025 }, { - "connectionEstablishedSeconds": 0.063733822, - "uploadSeconds": 8.25e-7, - "downloadSeconds": 0.06194249 + "connectionEstablishedSeconds": 0.064131359, + "uploadSeconds": 0.000001939, + "downloadSeconds": 0.062487512 }, { - "connectionEstablishedSeconds": 0.06545029, - "uploadSeconds": 0.00000198, - "downloadSeconds": 0.063731531 + "connectionEstablishedSeconds": 0.063201195, + "uploadSeconds": 0.000001884, + "downloadSeconds": 0.061657171 }, { - "connectionEstablishedSeconds": 0.063806752, - "uploadSeconds": 0.000001977, - "downloadSeconds": 0.062047961 + "connectionEstablishedSeconds": 0.064213476, + "uploadSeconds": 7.83e-7, + "downloadSeconds": 0.062466066 }, { - "connectionEstablishedSeconds": 0.065782118, - "uploadSeconds": 7.98e-7, - "downloadSeconds": 0.063986379 + "connectionEstablishedSeconds": 0.065218015, + "uploadSeconds": 0.00000199, + "downloadSeconds": 0.063658817 }, { - "connectionEstablishedSeconds": 0.065587017, - "uploadSeconds": 0.000001947, - "downloadSeconds": 0.063807411 + "connectionEstablishedSeconds": 0.065181891, + "uploadSeconds": 7.47e-7, + "downloadSeconds": 0.063628663 }, { - "connectionEstablishedSeconds": 0.064806976, - "uploadSeconds": 0.000001822, - "downloadSeconds": 0.063000614 + "connectionEstablishedSeconds": 0.063481231, + "uploadSeconds": 0.000001929, + "downloadSeconds": 0.061841342 }, { - "connectionEstablishedSeconds": 0.063191426, - "uploadSeconds": 8.52e-7, - "downloadSeconds": 0.061417895 + "connectionEstablishedSeconds": 0.065292605, + "uploadSeconds": 8.42e-7, + "downloadSeconds": 0.063629366 }, { - "connectionEstablishedSeconds": 0.066138367, - "uploadSeconds": 0.000001897, - "downloadSeconds": 0.064314152 + "connectionEstablishedSeconds": 0.065067578, + "uploadSeconds": 8.17e-7, + "downloadSeconds": 0.06344993 }, { - "connectionEstablishedSeconds": 0.06372295, - "uploadSeconds": 0.000001952, - "downloadSeconds": 0.061796685 + "connectionEstablishedSeconds": 0.066225496, + "uploadSeconds": 0.000001903, + "downloadSeconds": 0.065134795 }, { - "connectionEstablishedSeconds": 0.064172483, - "uploadSeconds": 0.00000199, - "downloadSeconds": 0.062531066 + "connectionEstablishedSeconds": 0.063477891, + "uploadSeconds": 0.000001795, + "downloadSeconds": 0.061751113 }, { - "connectionEstablishedSeconds": 0.069595187, - "uploadSeconds": 8.8e-7, - "downloadSeconds": 0.0677336 + "connectionEstablishedSeconds": 0.063098328, + "uploadSeconds": 0.000001874, + "downloadSeconds": 0.061404151 }, { - "connectionEstablishedSeconds": 0.065298142, - "uploadSeconds": 0.000002023, - "downloadSeconds": 0.063484516 + "connectionEstablishedSeconds": 0.063335351, + "uploadSeconds": 0.000001858, + "downloadSeconds": 0.061006764 } ], "implementation": "quic-go", @@ -982,504 +982,504 @@ { "result": [ { - "connectionEstablishedSeconds": 0.128782283, - "uploadSeconds": 0.064142782, - "downloadSeconds": 0.064041615 + "connectionEstablishedSeconds": 0.117914044, + "uploadSeconds": 0.058831947, + "downloadSeconds": 0.058634499 }, { - "connectionEstablishedSeconds": 0.122877358, - "uploadSeconds": 0.061015723, - "downloadSeconds": 0.061037874 + "connectionEstablishedSeconds": 0.129337927, + "uploadSeconds": 0.064389365, + "downloadSeconds": 0.064372711 }, { - "connectionEstablishedSeconds": 0.126806208, - "uploadSeconds": 0.063001184, - "downloadSeconds": 0.06303076 + "connectionEstablishedSeconds": 0.125696382, + "uploadSeconds": 0.062542887, + "downloadSeconds": 0.062533586 }, { - "connectionEstablishedSeconds": 0.127298349, - "uploadSeconds": 0.063292919, - "downloadSeconds": 0.063327184 + "connectionEstablishedSeconds": 0.124048621, + "uploadSeconds": 0.061677151, + "downloadSeconds": 0.061683356 }, { - "connectionEstablishedSeconds": 0.124117775, - "uploadSeconds": 0.061674621, - "downloadSeconds": 0.061733501 + "connectionEstablishedSeconds": 0.117808239, + "uploadSeconds": 0.058590961, + "downloadSeconds": 0.058557948 }, { - "connectionEstablishedSeconds": 0.11815247, - "uploadSeconds": 0.058715189, - "downloadSeconds": 0.058717916 + "connectionEstablishedSeconds": 0.12408088, + "uploadSeconds": 0.061696494, + "downloadSeconds": 0.06166079 }, { - "connectionEstablishedSeconds": 0.130421381, - "uploadSeconds": 0.064805873, - "downloadSeconds": 0.064916393 + "connectionEstablishedSeconds": 0.129338661, + "uploadSeconds": 0.064219525, + "downloadSeconds": 0.064320672 }, { - "connectionEstablishedSeconds": 0.120928897, - "uploadSeconds": 0.060078751, - "downloadSeconds": 0.060161814 + "connectionEstablishedSeconds": 0.127655755, + "uploadSeconds": 0.0634499, + "downloadSeconds": 0.063481699 }, { - "connectionEstablishedSeconds": 0.1208453, - "uploadSeconds": 0.059910829, - "downloadSeconds": 0.059957343 + "connectionEstablishedSeconds": 0.121684902, + "uploadSeconds": 0.060526993, + "downloadSeconds": 0.060505728 }, { - "connectionEstablishedSeconds": 0.129701024, - "uploadSeconds": 0.064453217, - "downloadSeconds": 0.064540534 + "connectionEstablishedSeconds": 0.125826736, + "uploadSeconds": 0.062548907, + "downloadSeconds": 0.062558083 }, { - "connectionEstablishedSeconds": 0.122099613, - "uploadSeconds": 0.060642482, - "downloadSeconds": 0.060735635 + "connectionEstablishedSeconds": 0.120273554, + "uploadSeconds": 0.059748907, + "downloadSeconds": 0.059815825 }, { - "connectionEstablishedSeconds": 0.125861895, - "uploadSeconds": 0.062546269, - "downloadSeconds": 0.062614625 + "connectionEstablishedSeconds": 0.123783327, + "uploadSeconds": 0.061577028, + "downloadSeconds": 0.061530348 }, { - "connectionEstablishedSeconds": 0.121033173, - "uploadSeconds": 0.060119234, - "downloadSeconds": 0.060325896 + "connectionEstablishedSeconds": 0.12823648, + "uploadSeconds": 0.063625064, + "downloadSeconds": 0.063628597 }, { - "connectionEstablishedSeconds": 0.12897512, - "uploadSeconds": 0.064099577, - "downloadSeconds": 0.064192461 + "connectionEstablishedSeconds": 0.127943393, + "uploadSeconds": 0.06363687, + "downloadSeconds": 0.063633453 }, { - "connectionEstablishedSeconds": 0.12537412, - "uploadSeconds": 0.062271465, - "downloadSeconds": 0.062348898 + "connectionEstablishedSeconds": 0.129126934, + "uploadSeconds": 0.064186643, + "downloadSeconds": 0.064207098 }, { - "connectionEstablishedSeconds": 0.122704549, - "uploadSeconds": 0.060939701, - "downloadSeconds": 0.061026676 + "connectionEstablishedSeconds": 0.124049686, + "uploadSeconds": 0.061660371, + "downloadSeconds": 0.061655487 }, { - "connectionEstablishedSeconds": 0.121299417, - "uploadSeconds": 0.060644079, - "downloadSeconds": 0.060340429 + "connectionEstablishedSeconds": 0.125947797, + "uploadSeconds": 0.062696859, + "downloadSeconds": 0.062614258 }, { - "connectionEstablishedSeconds": 0.129463275, - "uploadSeconds": 0.064330819, - "downloadSeconds": 0.064387025 + "connectionEstablishedSeconds": 0.127234183, + "uploadSeconds": 0.063298498, + "downloadSeconds": 0.063245735 }, { - "connectionEstablishedSeconds": 0.118009564, - "uploadSeconds": 0.058634205, - "downloadSeconds": 0.058707631 + "connectionEstablishedSeconds": 0.117473215, + "uploadSeconds": 0.058362871, + "downloadSeconds": 0.058360234 }, { - "connectionEstablishedSeconds": 0.126005819, - "uploadSeconds": 0.06262453, - "downloadSeconds": 0.062693139 + "connectionEstablishedSeconds": 0.129129754, + "uploadSeconds": 0.064221842, + "downloadSeconds": 0.064205492 }, { - "connectionEstablishedSeconds": 0.123951592, - "uploadSeconds": 0.061564866, - "downloadSeconds": 0.061667522 + "connectionEstablishedSeconds": 0.125749097, + "uploadSeconds": 0.062507549, + "downloadSeconds": 0.062529001 }, { - "connectionEstablishedSeconds": 0.130207645, - "uploadSeconds": 0.064686677, - "downloadSeconds": 0.064783184 + "connectionEstablishedSeconds": 0.123629932, + "uploadSeconds": 0.061459391, + "downloadSeconds": 0.061461951 }, { - "connectionEstablishedSeconds": 0.122590137, - "uploadSeconds": 0.060902271, - "downloadSeconds": 0.060967625 + "connectionEstablishedSeconds": 0.128896555, + "uploadSeconds": 0.064091373, + "downloadSeconds": 0.064096147 }, { - "connectionEstablishedSeconds": 0.121903049, - "uploadSeconds": 0.060545381, - "downloadSeconds": 0.060599883 + "connectionEstablishedSeconds": 0.121794929, + "uploadSeconds": 0.060553527, + "downloadSeconds": 0.060572893 }, { - "connectionEstablishedSeconds": 0.127654451, - "uploadSeconds": 0.063419366, - "downloadSeconds": 0.063509647 + "connectionEstablishedSeconds": 0.117345028, + "uploadSeconds": 0.058269004, + "downloadSeconds": 0.058326628 }, { - "connectionEstablishedSeconds": 0.123890299, - "uploadSeconds": 0.061515197, - "downloadSeconds": 0.061600551 + "connectionEstablishedSeconds": 0.126094789, + "uploadSeconds": 0.06266925, + "downloadSeconds": 0.062677163 }, { - "connectionEstablishedSeconds": 0.127159301, - "uploadSeconds": 0.063216999, - "downloadSeconds": 0.063270615 + "connectionEstablishedSeconds": 0.125756326, + "uploadSeconds": 0.062499303, + "downloadSeconds": 0.062541549 }, { - "connectionEstablishedSeconds": 0.11853953, - "uploadSeconds": 0.058840163, - "downloadSeconds": 0.058910879 + "connectionEstablishedSeconds": 0.125292515, + "uploadSeconds": 0.062245107, + "downloadSeconds": 0.062286821 }, { - "connectionEstablishedSeconds": 0.125482649, - "uploadSeconds": 0.062332114, - "downloadSeconds": 0.062400346 + "connectionEstablishedSeconds": 0.126254646, + "uploadSeconds": 0.062751342, + "downloadSeconds": 0.062759833 }, { - "connectionEstablishedSeconds": 0.122352409, - "uploadSeconds": 0.060781148, - "downloadSeconds": 0.060850876 + "connectionEstablishedSeconds": 0.121698597, + "uploadSeconds": 0.060474917, + "downloadSeconds": 0.060473682 }, { - "connectionEstablishedSeconds": 0.127330874, - "uploadSeconds": 0.063281691, - "downloadSeconds": 0.063333099 + "connectionEstablishedSeconds": 0.11982186, + "uploadSeconds": 0.059530054, + "downloadSeconds": 0.059532278 }, { - "connectionEstablishedSeconds": 0.125958156, - "uploadSeconds": 0.062593238, - "downloadSeconds": 0.062644244 + "connectionEstablishedSeconds": 0.125813863, + "uploadSeconds": 0.062563828, + "downloadSeconds": 0.062562123 }, { - "connectionEstablishedSeconds": 0.126108225, - "uploadSeconds": 0.062657803, - "downloadSeconds": 0.062761149 + "connectionEstablishedSeconds": 0.120111482, + "uploadSeconds": 0.059683619, + "downloadSeconds": 0.06032216 }, { - "connectionEstablishedSeconds": 0.120901849, - "uploadSeconds": 0.06002898, - "downloadSeconds": 0.060096329 + "connectionEstablishedSeconds": 0.123824867, + "uploadSeconds": 0.061500033, + "downloadSeconds": 0.061574041 }, { - "connectionEstablishedSeconds": 0.130562683, - "uploadSeconds": 0.064496581, - "downloadSeconds": 0.064553639 + "connectionEstablishedSeconds": 0.11978968, + "uploadSeconds": 0.059542049, + "downloadSeconds": 0.059545694 }, { - "connectionEstablishedSeconds": 0.126918076, - "uploadSeconds": 0.063321541, - "downloadSeconds": 0.063453397 + "connectionEstablishedSeconds": 0.125650186, + "uploadSeconds": 0.062460174, + "downloadSeconds": 0.062536015 }, { - "connectionEstablishedSeconds": 0.12198058, - "uploadSeconds": 0.06060065, - "downloadSeconds": 0.060660093 + "connectionEstablishedSeconds": 0.119980873, + "uploadSeconds": 0.059646191, + "downloadSeconds": 0.059623655 }, { - "connectionEstablishedSeconds": 0.1259285, - "uploadSeconds": 0.062543989, - "downloadSeconds": 0.062632145 + "connectionEstablishedSeconds": 0.122278741, + "uploadSeconds": 0.061289687, + "downloadSeconds": 0.060741838 }, { - "connectionEstablishedSeconds": 0.12017305, - "uploadSeconds": 0.059617034, - "downloadSeconds": 0.059714616 + "connectionEstablishedSeconds": 0.127994603, + "uploadSeconds": 0.063612181, + "downloadSeconds": 0.063647272 }, { - "connectionEstablishedSeconds": 0.120856119, - "uploadSeconds": 0.0600165, - "downloadSeconds": 0.060091443 + "connectionEstablishedSeconds": 0.125683139, + "uploadSeconds": 0.062511818, + "downloadSeconds": 0.062504393 }, { - "connectionEstablishedSeconds": 0.126045508, - "uploadSeconds": 0.06261744, - "downloadSeconds": 0.062673731 + "connectionEstablishedSeconds": 0.123121098, + "uploadSeconds": 0.061189226, + "downloadSeconds": 0.061209897 }, { - "connectionEstablishedSeconds": 0.124257681, - "uploadSeconds": 0.061677647, - "downloadSeconds": 0.061778575 + "connectionEstablishedSeconds": 0.117695346, + "uploadSeconds": 0.058538495, + "downloadSeconds": 0.058503865 }, { - "connectionEstablishedSeconds": 0.125857894, - "uploadSeconds": 0.062652721, - "downloadSeconds": 0.062597471 + "connectionEstablishedSeconds": 0.125690572, + "uploadSeconds": 0.062623286, + "downloadSeconds": 0.062535532 }, { - "connectionEstablishedSeconds": 0.122715896, - "uploadSeconds": 0.060923454, - "downloadSeconds": 0.06102335 + "connectionEstablishedSeconds": 0.123343502, + "uploadSeconds": 0.061285483, + "downloadSeconds": 0.061321409 }, { - "connectionEstablishedSeconds": 0.126295478, - "uploadSeconds": 0.062703852, - "downloadSeconds": 0.062786489 + "connectionEstablishedSeconds": 0.12584052, + "uploadSeconds": 0.062549027, + "downloadSeconds": 0.062568991 }, { - "connectionEstablishedSeconds": 0.130609852, - "uploadSeconds": 0.0648943, - "downloadSeconds": 0.064971453 + "connectionEstablishedSeconds": 0.129174715, + "uploadSeconds": 0.064223462, + "downloadSeconds": 0.064223164 }, { - "connectionEstablishedSeconds": 0.124722058, - "uploadSeconds": 0.061948955, - "downloadSeconds": 0.062011269 + "connectionEstablishedSeconds": 0.125759665, + "uploadSeconds": 0.062487151, + "downloadSeconds": 0.062785986 }, { - "connectionEstablishedSeconds": 0.128852791, - "uploadSeconds": 0.064004153, - "downloadSeconds": 0.064074731 + "connectionEstablishedSeconds": 0.121995084, + "uploadSeconds": 0.060662899, + "downloadSeconds": 0.06066677 }, { - "connectionEstablishedSeconds": 0.129624863, - "uploadSeconds": 0.064394522, - "downloadSeconds": 0.064471689 + "connectionEstablishedSeconds": 0.119592911, + "uploadSeconds": 0.059453386, + "downloadSeconds": 0.05945651 }, { - "connectionEstablishedSeconds": 0.129167269, - "uploadSeconds": 0.064227411, - "downloadSeconds": 0.064319623 + "connectionEstablishedSeconds": 0.124013011, + "uploadSeconds": 0.061656102, + "downloadSeconds": 0.061668502 }, { - "connectionEstablishedSeconds": 0.124525167, - "uploadSeconds": 0.061863103, - "downloadSeconds": 0.061928295 + "connectionEstablishedSeconds": 0.127730207, + "uploadSeconds": 0.0636424, + "downloadSeconds": 0.063506917 }, { - "connectionEstablishedSeconds": 0.127854544, - "uploadSeconds": 0.063500323, - "downloadSeconds": 0.063627182 + "connectionEstablishedSeconds": 0.127385172, + "uploadSeconds": 0.06336053, + "downloadSeconds": 0.063353217 }, { - "connectionEstablishedSeconds": 0.118824595, - "uploadSeconds": 0.059012971, - "downloadSeconds": 0.059077709 + "connectionEstablishedSeconds": 0.117910963, + "uploadSeconds": 0.058578741, + "downloadSeconds": 0.058599423 }, { - "connectionEstablishedSeconds": 0.12448396, - "uploadSeconds": 0.061848909, - "downloadSeconds": 0.061928463 + "connectionEstablishedSeconds": 0.125323926, + "uploadSeconds": 0.06228637, + "downloadSeconds": 0.062309412 }, { - "connectionEstablishedSeconds": 0.125085891, - "uploadSeconds": 0.062138362, - "downloadSeconds": 0.062185374 + "connectionEstablishedSeconds": 0.128867058, + "uploadSeconds": 0.064073392, + "downloadSeconds": 0.064072262 }, { - "connectionEstablishedSeconds": 0.120385765, - "uploadSeconds": 0.059740462, - "downloadSeconds": 0.059817489 + "connectionEstablishedSeconds": 0.119875016, + "uploadSeconds": 0.059568332, + "downloadSeconds": 0.059664564 }, { - "connectionEstablishedSeconds": 0.126787493, - "uploadSeconds": 0.063007284, - "downloadSeconds": 0.063050622 + "connectionEstablishedSeconds": 0.119881674, + "uploadSeconds": 0.059570937, + "downloadSeconds": 0.059595551 }, { - "connectionEstablishedSeconds": 0.127343774, - "uploadSeconds": 0.0632535, - "downloadSeconds": 0.06330645 + "connectionEstablishedSeconds": 0.125756087, + "uploadSeconds": 0.062518549, + "downloadSeconds": 0.062555156 }, { - "connectionEstablishedSeconds": 0.129443303, - "uploadSeconds": 0.064301956, - "downloadSeconds": 0.064416941 + "connectionEstablishedSeconds": 0.121874647, + "uploadSeconds": 0.060643272, + "downloadSeconds": 0.060594429 }, { - "connectionEstablishedSeconds": 0.12880829, - "uploadSeconds": 0.063989307, - "downloadSeconds": 0.064044952 + "connectionEstablishedSeconds": 0.117574655, + "uploadSeconds": 0.058395013, + "downloadSeconds": 0.058438876 }, { - "connectionEstablishedSeconds": 0.125715137, - "uploadSeconds": 0.062466058, - "downloadSeconds": 0.062509002 + "connectionEstablishedSeconds": 0.123858673, + "uploadSeconds": 0.061544576, + "downloadSeconds": 0.061577997 }, { - "connectionEstablishedSeconds": 0.130802753, - "uploadSeconds": 0.06499956, - "downloadSeconds": 0.065050477 + "connectionEstablishedSeconds": 0.126205491, + "uploadSeconds": 0.062736613, + "downloadSeconds": 0.062740617 }, { - "connectionEstablishedSeconds": 0.127359533, - "uploadSeconds": 0.06326897, - "downloadSeconds": 0.063325505 + "connectionEstablishedSeconds": 0.127645728, + "uploadSeconds": 0.06355015, + "downloadSeconds": 0.063499064 }, { - "connectionEstablishedSeconds": 0.125144649, - "uploadSeconds": 0.06215178, - "downloadSeconds": 0.062216615 + "connectionEstablishedSeconds": 0.129394022, + "uploadSeconds": 0.064355196, + "downloadSeconds": 0.064345099 }, { - "connectionEstablishedSeconds": 0.128044962, - "uploadSeconds": 0.063625884, - "downloadSeconds": 0.063674575 + "connectionEstablishedSeconds": 0.119937264, + "uploadSeconds": 0.059618541, + "downloadSeconds": 0.059598387 }, { - "connectionEstablishedSeconds": 0.12984098, - "uploadSeconds": 0.064508148, - "downloadSeconds": 0.064584498 + "connectionEstablishedSeconds": 0.125866724, + "uploadSeconds": 0.062468107, + "downloadSeconds": 0.062622304 }, { - "connectionEstablishedSeconds": 0.127962304, - "uploadSeconds": 0.063610496, - "downloadSeconds": 0.063675836 + "connectionEstablishedSeconds": 0.124072403, + "uploadSeconds": 0.061805038, + "downloadSeconds": 0.061704243 }, { - "connectionEstablishedSeconds": 0.120000642, - "uploadSeconds": 0.059590507, - "downloadSeconds": 0.059647934 + "connectionEstablishedSeconds": 0.121683587, + "uploadSeconds": 0.060503896, + "downloadSeconds": 0.060498856 }, { - "connectionEstablishedSeconds": 0.125749348, - "uploadSeconds": 0.062478223, - "downloadSeconds": 0.062530638 + "connectionEstablishedSeconds": 0.123535893, + "uploadSeconds": 0.061414856, + "downloadSeconds": 0.061420664 }, { - "connectionEstablishedSeconds": 0.127441701, - "uploadSeconds": 0.063300783, - "downloadSeconds": 0.063393374 + "connectionEstablishedSeconds": 0.125660217, + "uploadSeconds": 0.062456398, + "downloadSeconds": 0.062500046 }, { - "connectionEstablishedSeconds": 0.123424165, - "uploadSeconds": 0.061305335, - "downloadSeconds": 0.06136762 + "connectionEstablishedSeconds": 0.125879987, + "uploadSeconds": 0.062585134, + "downloadSeconds": 0.062589782 }, { - "connectionEstablishedSeconds": 0.12304951, - "uploadSeconds": 0.061146982, - "downloadSeconds": 0.06118203 + "connectionEstablishedSeconds": 0.121671723, + "uploadSeconds": 0.060445685, + "downloadSeconds": 0.060496337 }, { - "connectionEstablishedSeconds": 0.125308047, - "uploadSeconds": 0.062224494, - "downloadSeconds": 0.062323807 + "connectionEstablishedSeconds": 0.119761444, + "uploadSeconds": 0.059606107, + "downloadSeconds": 0.05954471 }, { - "connectionEstablishedSeconds": 0.12973905, - "uploadSeconds": 0.064472966, - "downloadSeconds": 0.064529546 + "connectionEstablishedSeconds": 0.125858804, + "uploadSeconds": 0.06260909, + "downloadSeconds": 0.062594449 }, { - "connectionEstablishedSeconds": 0.128102656, - "uploadSeconds": 0.063863468, - "downloadSeconds": 0.063635207 + "connectionEstablishedSeconds": 0.122005433, + "uploadSeconds": 0.060636631, + "downloadSeconds": 0.060717436 }, { - "connectionEstablishedSeconds": 0.125637036, - "uploadSeconds": 0.062420345, - "downloadSeconds": 0.062469283 + "connectionEstablishedSeconds": 0.125761947, + "uploadSeconds": 0.062493943, + "downloadSeconds": 0.062492834 }, { - "connectionEstablishedSeconds": 0.118981084, - "uploadSeconds": 0.059069735, - "downloadSeconds": 0.059129922 + "connectionEstablishedSeconds": 0.127381931, + "uploadSeconds": 0.063311625, + "downloadSeconds": 0.063408387 }, { - "connectionEstablishedSeconds": 0.120720618, - "uploadSeconds": 0.059951333, - "downloadSeconds": 0.060029474 + "connectionEstablishedSeconds": 0.125102921, + "uploadSeconds": 0.06222272, + "downloadSeconds": 0.062226545 }, { - "connectionEstablishedSeconds": 0.123367197, - "uploadSeconds": 0.061363585, - "downloadSeconds": 0.061318307 + "connectionEstablishedSeconds": 0.121948047, + "uploadSeconds": 0.060612304, + "downloadSeconds": 0.060640765 }, { - "connectionEstablishedSeconds": 0.125229133, - "uploadSeconds": 0.062206788, - "downloadSeconds": 0.062294396 + "connectionEstablishedSeconds": 0.121462681, + "uploadSeconds": 0.06037682, + "downloadSeconds": 0.060403032 }, { - "connectionEstablishedSeconds": 0.12312703, - "uploadSeconds": 0.061167752, - "downloadSeconds": 0.061232767 + "connectionEstablishedSeconds": 0.125803979, + "uploadSeconds": 0.062537056, + "downloadSeconds": 0.062518618 }, { - "connectionEstablishedSeconds": 0.125516511, - "uploadSeconds": 0.062366896, - "downloadSeconds": 0.062436136 + "connectionEstablishedSeconds": 0.128018538, + "uploadSeconds": 0.063625105, + "downloadSeconds": 0.063684661 }, { - "connectionEstablishedSeconds": 0.126220729, - "uploadSeconds": 0.062574059, - "downloadSeconds": 0.062642618 + "connectionEstablishedSeconds": 0.121811759, + "uploadSeconds": 0.060507406, + "downloadSeconds": 0.060541407 }, { - "connectionEstablishedSeconds": 0.125496394, - "uploadSeconds": 0.0623366, - "downloadSeconds": 0.062402276 + "connectionEstablishedSeconds": 0.125563337, + "uploadSeconds": 0.062420673, + "downloadSeconds": 0.062440885 }, { - "connectionEstablishedSeconds": 0.123646613, - "uploadSeconds": 0.061393611, - "downloadSeconds": 0.061439843 + "connectionEstablishedSeconds": 0.122135716, + "uploadSeconds": 0.060683884, + "downloadSeconds": 0.060688028 }, { - "connectionEstablishedSeconds": 0.128086877, - "uploadSeconds": 0.063653077, - "downloadSeconds": 0.063718554 + "connectionEstablishedSeconds": 0.12571618, + "uploadSeconds": 0.062747876, + "downloadSeconds": 0.062491653 }, { - "connectionEstablishedSeconds": 0.129262803, - "uploadSeconds": 0.064253408, - "downloadSeconds": 0.064303179 + "connectionEstablishedSeconds": 0.122022057, + "uploadSeconds": 0.060627045, + "downloadSeconds": 0.060649261 }, { - "connectionEstablishedSeconds": 0.127148072, - "uploadSeconds": 0.063193085, - "downloadSeconds": 0.063277279 + "connectionEstablishedSeconds": 0.127548676, + "uploadSeconds": 0.06336601, + "downloadSeconds": 0.063406245 }, { - "connectionEstablishedSeconds": 0.128584395, - "uploadSeconds": 0.063907041, - "downloadSeconds": 0.06396357 + "connectionEstablishedSeconds": 0.129237903, + "uploadSeconds": 0.064220412, + "downloadSeconds": 0.064248594 }, { - "connectionEstablishedSeconds": 0.124292227, - "uploadSeconds": 0.061732539, - "downloadSeconds": 0.061779283 + "connectionEstablishedSeconds": 0.121809873, + "uploadSeconds": 0.060565836, + "downloadSeconds": 0.060610217 }, { - "connectionEstablishedSeconds": 0.125535576, - "uploadSeconds": 0.062369058, - "downloadSeconds": 0.062449164 + "connectionEstablishedSeconds": 0.122083072, + "uploadSeconds": 0.060692784, + "downloadSeconds": 0.060709873 }, { - "connectionEstablishedSeconds": 0.130730147, - "uploadSeconds": 0.064963572, - "downloadSeconds": 0.065039169 + "connectionEstablishedSeconds": 0.126097347, + "uploadSeconds": 0.062687736, + "downloadSeconds": 0.06268969 }, { - "connectionEstablishedSeconds": 0.123208736, - "uploadSeconds": 0.061167329, - "downloadSeconds": 0.061260565 + "connectionEstablishedSeconds": 0.125690233, + "uploadSeconds": 0.062476793, + "downloadSeconds": 0.062519338 }, { - "connectionEstablishedSeconds": 0.127480441, - "uploadSeconds": 0.063313736, - "downloadSeconds": 0.063365761 + "connectionEstablishedSeconds": 0.122036672, + "uploadSeconds": 0.060649477, + "downloadSeconds": 0.060666975 }, { - "connectionEstablishedSeconds": 0.124865335, - "uploadSeconds": 0.062069213, - "downloadSeconds": 0.062112659 + "connectionEstablishedSeconds": 0.123676938, + "uploadSeconds": 0.061491798, + "downloadSeconds": 0.06148428 }, { - "connectionEstablishedSeconds": 0.127346962, - "uploadSeconds": 0.063268241, - "downloadSeconds": 0.063310113 + "connectionEstablishedSeconds": 0.127699422, + "uploadSeconds": 0.063437505, + "downloadSeconds": 0.063449133 }, { - "connectionEstablishedSeconds": 0.130435342, - "uploadSeconds": 0.064819538, - "downloadSeconds": 0.064874989 + "connectionEstablishedSeconds": 0.123279523, + "uploadSeconds": 0.061226117, + "downloadSeconds": 0.061252672 }, { - "connectionEstablishedSeconds": 0.122051259, - "uploadSeconds": 0.060598517, - "downloadSeconds": 0.060682717 + "connectionEstablishedSeconds": 0.125515053, + "uploadSeconds": 0.06240927, + "downloadSeconds": 0.06241746 }, { - "connectionEstablishedSeconds": 0.126631048, - "uploadSeconds": 0.062935626, - "downloadSeconds": 0.062977163 + "connectionEstablishedSeconds": 0.127866164, + "uploadSeconds": 0.063533392, + "downloadSeconds": 0.063580884 }, { - "connectionEstablishedSeconds": 0.125074157, - "uploadSeconds": 0.062137365, - "downloadSeconds": 0.06219817 + "connectionEstablishedSeconds": 0.127493511, + "uploadSeconds": 0.063432903, + "downloadSeconds": 0.063401208 } ], "implementation": "rust-libp2p", @@ -1489,504 +1489,504 @@ { "result": [ { - "connectionEstablishedSeconds": 0.065269712, - "uploadSeconds": 0.126687384, - "downloadSeconds": 0.000095155 + "connectionEstablishedSeconds": 0.062600093, + "uploadSeconds": 0.121759564, + "downloadSeconds": 0.000096668 }, { - "connectionEstablishedSeconds": 0.061772457, - "uploadSeconds": 0.119781377, - "downloadSeconds": 0.000088763 + "connectionEstablishedSeconds": 0.065168016, + "uploadSeconds": 0.126908502, + "downloadSeconds": 0.000074853 }, { - "connectionEstablishedSeconds": 0.063039581, - "uploadSeconds": 0.122439261, - "downloadSeconds": 0.000063515 + "connectionEstablishedSeconds": 0.060402683, + "uploadSeconds": 0.117514313, + "downloadSeconds": 0.000073054 }, { - "connectionEstablishedSeconds": 0.065332846, - "uploadSeconds": 0.126995051, - "downloadSeconds": 0.000086659 + "connectionEstablishedSeconds": 0.066024655, + "uploadSeconds": 0.128822696, + "downloadSeconds": 0.000081864 }, { - "connectionEstablishedSeconds": 0.064835466, - "uploadSeconds": 0.126084756, - "downloadSeconds": 0.000102772 + "connectionEstablishedSeconds": 0.066298735, + "uploadSeconds": 0.129484089, + "downloadSeconds": 0.000076365 }, { - "connectionEstablishedSeconds": 0.064252537, - "uploadSeconds": 0.125076452, - "downloadSeconds": 0.00008998 + "connectionEstablishedSeconds": 0.064258817, + "uploadSeconds": 0.125199207, + "downloadSeconds": 0.000055862 }, { - "connectionEstablishedSeconds": 0.062896955, - "uploadSeconds": 0.122347549, - "downloadSeconds": 0.000088885 + "connectionEstablishedSeconds": 0.063066618, + "uploadSeconds": 0.122831382, + "downloadSeconds": 0.000088136 }, { - "connectionEstablishedSeconds": 0.062537671, - "uploadSeconds": 0.121699801, - "downloadSeconds": 0.000105042 + "connectionEstablishedSeconds": 0.062436435, + "uploadSeconds": 0.121547924, + "downloadSeconds": 0.000075148 }, { - "connectionEstablishedSeconds": 0.062560666, - "uploadSeconds": 0.121530528, - "downloadSeconds": 0.000083081 + "connectionEstablishedSeconds": 0.06235574, + "uploadSeconds": 0.121583906, + "downloadSeconds": 0.000094345 }, { - "connectionEstablishedSeconds": 0.06503231, - "uploadSeconds": 0.12662378, - "downloadSeconds": 0.000076862 + "connectionEstablishedSeconds": 0.064193613, + "uploadSeconds": 0.125233213, + "downloadSeconds": 0.000050523 }, { - "connectionEstablishedSeconds": 0.064646935, - "uploadSeconds": 0.125940369, - "downloadSeconds": 0.000048777 + "connectionEstablishedSeconds": 0.062520487, + "uploadSeconds": 0.122156692, + "downloadSeconds": 0.000075356 }, { - "connectionEstablishedSeconds": 0.066467573, - "uploadSeconds": 0.129119886, - "downloadSeconds": 0.000109769 + "connectionEstablishedSeconds": 0.064028759, + "uploadSeconds": 0.125035872, + "downloadSeconds": 0.00006718 }, { - "connectionEstablishedSeconds": 0.066872165, - "uploadSeconds": 0.130419701, - "downloadSeconds": 0.000087987 + "connectionEstablishedSeconds": 0.062642286, + "uploadSeconds": 0.121787442, + "downloadSeconds": 0.000095452 }, { - "connectionEstablishedSeconds": 0.066463517, - "uploadSeconds": 0.129347194, - "downloadSeconds": 0.000088743 + "connectionEstablishedSeconds": 0.062426485, + "uploadSeconds": 0.121683008, + "downloadSeconds": 0.000069536 }, { - "connectionEstablishedSeconds": 0.062683614, - "uploadSeconds": 0.121793655, - "downloadSeconds": 0.000101821 + "connectionEstablishedSeconds": 0.063451013, + "uploadSeconds": 0.12359071, + "downloadSeconds": 0.000110006 }, { - "connectionEstablishedSeconds": 0.064007545, - "uploadSeconds": 0.124402074, - "downloadSeconds": 0.000051133 + "connectionEstablishedSeconds": 0.065149741, + "uploadSeconds": 0.127065715, + "downloadSeconds": 0.000075859 }, { - "connectionEstablishedSeconds": 0.066345827, - "uploadSeconds": 0.129196438, - "downloadSeconds": 0.000087874 + "connectionEstablishedSeconds": 0.062387177, + "uploadSeconds": 0.121665465, + "downloadSeconds": 0.000090093 }, { - "connectionEstablishedSeconds": 0.061959997, - "uploadSeconds": 0.120403148, - "downloadSeconds": 0.000099978 + "connectionEstablishedSeconds": 0.064206419, + "uploadSeconds": 0.12507347, + "downloadSeconds": 0.000079769 }, { - "connectionEstablishedSeconds": 0.064957415, - "uploadSeconds": 0.126484389, - "downloadSeconds": 0.000086646 + "connectionEstablishedSeconds": 0.066101488, + "uploadSeconds": 0.129176106, + "downloadSeconds": 0.000102487 }, { - "connectionEstablishedSeconds": 0.064050398, - "uploadSeconds": 0.124593436, - "downloadSeconds": 0.000093129 + "connectionEstablishedSeconds": 0.064995584, + "uploadSeconds": 0.12546444, + "downloadSeconds": 0.000093765 }, { - "connectionEstablishedSeconds": 0.065479175, - "uploadSeconds": 0.127563336, - "downloadSeconds": 0.000091752 + "connectionEstablishedSeconds": 0.065281929, + "uploadSeconds": 0.127290988, + "downloadSeconds": 0.000088086 }, { - "connectionEstablishedSeconds": 0.064459311, - "uploadSeconds": 0.125632443, - "downloadSeconds": 0.000088312 + "connectionEstablishedSeconds": 0.062469029, + "uploadSeconds": 0.121998725, + "downloadSeconds": 0.000068347 }, { - "connectionEstablishedSeconds": 0.065418506, - "uploadSeconds": 0.127318706, - "downloadSeconds": 0.000099893 + "connectionEstablishedSeconds": 0.062310894, + "uploadSeconds": 0.121515205, + "downloadSeconds": 0.000045471 }, { - "connectionEstablishedSeconds": 0.06115891, - "uploadSeconds": 0.118787732, - "downloadSeconds": 0.000072519 + "connectionEstablishedSeconds": 0.064312393, + "uploadSeconds": 0.125444788, + "downloadSeconds": 0.000071243 }, { - "connectionEstablishedSeconds": 0.063789728, - "uploadSeconds": 0.124151792, - "downloadSeconds": 0.000061331 + "connectionEstablishedSeconds": 0.064964904, + "uploadSeconds": 0.126957433, + "downloadSeconds": 0.000081389 }, { - "connectionEstablishedSeconds": 0.063565335, - "uploadSeconds": 0.123800509, - "downloadSeconds": 0.000066504 + "connectionEstablishedSeconds": 0.06445174, + "uploadSeconds": 0.125624677, + "downloadSeconds": 0.000096227 }, { - "connectionEstablishedSeconds": 0.065340559, - "uploadSeconds": 0.127107457, - "downloadSeconds": 0.000082091 + "connectionEstablishedSeconds": 0.062406364, + "uploadSeconds": 0.121701083, + "downloadSeconds": 0.000072941 }, { - "connectionEstablishedSeconds": 0.065274161, - "uploadSeconds": 0.126985152, - "downloadSeconds": 0.000098832 + "connectionEstablishedSeconds": 0.064507293, + "uploadSeconds": 0.12572421, + "downloadSeconds": 0.000075676 }, { - "connectionEstablishedSeconds": 0.061532374, - "uploadSeconds": 0.119412761, - "downloadSeconds": 0.000087572 + "connectionEstablishedSeconds": 0.062245439, + "uploadSeconds": 0.121511478, + "downloadSeconds": 0.00008053 }, { - "connectionEstablishedSeconds": 0.066015107, - "uploadSeconds": 0.12895258, - "downloadSeconds": 0.000107437 + "connectionEstablishedSeconds": 0.064514181, + "uploadSeconds": 0.125914963, + "downloadSeconds": 0.000099623 }, { - "connectionEstablishedSeconds": 0.063298652, - "uploadSeconds": 0.123194972, - "downloadSeconds": 0.000074348 + "connectionEstablishedSeconds": 0.065784148, + "uploadSeconds": 0.128423248, + "downloadSeconds": 0.000086705 }, { - "connectionEstablishedSeconds": 0.064874404, - "uploadSeconds": 0.126240455, - "downloadSeconds": 0.000102661 + "connectionEstablishedSeconds": 0.063366109, + "uploadSeconds": 0.123705156, + "downloadSeconds": 0.000086683 }, { - "connectionEstablishedSeconds": 0.060850312, - "uploadSeconds": 0.11825899, - "downloadSeconds": 0.000074344 + "connectionEstablishedSeconds": 0.064126896, + "uploadSeconds": 0.12513368, + "downloadSeconds": 0.000087 }, { - "connectionEstablishedSeconds": 0.063836571, - "uploadSeconds": 0.124325405, - "downloadSeconds": 0.000058374 + "connectionEstablishedSeconds": 0.06522082, + "uploadSeconds": 0.127384227, + "downloadSeconds": 0.000078841 }, { - "connectionEstablishedSeconds": 0.062482892, - "uploadSeconds": 0.12198127, - "downloadSeconds": 0.000066463 + "connectionEstablishedSeconds": 0.065178933, + "uploadSeconds": 0.127099449, + "downloadSeconds": 0.000062779 }, { - "connectionEstablishedSeconds": 0.066011166, - "uploadSeconds": 0.128493564, - "downloadSeconds": 0.000086812 + "connectionEstablishedSeconds": 0.065065304, + "uploadSeconds": 0.127017103, + "downloadSeconds": 0.000076416 }, { - "connectionEstablishedSeconds": 0.065877087, - "uploadSeconds": 0.128252352, - "downloadSeconds": 0.000087883 + "connectionEstablishedSeconds": 0.063369575, + "uploadSeconds": 0.123792608, + "downloadSeconds": 0.000070216 }, { - "connectionEstablishedSeconds": 0.06625631, - "uploadSeconds": 0.128871405, - "downloadSeconds": 0.000075303 + "connectionEstablishedSeconds": 0.066176096, + "uploadSeconds": 0.12928697, + "downloadSeconds": 0.000076435 }, { - "connectionEstablishedSeconds": 0.062467673, - "uploadSeconds": 0.121489929, - "downloadSeconds": 0.000093727 + "connectionEstablishedSeconds": 0.062118261, + "uploadSeconds": 0.121487454, + "downloadSeconds": 0.000042447 }, { - "connectionEstablishedSeconds": 0.064259174, - "uploadSeconds": 0.125116047, - "downloadSeconds": 0.000130588 + "connectionEstablishedSeconds": 0.06413027, + "uploadSeconds": 0.125092948, + "downloadSeconds": 0.000090647 }, { - "connectionEstablishedSeconds": 0.064881658, - "uploadSeconds": 0.12634141, - "downloadSeconds": 0.000096298 + "connectionEstablishedSeconds": 0.064355412, + "uploadSeconds": 0.125820027, + "downloadSeconds": 0.000074631 }, { - "connectionEstablishedSeconds": 0.062591642, - "uploadSeconds": 0.121615007, - "downloadSeconds": 0.000052845 + "connectionEstablishedSeconds": 0.064424965, + "uploadSeconds": 0.125626212, + "downloadSeconds": 0.000092905 }, { - "connectionEstablishedSeconds": 0.062009462, - "uploadSeconds": 0.120569713, - "downloadSeconds": 0.000059144 + "connectionEstablishedSeconds": 0.063150565, + "uploadSeconds": 0.123051398, + "downloadSeconds": 0.000094722 }, { - "connectionEstablishedSeconds": 0.065772964, - "uploadSeconds": 0.128015637, - "downloadSeconds": 0.00005976 + "connectionEstablishedSeconds": 0.06528981, + "uploadSeconds": 0.127392345, + "downloadSeconds": 0.000080433 }, { - "connectionEstablishedSeconds": 0.065244623, - "uploadSeconds": 0.127597754, - "downloadSeconds": 0.000101338 + "connectionEstablishedSeconds": 0.064397919, + "uploadSeconds": 0.125604893, + "downloadSeconds": 0.000069993 }, { - "connectionEstablishedSeconds": 0.064528531, - "uploadSeconds": 0.125431869, - "downloadSeconds": 0.000102549 + "connectionEstablishedSeconds": 0.065187591, + "uploadSeconds": 0.126990687, + "downloadSeconds": 0.000091627 }, { - "connectionEstablishedSeconds": 0.064060708, - "uploadSeconds": 0.124861387, - "downloadSeconds": 0.000089563 + "connectionEstablishedSeconds": 0.063417623, + "uploadSeconds": 0.123617361, + "downloadSeconds": 0.000081642 }, { - "connectionEstablishedSeconds": 0.065100315, - "uploadSeconds": 0.126407417, - "downloadSeconds": 0.00009769 + "connectionEstablishedSeconds": 0.064258337, + "uploadSeconds": 0.125301748, + "downloadSeconds": 0.000080782 }, { - "connectionEstablishedSeconds": 0.063827269, - "uploadSeconds": 0.12418934, - "downloadSeconds": 0.000059017 + "connectionEstablishedSeconds": 0.06530541, + "uploadSeconds": 0.127461622, + "downloadSeconds": 0.000079359 }, { - "connectionEstablishedSeconds": 0.063091443, - "uploadSeconds": 0.122694617, - "downloadSeconds": 0.000088479 + "connectionEstablishedSeconds": 0.066364456, + "uploadSeconds": 0.129484859, + "downloadSeconds": 0.000082134 }, { - "connectionEstablishedSeconds": 0.063035134, - "uploadSeconds": 0.122636708, - "downloadSeconds": 0.000090614 + "connectionEstablishedSeconds": 0.063161012, + "uploadSeconds": 0.12313346, + "downloadSeconds": 0.000110439 }, { - "connectionEstablishedSeconds": 0.063237351, - "uploadSeconds": 0.123009684, - "downloadSeconds": 0.000085346 + "connectionEstablishedSeconds": 0.065088703, + "uploadSeconds": 0.127989293, + "downloadSeconds": 0.000128456 }, { - "connectionEstablishedSeconds": 0.065321546, - "uploadSeconds": 0.127202042, - "downloadSeconds": 0.0000863 + "connectionEstablishedSeconds": 0.065123001, + "uploadSeconds": 0.127103757, + "downloadSeconds": 0.000089359 }, { - "connectionEstablishedSeconds": 0.062293646, - "uploadSeconds": 0.121197102, - "downloadSeconds": 0.00008741 + "connectionEstablishedSeconds": 0.064166981, + "uploadSeconds": 0.125169024, + "downloadSeconds": 0.000076537 }, { - "connectionEstablishedSeconds": 0.06499849, - "uploadSeconds": 0.12637115, - "downloadSeconds": 0.000075902 + "connectionEstablishedSeconds": 0.064034879, + "uploadSeconds": 0.124937213, + "downloadSeconds": 0.000092306 }, { - "connectionEstablishedSeconds": 0.064614152, - "uploadSeconds": 0.125767329, - "downloadSeconds": 0.000102428 + "connectionEstablishedSeconds": 0.062318916, + "uploadSeconds": 0.121570439, + "downloadSeconds": 0.00008869 }, { - "connectionEstablishedSeconds": 0.064867917, - "uploadSeconds": 0.126189822, - "downloadSeconds": 0.000049127 + "connectionEstablishedSeconds": 0.06451775, + "uploadSeconds": 0.125880374, + "downloadSeconds": 0.000070733 }, { - "connectionEstablishedSeconds": 0.066343616, - "uploadSeconds": 0.129171678, - "downloadSeconds": 0.000109185 + "connectionEstablishedSeconds": 0.0653148, + "uploadSeconds": 0.127512076, + "downloadSeconds": 0.000105563 }, { - "connectionEstablishedSeconds": 0.063594419, - "uploadSeconds": 0.123729252, - "downloadSeconds": 0.000046197 + "connectionEstablishedSeconds": 0.065928837, + "uploadSeconds": 0.128754109, + "downloadSeconds": 0.000068297 }, { - "connectionEstablishedSeconds": 0.062504828, - "uploadSeconds": 0.121566267, - "downloadSeconds": 0.000054981 + "connectionEstablishedSeconds": 0.063017372, + "uploadSeconds": 0.122802979, + "downloadSeconds": 0.000076553 }, { - "connectionEstablishedSeconds": 0.064002572, - "uploadSeconds": 0.12462905, - "downloadSeconds": 0.000100446 + "connectionEstablishedSeconds": 0.062494702, + "uploadSeconds": 0.121722861, + "downloadSeconds": 0.000102752 }, { - "connectionEstablishedSeconds": 0.063602089, - "uploadSeconds": 0.123874281, - "downloadSeconds": 0.000048411 + "connectionEstablishedSeconds": 0.066021783, + "uploadSeconds": 0.128869731, + "downloadSeconds": 0.000098913 }, { - "connectionEstablishedSeconds": 0.062719554, - "uploadSeconds": 0.121941194, - "downloadSeconds": 0.000089545 + "connectionEstablishedSeconds": 0.06433668, + "uploadSeconds": 0.125500287, + "downloadSeconds": 0.000083697 }, { - "connectionEstablishedSeconds": 0.063417018, - "uploadSeconds": 0.123306077, - "downloadSeconds": 0.000098731 + "connectionEstablishedSeconds": 0.065283629, + "uploadSeconds": 0.127384802, + "downloadSeconds": 0.000105729 }, { - "connectionEstablishedSeconds": 0.064107384, - "uploadSeconds": 0.124691877, - "downloadSeconds": 0.000051022 + "connectionEstablishedSeconds": 0.064466863, + "uploadSeconds": 0.125718278, + "downloadSeconds": 0.000075692 }, { - "connectionEstablishedSeconds": 0.063100152, - "uploadSeconds": 0.122616935, - "downloadSeconds": 0.000099 + "connectionEstablishedSeconds": 0.064268034, + "uploadSeconds": 0.125557539, + "downloadSeconds": 0.000090321 }, { - "connectionEstablishedSeconds": 0.062746556, - "uploadSeconds": 0.121948401, - "downloadSeconds": 0.000095793 + "connectionEstablishedSeconds": 0.06638065, + "uploadSeconds": 0.129462231, + "downloadSeconds": 0.000081654 }, { - "connectionEstablishedSeconds": 0.06261075, - "uploadSeconds": 0.121898582, - "downloadSeconds": 0.000094156 + "connectionEstablishedSeconds": 0.064237751, + "uploadSeconds": 0.125439776, + "downloadSeconds": 0.000106965 }, { - "connectionEstablishedSeconds": 0.062358096, - "uploadSeconds": 0.121059397, - "downloadSeconds": 0.000085366 + "connectionEstablishedSeconds": 0.064175167, + "uploadSeconds": 0.125600749, + "downloadSeconds": 0.000075985 }, { - "connectionEstablishedSeconds": 0.063956063, - "uploadSeconds": 0.12442619, - "downloadSeconds": 0.000084146 + "connectionEstablishedSeconds": 0.064403694, + "uploadSeconds": 0.125558819, + "downloadSeconds": 0.000080568 }, { - "connectionEstablishedSeconds": 0.06177277, - "uploadSeconds": 0.11993679, - "downloadSeconds": 0.000051577 + "connectionEstablishedSeconds": 0.066074582, + "uploadSeconds": 0.128839817, + "downloadSeconds": 0.00008531 }, { - "connectionEstablishedSeconds": 0.065472055, - "uploadSeconds": 0.128132439, - "downloadSeconds": 0.000099309 + "connectionEstablishedSeconds": 0.065286891, + "uploadSeconds": 0.127462148, + "downloadSeconds": 0.000072748 }, { - "connectionEstablishedSeconds": 0.064005678, - "uploadSeconds": 0.124557276, - "downloadSeconds": 0.000071229 + "connectionEstablishedSeconds": 0.064274389, + "uploadSeconds": 0.125370487, + "downloadSeconds": 0.000070981 }, { - "connectionEstablishedSeconds": 0.06607158, - "uploadSeconds": 0.128709658, - "downloadSeconds": 0.000041673 + "connectionEstablishedSeconds": 0.060105349, + "uploadSeconds": 0.116970484, + "downloadSeconds": 0.000091248 }, { - "connectionEstablishedSeconds": 0.06447987, - "uploadSeconds": 0.125384308, - "downloadSeconds": 0.000068772 + "connectionEstablishedSeconds": 0.062335245, + "uploadSeconds": 0.121292054, + "downloadSeconds": 0.000070328 }, { - "connectionEstablishedSeconds": 0.063884104, - "uploadSeconds": 0.124527706, - "downloadSeconds": 0.000111449 + "connectionEstablishedSeconds": 0.062301273, + "uploadSeconds": 0.121239449, + "downloadSeconds": 0.000085547 }, { - "connectionEstablishedSeconds": 0.06461319, - "uploadSeconds": 0.125775606, - "downloadSeconds": 0.000085327 + "connectionEstablishedSeconds": 0.06428912, + "uploadSeconds": 0.125382739, + "downloadSeconds": 0.000081108 }, { - "connectionEstablishedSeconds": 0.064890847, - "uploadSeconds": 0.126204848, - "downloadSeconds": 0.000082451 + "connectionEstablishedSeconds": 0.064360109, + "uploadSeconds": 0.125580701, + "downloadSeconds": 0.000079713 }, { - "connectionEstablishedSeconds": 0.063228089, - "uploadSeconds": 0.122949404, - "downloadSeconds": 0.000146099 + "connectionEstablishedSeconds": 0.065119304, + "uploadSeconds": 0.127077108, + "downloadSeconds": 0.000088751 }, { - "connectionEstablishedSeconds": 0.061495799, - "uploadSeconds": 0.11947625, - "downloadSeconds": 0.000048393 + "connectionEstablishedSeconds": 0.062163236, + "uploadSeconds": 0.121235601, + "downloadSeconds": 0.000079591 }, { - "connectionEstablishedSeconds": 0.065020492, - "uploadSeconds": 0.12666505, - "downloadSeconds": 0.000089146 + "connectionEstablishedSeconds": 0.061306086, + "uploadSeconds": 0.11942279, + "downloadSeconds": 0.000078386 }, { - "connectionEstablishedSeconds": 0.065945204, - "uploadSeconds": 0.128484838, - "downloadSeconds": 0.000106159 + "connectionEstablishedSeconds": 0.061190747, + "uploadSeconds": 0.119219845, + "downloadSeconds": 0.000110473 }, { - "connectionEstablishedSeconds": 0.067762673, - "uploadSeconds": 0.132168213, - "downloadSeconds": 0.000107903 + "connectionEstablishedSeconds": 0.065292125, + "uploadSeconds": 0.127396382, + "downloadSeconds": 0.000068734 }, { - "connectionEstablishedSeconds": 0.065572532, - "uploadSeconds": 0.127516638, - "downloadSeconds": 0.000089004 + "connectionEstablishedSeconds": 0.062185957, + "uploadSeconds": 0.121243088, + "downloadSeconds": 0.000114471 }, { - "connectionEstablishedSeconds": 0.064566376, - "uploadSeconds": 0.125582624, - "downloadSeconds": 0.000092355 + "connectionEstablishedSeconds": 0.063528118, + "uploadSeconds": 0.123997793, + "downloadSeconds": 0.000075911 }, { - "connectionEstablishedSeconds": 0.065893006, - "uploadSeconds": 0.128263391, - "downloadSeconds": 0.000093783 + "connectionEstablishedSeconds": 0.064042916, + "uploadSeconds": 0.125024996, + "downloadSeconds": 0.00007225 }, { - "connectionEstablishedSeconds": 0.062806285, - "uploadSeconds": 0.122113968, - "downloadSeconds": 0.000065137 + "connectionEstablishedSeconds": 0.064443886, + "uploadSeconds": 0.125672597, + "downloadSeconds": 0.000078395 }, { - "connectionEstablishedSeconds": 0.06517263, - "uploadSeconds": 0.12702264, - "downloadSeconds": 0.000102609 + "connectionEstablishedSeconds": 0.063392206, + "uploadSeconds": 0.123587602, + "downloadSeconds": 0.000072712 }, { - "connectionEstablishedSeconds": 0.063970953, - "uploadSeconds": 0.12447171, - "downloadSeconds": 0.000084464 + "connectionEstablishedSeconds": 0.062296009, + "uploadSeconds": 0.121451264, + "downloadSeconds": 0.000089308 }, { - "connectionEstablishedSeconds": 0.063519187, - "uploadSeconds": 0.123752611, - "downloadSeconds": 0.000092866 + "connectionEstablishedSeconds": 0.062416512, + "uploadSeconds": 0.121895573, + "downloadSeconds": 0.000088052 }, { - "connectionEstablishedSeconds": 0.065027565, - "uploadSeconds": 0.126622237, - "downloadSeconds": 0.000106011 + "connectionEstablishedSeconds": 0.063479879, + "uploadSeconds": 0.123484239, + "downloadSeconds": 0.000073097 }, { - "connectionEstablishedSeconds": 0.065309519, - "uploadSeconds": 0.127363373, - "downloadSeconds": 0.000068864 + "connectionEstablishedSeconds": 0.063076285, + "uploadSeconds": 0.122962526, + "downloadSeconds": 0.000067781 }, { - "connectionEstablishedSeconds": 0.060630725, - "uploadSeconds": 0.117690014, - "downloadSeconds": 0.000111107 + "connectionEstablishedSeconds": 0.062992078, + "uploadSeconds": 0.122791521, + "downloadSeconds": 0.000102182 }, { - "connectionEstablishedSeconds": 0.065486703, - "uploadSeconds": 0.127455826, - "downloadSeconds": 0.000090808 + "connectionEstablishedSeconds": 0.062388485, + "uploadSeconds": 0.12169624, + "downloadSeconds": 0.000054821 }, { - "connectionEstablishedSeconds": 0.063195899, - "uploadSeconds": 0.123090512, - "downloadSeconds": 0.000056723 + "connectionEstablishedSeconds": 0.065163787, + "uploadSeconds": 0.127124215, + "downloadSeconds": 0.000071285 }, { - "connectionEstablishedSeconds": 0.06505979, - "uploadSeconds": 0.126614753, - "downloadSeconds": 0.000089765 + "connectionEstablishedSeconds": 0.06500456, + "uploadSeconds": 0.126837921, + "downloadSeconds": 0.000096057 }, { - "connectionEstablishedSeconds": 0.062354526, - "uploadSeconds": 0.12156822, - "downloadSeconds": 0.000086259 + "connectionEstablishedSeconds": 0.060228236, + "uploadSeconds": 0.117322131, + "downloadSeconds": 0.000088203 }, { - "connectionEstablishedSeconds": 0.062418939, - "uploadSeconds": 0.121418247, - "downloadSeconds": 0.000087486 + "connectionEstablishedSeconds": 0.061374285, + "uploadSeconds": 0.119650773, + "downloadSeconds": 0.000093075 }, { - "connectionEstablishedSeconds": 0.065193432, - "uploadSeconds": 0.126871858, - "downloadSeconds": 0.000092619 + "connectionEstablishedSeconds": 0.066049331, + "uploadSeconds": 0.128896322, + "downloadSeconds": 0.000068872 }, { - "connectionEstablishedSeconds": 0.063621014, - "uploadSeconds": 0.123766947, - "downloadSeconds": 0.000062353 + "connectionEstablishedSeconds": 0.063424729, + "uploadSeconds": 0.123681527, + "downloadSeconds": 0.000074472 } ], "implementation": "rust-libp2p", @@ -1996,504 +1996,504 @@ { "result": [ { - "connectionEstablishedSeconds": 0.06295453, - "uploadSeconds": 0.121854033, - "downloadSeconds": 0.000077444 + "connectionEstablishedSeconds": 0.063690418, + "uploadSeconds": 0.123487097, + "downloadSeconds": 0.000077911 }, { - "connectionEstablishedSeconds": 0.065123301, - "uploadSeconds": 0.126731822, - "downloadSeconds": 0.000083647 + "connectionEstablishedSeconds": 0.064549682, + "uploadSeconds": 0.125719346, + "downloadSeconds": 0.000062381 }, { - "connectionEstablishedSeconds": 0.064473496, - "uploadSeconds": 0.125295297, - "downloadSeconds": 0.000093787 + "connectionEstablishedSeconds": 0.062453895, + "uploadSeconds": 0.121577091, + "downloadSeconds": 0.000058544 }, { - "connectionEstablishedSeconds": 0.063632156, - "uploadSeconds": 0.123478645, - "downloadSeconds": 0.000072658 + "connectionEstablishedSeconds": 0.065392818, + "uploadSeconds": 0.127281329, + "downloadSeconds": 0.000054925 }, { - "connectionEstablishedSeconds": 0.062453992, - "uploadSeconds": 0.121532257, - "downloadSeconds": 0.000080757 + "connectionEstablishedSeconds": 0.06519152, + "uploadSeconds": 0.127275479, + "downloadSeconds": 0.000135901 }, { - "connectionEstablishedSeconds": 0.06282161, - "uploadSeconds": 0.122050909, - "downloadSeconds": 0.000062642 + "connectionEstablishedSeconds": 0.063443656, + "uploadSeconds": 0.123693117, + "downloadSeconds": 0.000052125 }, { - "connectionEstablishedSeconds": 0.064755094, - "uploadSeconds": 0.125864073, - "downloadSeconds": 0.000105545 + "connectionEstablishedSeconds": 0.062347545, + "uploadSeconds": 0.121569889, + "downloadSeconds": 0.000036034 }, { - "connectionEstablishedSeconds": 0.064105606, - "uploadSeconds": 0.124738407, - "downloadSeconds": 0.000045231 + "connectionEstablishedSeconds": 0.063280881, + "uploadSeconds": 0.123415714, + "downloadSeconds": 0.000056959 }, { - "connectionEstablishedSeconds": 0.064166122, - "uploadSeconds": 0.124608084, - "downloadSeconds": 0.000084333 + "connectionEstablishedSeconds": 0.066193179, + "uploadSeconds": 0.129518294, + "downloadSeconds": 0.000071852 }, { - "connectionEstablishedSeconds": 0.062669409, - "uploadSeconds": 0.121852983, - "downloadSeconds": 0.000086386 + "connectionEstablishedSeconds": 0.062126532, + "uploadSeconds": 0.121228283, + "downloadSeconds": 0.000052937 }, { - "connectionEstablishedSeconds": 0.064950734, - "uploadSeconds": 0.126331357, - "downloadSeconds": 0.000155847 + "connectionEstablishedSeconds": 0.06231345, + "uploadSeconds": 0.121525482, + "downloadSeconds": 0.000071782 }, { - "connectionEstablishedSeconds": 0.062348759, - "uploadSeconds": 0.121223049, - "downloadSeconds": 0.000101475 + "connectionEstablishedSeconds": 0.063269109, + "uploadSeconds": 0.123361124, + "downloadSeconds": 0.000044688 }, { - "connectionEstablishedSeconds": 0.061410545, - "uploadSeconds": 0.119357751, - "downloadSeconds": 0.00013631 + "connectionEstablishedSeconds": 0.065207518, + "uploadSeconds": 0.127207981, + "downloadSeconds": 0.000070084 }, { - "connectionEstablishedSeconds": 0.06538073, - "uploadSeconds": 0.127286516, - "downloadSeconds": 0.000084163 + "connectionEstablishedSeconds": 0.061380173, + "uploadSeconds": 0.119481956, + "downloadSeconds": 0.000065015 }, { - "connectionEstablishedSeconds": 0.065267895, - "uploadSeconds": 0.127053901, - "downloadSeconds": 0.00006416 + "connectionEstablishedSeconds": 0.060212037, + "uploadSeconds": 0.117167964, + "downloadSeconds": 0.000043358 }, { - "connectionEstablishedSeconds": 0.064411294, - "uploadSeconds": 0.124778899, - "downloadSeconds": 0.000074301 + "connectionEstablishedSeconds": 0.06323939, + "uploadSeconds": 0.123184237, + "downloadSeconds": 0.000072781 }, { - "connectionEstablishedSeconds": 0.063916077, - "uploadSeconds": 0.124393312, - "downloadSeconds": 0.000085843 + "connectionEstablishedSeconds": 0.065025993, + "uploadSeconds": 0.126928598, + "downloadSeconds": 0.000051023 }, { - "connectionEstablishedSeconds": 0.062081196, - "uploadSeconds": 0.120463049, - "downloadSeconds": 0.000081798 + "connectionEstablishedSeconds": 0.064152457, + "uploadSeconds": 0.125391783, + "downloadSeconds": 0.000040382 }, { - "connectionEstablishedSeconds": 0.064835647, - "uploadSeconds": 0.126418203, - "downloadSeconds": 0.000073351 + "connectionEstablishedSeconds": 0.063408868, + "uploadSeconds": 0.123466335, + "downloadSeconds": 0.000058209 }, { - "connectionEstablishedSeconds": 0.065654051, - "uploadSeconds": 0.127722734, - "downloadSeconds": 0.000105934 + "connectionEstablishedSeconds": 0.065041042, + "uploadSeconds": 0.126991778, + "downloadSeconds": 0.000074001 }, { - "connectionEstablishedSeconds": 0.063670175, - "uploadSeconds": 0.123943916, - "downloadSeconds": 0.000077717 + "connectionEstablishedSeconds": 0.06346134, + "uploadSeconds": 0.123686005, + "downloadSeconds": 0.000056565 }, { - "connectionEstablishedSeconds": 0.065474963, - "uploadSeconds": 0.127595228, - "downloadSeconds": 0.000055289 + "connectionEstablishedSeconds": 0.063262021, + "uploadSeconds": 0.123524436, + "downloadSeconds": 0.00006451 }, { - "connectionEstablishedSeconds": 0.064085463, - "uploadSeconds": 0.124794593, - "downloadSeconds": 0.00009378 + "connectionEstablishedSeconds": 0.064249558, + "uploadSeconds": 0.125533608, + "downloadSeconds": 0.000052007 }, { - "connectionEstablishedSeconds": 0.063967591, - "uploadSeconds": 0.124510889, - "downloadSeconds": 0.000077411 + "connectionEstablishedSeconds": 0.06135226, + "uploadSeconds": 0.119824249, + "downloadSeconds": 0.00004232 }, { - "connectionEstablishedSeconds": 0.062634672, - "uploadSeconds": 0.121821183, - "downloadSeconds": 0.000063691 + "connectionEstablishedSeconds": 0.065392495, + "uploadSeconds": 0.127486291, + "downloadSeconds": 0.000045368 }, { - "connectionEstablishedSeconds": 0.066294521, - "uploadSeconds": 0.129160959, - "downloadSeconds": 0.000054596 + "connectionEstablishedSeconds": 0.064357878, + "uploadSeconds": 0.125534367, + "downloadSeconds": 0.000047927 }, { - "connectionEstablishedSeconds": 0.064455007, - "uploadSeconds": 0.125418313, - "downloadSeconds": 0.00007373 + "connectionEstablishedSeconds": 0.064144147, + "uploadSeconds": 0.12524382, + "downloadSeconds": 0.000054457 }, { - "connectionEstablishedSeconds": 0.063959842, - "uploadSeconds": 0.1244949, - "downloadSeconds": 0.000073275 + "connectionEstablishedSeconds": 0.063220658, + "uploadSeconds": 0.123295038, + "downloadSeconds": 0.000050545 }, { - "connectionEstablishedSeconds": 0.066070252, - "uploadSeconds": 0.128792037, - "downloadSeconds": 0.00004618 + "connectionEstablishedSeconds": 0.065487019, + "uploadSeconds": 0.12789526, + "downloadSeconds": 0.000062426 }, { - "connectionEstablishedSeconds": 0.065236645, - "uploadSeconds": 0.127059524, - "downloadSeconds": 0.000050571 + "connectionEstablishedSeconds": 0.065351055, + "uploadSeconds": 0.127626139, + "downloadSeconds": 0.000053051 }, { - "connectionEstablishedSeconds": 0.06094768, - "uploadSeconds": 0.118601577, - "downloadSeconds": 0.000093052 + "connectionEstablishedSeconds": 0.063279657, + "uploadSeconds": 0.123287258, + "downloadSeconds": 0.00004275 }, { - "connectionEstablishedSeconds": 0.064582742, - "uploadSeconds": 0.12575478, - "downloadSeconds": 0.000082067 + "connectionEstablishedSeconds": 0.061394639, + "uploadSeconds": 0.119676583, + "downloadSeconds": 0.000057056 }, { - "connectionEstablishedSeconds": 0.065072501, - "uploadSeconds": 0.12662061, - "downloadSeconds": 0.000098341 + "connectionEstablishedSeconds": 0.062591515, + "uploadSeconds": 0.121892998, + "downloadSeconds": 0.000059725 }, { - "connectionEstablishedSeconds": 0.066624862, - "uploadSeconds": 0.129815026, - "downloadSeconds": 0.000081843 + "connectionEstablishedSeconds": 0.060265923, + "uploadSeconds": 0.117536191, + "downloadSeconds": 0.000064234 }, { - "connectionEstablishedSeconds": 0.065496903, - "uploadSeconds": 0.12779438, - "downloadSeconds": 0.000105756 + "connectionEstablishedSeconds": 0.063357613, + "uploadSeconds": 0.123683173, + "downloadSeconds": 0.000045259 }, { - "connectionEstablishedSeconds": 0.063587012, - "uploadSeconds": 0.123648704, - "downloadSeconds": 0.000073976 + "connectionEstablishedSeconds": 0.065073817, + "uploadSeconds": 0.127155289, + "downloadSeconds": 0.000063339 }, { - "connectionEstablishedSeconds": 0.065166457, - "uploadSeconds": 0.126912988, - "downloadSeconds": 0.000109828 + "connectionEstablishedSeconds": 0.063421051, + "uploadSeconds": 0.123679629, + "downloadSeconds": 0.000044839 }, { - "connectionEstablishedSeconds": 0.06025493, - "uploadSeconds": 0.117031953, - "downloadSeconds": 0.00008765 + "connectionEstablishedSeconds": 0.064240118, + "uploadSeconds": 0.125388798, + "downloadSeconds": 0.000062731 }, { - "connectionEstablishedSeconds": 0.065858394, - "uploadSeconds": 0.128498961, - "downloadSeconds": 0.000117106 + "connectionEstablishedSeconds": 0.06585202, + "uploadSeconds": 0.128542709, + "downloadSeconds": 0.000057998 }, { - "connectionEstablishedSeconds": 0.065079865, - "uploadSeconds": 0.126656494, - "downloadSeconds": 0.00007727 + "connectionEstablishedSeconds": 0.064264679, + "uploadSeconds": 0.125482804, + "downloadSeconds": 0.000066616 }, { - "connectionEstablishedSeconds": 0.0635718, - "uploadSeconds": 0.123726091, - "downloadSeconds": 0.000074642 + "connectionEstablishedSeconds": 0.064430646, + "uploadSeconds": 0.125464915, + "downloadSeconds": 0.000061849 }, { - "connectionEstablishedSeconds": 0.063487759, - "uploadSeconds": 0.123542277, - "downloadSeconds": 0.000057058 + "connectionEstablishedSeconds": 0.065909843, + "uploadSeconds": 0.128525099, + "downloadSeconds": 0.000065476 }, { - "connectionEstablishedSeconds": 0.061036628, - "uploadSeconds": 0.118754325, - "downloadSeconds": 0.000087272 + "connectionEstablishedSeconds": 0.06430694, + "uploadSeconds": 0.125555703, + "downloadSeconds": 0.000051914 }, { - "connectionEstablishedSeconds": 0.064088629, - "uploadSeconds": 0.124607971, - "downloadSeconds": 0.00005193 + "connectionEstablishedSeconds": 0.064431927, + "uploadSeconds": 0.125858749, + "downloadSeconds": 0.000073389 }, { - "connectionEstablishedSeconds": 0.063898205, - "uploadSeconds": 0.12449889, - "downloadSeconds": 0.00007393 + "connectionEstablishedSeconds": 0.065025922, + "uploadSeconds": 0.127005147, + "downloadSeconds": 0.000089877 }, { - "connectionEstablishedSeconds": 0.063112121, - "uploadSeconds": 0.122876487, - "downloadSeconds": 0.000082174 + "connectionEstablishedSeconds": 0.062570155, + "uploadSeconds": 0.121852184, + "downloadSeconds": 0.000070642 }, { - "connectionEstablishedSeconds": 0.061838182, - "uploadSeconds": 0.119878674, - "downloadSeconds": 0.000089398 + "connectionEstablishedSeconds": 0.065281436, + "uploadSeconds": 0.127189725, + "downloadSeconds": 0.000052287 }, { - "connectionEstablishedSeconds": 0.062248433, - "uploadSeconds": 0.121379219, - "downloadSeconds": 0.000044327 + "connectionEstablishedSeconds": 0.064203143, + "uploadSeconds": 0.12554179, + "downloadSeconds": 0.000060465 }, { - "connectionEstablishedSeconds": 0.064517291, - "uploadSeconds": 0.125572328, - "downloadSeconds": 0.000050306 + "connectionEstablishedSeconds": 0.063340976, + "uploadSeconds": 0.123315032, + "downloadSeconds": 0.00006574 }, { - "connectionEstablishedSeconds": 0.064898676, - "uploadSeconds": 0.126133518, - "downloadSeconds": 0.000068667 + "connectionEstablishedSeconds": 0.064188012, + "uploadSeconds": 0.125448996, + "downloadSeconds": 0.00008078 }, { - "connectionEstablishedSeconds": 0.062271554, - "uploadSeconds": 0.121187727, - "downloadSeconds": 0.00004803 + "connectionEstablishedSeconds": 0.063262438, + "uploadSeconds": 0.123200694, + "downloadSeconds": 0.000040357 }, { - "connectionEstablishedSeconds": 0.062338208, - "uploadSeconds": 0.120937059, - "downloadSeconds": 0.000050162 + "connectionEstablishedSeconds": 0.06405408, + "uploadSeconds": 0.125016783, + "downloadSeconds": 0.000052261 }, { - "connectionEstablishedSeconds": 0.06516715, - "uploadSeconds": 0.12658971, - "downloadSeconds": 0.000054901 + "connectionEstablishedSeconds": 0.066007539, + "uploadSeconds": 0.129046091, + "downloadSeconds": 0.000047777 }, { - "connectionEstablishedSeconds": 0.065651049, - "uploadSeconds": 0.127730491, - "downloadSeconds": 0.000072302 + "connectionEstablishedSeconds": 0.062257359, + "uploadSeconds": 0.121266969, + "downloadSeconds": 0.000061191 }, { - "connectionEstablishedSeconds": 0.065052451, - "uploadSeconds": 0.126855008, - "downloadSeconds": 0.000069138 + "connectionEstablishedSeconds": 0.065401755, + "uploadSeconds": 0.127345828, + "downloadSeconds": 0.00005843 }, { - "connectionEstablishedSeconds": 0.066387803, - "uploadSeconds": 0.129441088, - "downloadSeconds": 0.000046108 + "connectionEstablishedSeconds": 0.065216621, + "uploadSeconds": 0.127424421, + "downloadSeconds": 0.000077764 }, { - "connectionEstablishedSeconds": 0.064914776, - "uploadSeconds": 0.126462724, - "downloadSeconds": 0.000060604 + "connectionEstablishedSeconds": 0.062458448, + "uploadSeconds": 0.119817401, + "downloadSeconds": 0.000044767 }, { - "connectionEstablishedSeconds": 0.066325354, - "uploadSeconds": 0.128622135, - "downloadSeconds": 0.000089472 + "connectionEstablishedSeconds": 0.065362314, + "uploadSeconds": 0.127749913, + "downloadSeconds": 0.000066144 }, { - "connectionEstablishedSeconds": 0.064877193, - "uploadSeconds": 0.126410536, - "downloadSeconds": 0.000083253 + "connectionEstablishedSeconds": 0.06299922, + "uploadSeconds": 0.122889744, + "downloadSeconds": 0.000047904 }, { - "connectionEstablishedSeconds": 0.061518459, - "uploadSeconds": 0.11970554, - "downloadSeconds": 0.000098102 + "connectionEstablishedSeconds": 0.065867978, + "uploadSeconds": 0.128718284, + "downloadSeconds": 0.000076852 }, { - "connectionEstablishedSeconds": 0.066446584, - "uploadSeconds": 0.129426228, - "downloadSeconds": 0.000052881 + "connectionEstablishedSeconds": 0.065840031, + "uploadSeconds": 0.128727742, + "downloadSeconds": 0.000069704 }, { - "connectionEstablishedSeconds": 0.063347672, - "uploadSeconds": 0.123333115, - "downloadSeconds": 0.000051834 + "connectionEstablishedSeconds": 0.06227749, + "uploadSeconds": 0.121451953, + "downloadSeconds": 0.000057764 }, { - "connectionEstablishedSeconds": 0.062311469, - "uploadSeconds": 0.121232877, - "downloadSeconds": 0.000067479 + "connectionEstablishedSeconds": 0.064352122, + "uploadSeconds": 0.125497917, + "downloadSeconds": 0.000050079 }, { - "connectionEstablishedSeconds": 0.065580823, - "uploadSeconds": 0.127383534, - "downloadSeconds": 0.00008774 + "connectionEstablishedSeconds": 0.062215245, + "uploadSeconds": 0.121336215, + "downloadSeconds": 0.000044258 }, { - "connectionEstablishedSeconds": 0.062602698, - "uploadSeconds": 0.12176476, - "downloadSeconds": 0.000084162 + "connectionEstablishedSeconds": 0.064409462, + "uploadSeconds": 0.125819277, + "downloadSeconds": 0.000059226 }, { - "connectionEstablishedSeconds": 0.064679694, - "uploadSeconds": 0.125792176, - "downloadSeconds": 0.000049092 + "connectionEstablishedSeconds": 0.064314713, + "uploadSeconds": 0.12540278, + "downloadSeconds": 0.000076264 }, { - "connectionEstablishedSeconds": 0.066119217, - "uploadSeconds": 0.128911034, - "downloadSeconds": 0.000052582 + "connectionEstablishedSeconds": 0.063241447, + "uploadSeconds": 0.123451158, + "downloadSeconds": 0.000076863 }, { - "connectionEstablishedSeconds": 0.064028513, - "uploadSeconds": 0.12462816, - "downloadSeconds": 0.000062379 + "connectionEstablishedSeconds": 0.063309122, + "uploadSeconds": 0.123704461, + "downloadSeconds": 0.000046913 }, { - "connectionEstablishedSeconds": 0.066205814, - "uploadSeconds": 0.128883233, - "downloadSeconds": 0.000052233 + "connectionEstablishedSeconds": 0.064230872, + "uploadSeconds": 0.125191226, + "downloadSeconds": 0.000049758 }, { - "connectionEstablishedSeconds": 0.062012424, - "uploadSeconds": 0.120882738, - "downloadSeconds": 0.00005704 + "connectionEstablishedSeconds": 0.063383078, + "uploadSeconds": 0.12360638, + "downloadSeconds": 0.000043805 }, { - "connectionEstablishedSeconds": 0.064255919, - "uploadSeconds": 0.124959707, - "downloadSeconds": 0.000091863 + "connectionEstablishedSeconds": 0.063390599, + "uploadSeconds": 0.123606064, + "downloadSeconds": 0.00005037 }, { - "connectionEstablishedSeconds": 0.063693044, - "uploadSeconds": 0.123805374, - "downloadSeconds": 0.000094304 + "connectionEstablishedSeconds": 0.061395116, + "uploadSeconds": 0.119511358, + "downloadSeconds": 0.000053731 }, { - "connectionEstablishedSeconds": 0.064984709, - "uploadSeconds": 0.126642484, - "downloadSeconds": 0.000047402 + "connectionEstablishedSeconds": 0.064234483, + "uploadSeconds": 0.125461846, + "downloadSeconds": 0.000043607 }, { - "connectionEstablishedSeconds": 0.061120801, - "uploadSeconds": 0.11917866, - "downloadSeconds": 0.000070103 + "connectionEstablishedSeconds": 0.063639676, + "uploadSeconds": 0.124015955, + "downloadSeconds": 0.00006317 }, { - "connectionEstablishedSeconds": 0.063592651, - "uploadSeconds": 0.123675225, - "downloadSeconds": 0.000061204 + "connectionEstablishedSeconds": 0.064129008, + "uploadSeconds": 0.123573337, + "downloadSeconds": 0.000059694 }, { - "connectionEstablishedSeconds": 0.062592166, - "uploadSeconds": 0.121571849, - "downloadSeconds": 0.000071449 + "connectionEstablishedSeconds": 0.065094816, + "uploadSeconds": 0.127210865, + "downloadSeconds": 0.000072237 }, { - "connectionEstablishedSeconds": 0.065114172, - "uploadSeconds": 0.126766224, - "downloadSeconds": 0.000060301 + "connectionEstablishedSeconds": 0.065374183, + "uploadSeconds": 0.127396263, + "downloadSeconds": 0.000052285 }, { - "connectionEstablishedSeconds": 0.063331652, - "uploadSeconds": 0.122993699, - "downloadSeconds": 0.000085199 + "connectionEstablishedSeconds": 0.06434635, + "uploadSeconds": 0.125461101, + "downloadSeconds": 0.000095363 }, { - "connectionEstablishedSeconds": 0.064596237, - "uploadSeconds": 0.125709824, - "downloadSeconds": 0.000080473 + "connectionEstablishedSeconds": 0.062472734, + "uploadSeconds": 0.121582369, + "downloadSeconds": 0.00004803 }, { - "connectionEstablishedSeconds": 0.066972879, - "uploadSeconds": 0.130634142, - "downloadSeconds": 0.00004697 + "connectionEstablishedSeconds": 0.064244778, + "uploadSeconds": 0.125580371, + "downloadSeconds": 0.000064647 }, { - "connectionEstablishedSeconds": 0.062545682, - "uploadSeconds": 0.121463022, - "downloadSeconds": 0.000060858 + "connectionEstablishedSeconds": 0.063115128, + "uploadSeconds": 0.122980499, + "downloadSeconds": 0.000051285 }, { - "connectionEstablishedSeconds": 0.065678017, - "uploadSeconds": 0.128114478, - "downloadSeconds": 0.000054247 + "connectionEstablishedSeconds": 0.0653275, + "uploadSeconds": 0.12554814, + "downloadSeconds": 0.000040053 }, { - "connectionEstablishedSeconds": 0.066031352, - "uploadSeconds": 0.128668745, - "downloadSeconds": 0.000046151 + "connectionEstablishedSeconds": 0.06421283, + "uploadSeconds": 0.12536133, + "downloadSeconds": 0.00005974 }, { - "connectionEstablishedSeconds": 0.065528277, - "uploadSeconds": 0.127732124, - "downloadSeconds": 0.000050967 + "connectionEstablishedSeconds": 0.065252182, + "uploadSeconds": 0.127183247, + "downloadSeconds": 0.000039168 }, { - "connectionEstablishedSeconds": 0.061144288, - "uploadSeconds": 0.118864606, - "downloadSeconds": 0.000055298 + "connectionEstablishedSeconds": 0.062238062, + "uploadSeconds": 0.121393298, + "downloadSeconds": 0.000044896 }, { - "connectionEstablishedSeconds": 0.065305185, - "uploadSeconds": 0.127158917, - "downloadSeconds": 0.000050949 + "connectionEstablishedSeconds": 0.06385464, + "uploadSeconds": 0.12381855, + "downloadSeconds": 0.000044188 }, { - "connectionEstablishedSeconds": 0.065225217, - "uploadSeconds": 0.126952291, - "downloadSeconds": 0.000044136 + "connectionEstablishedSeconds": 0.061221602, + "uploadSeconds": 0.119336532, + "downloadSeconds": 0.000045733 }, { - "connectionEstablishedSeconds": 0.064853145, - "uploadSeconds": 0.126412428, - "downloadSeconds": 0.000097659 + "connectionEstablishedSeconds": 0.065851607, + "uploadSeconds": 0.127245975, + "downloadSeconds": 0.000050606 }, { - "connectionEstablishedSeconds": 0.065478193, - "uploadSeconds": 0.127374565, - "downloadSeconds": 0.000062365 + "connectionEstablishedSeconds": 0.063989896, + "uploadSeconds": 0.125020257, + "downloadSeconds": 0.000052014 }, { - "connectionEstablishedSeconds": 0.05995481, - "uploadSeconds": 0.116531334, - "downloadSeconds": 0.000078307 + "connectionEstablishedSeconds": 0.064260289, + "uploadSeconds": 0.125517964, + "downloadSeconds": 0.000055818 }, { - "connectionEstablishedSeconds": 0.066140712, - "uploadSeconds": 0.128805388, - "downloadSeconds": 0.000049685 + "connectionEstablishedSeconds": 0.06514428, + "uploadSeconds": 0.127180271, + "downloadSeconds": 0.000073513 }, { - "connectionEstablishedSeconds": 0.064286525, - "uploadSeconds": 0.125063487, - "downloadSeconds": 0.000092709 + "connectionEstablishedSeconds": 0.065387466, + "uploadSeconds": 0.127538416, + "downloadSeconds": 0.000065984 }, { - "connectionEstablishedSeconds": 0.065156327, - "uploadSeconds": 0.127035923, - "downloadSeconds": 0.00005645 + "connectionEstablishedSeconds": 0.064262191, + "uploadSeconds": 0.125284932, + "downloadSeconds": 0.000053444 }, { - "connectionEstablishedSeconds": 0.062462454, - "uploadSeconds": 0.121519512, - "downloadSeconds": 0.000090082 + "connectionEstablishedSeconds": 0.066231763, + "uploadSeconds": 0.129317457, + "downloadSeconds": 0.000108319 }, { - "connectionEstablishedSeconds": 0.063023488, - "uploadSeconds": 0.122460757, - "downloadSeconds": 0.000049759 + "connectionEstablishedSeconds": 0.06293954, + "uploadSeconds": 0.122896242, + "downloadSeconds": 0.000043568 }, { - "connectionEstablishedSeconds": 0.065384733, - "uploadSeconds": 0.127145941, - "downloadSeconds": 0.000078884 + "connectionEstablishedSeconds": 0.063313225, + "uploadSeconds": 0.123378226, + "downloadSeconds": 0.000049142 }, { - "connectionEstablishedSeconds": 0.064855409, - "uploadSeconds": 0.12630613, - "downloadSeconds": 0.0000832 + "connectionEstablishedSeconds": 0.061407975, + "uploadSeconds": 0.11947587, + "downloadSeconds": 0.000077536 }, { - "connectionEstablishedSeconds": 0.065364575, - "uploadSeconds": 0.127268953, - "downloadSeconds": 0.000079745 + "connectionEstablishedSeconds": 0.063267036, + "uploadSeconds": 0.123277946, + "downloadSeconds": 0.000074473 }, { - "connectionEstablishedSeconds": 0.066317931, - "uploadSeconds": 0.129352868, - "downloadSeconds": 0.000089251 + "connectionEstablishedSeconds": 0.064343927, + "uploadSeconds": 0.125660162, + "downloadSeconds": 0.000075987 }, { - "connectionEstablishedSeconds": 0.061175776, - "uploadSeconds": 0.118754982, - "downloadSeconds": 0.00005179 + "connectionEstablishedSeconds": 0.065948219, + "uploadSeconds": 0.128840182, + "downloadSeconds": 0.000040577 } ], "implementation": "rust-libp2p-quinn", @@ -2504,503 +2504,503 @@ "result": [ { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191286116, - "downloadSeconds": 0.000030153 + "uploadSeconds": 0.191208407, + "downloadSeconds": 0.000022101 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.183529055, - "downloadSeconds": 0.000025756 + "uploadSeconds": 0.185101468, + "downloadSeconds": 0.000017833 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.184410375, - "downloadSeconds": 0.000040311 + "uploadSeconds": 0.189288901, + "downloadSeconds": 0.00001904 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190450232, - "downloadSeconds": 0.000028102 + "uploadSeconds": 0.185814162, + "downloadSeconds": 0.000019369 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187048479, - "downloadSeconds": 0.000020757 + "uploadSeconds": 0.185623765, + "downloadSeconds": 0.000017995 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190285011, - "downloadSeconds": 0.000024856 + "uploadSeconds": 0.191143454, + "downloadSeconds": 0.000027876 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.178674815, - "downloadSeconds": 0.000024766 + "uploadSeconds": 0.176678783, + "downloadSeconds": 0.00002569 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.189727631, - "downloadSeconds": 0.000021712 + "uploadSeconds": 0.188957086, + "downloadSeconds": 0.000025008 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18619776, - "downloadSeconds": 0.000034857 + "uploadSeconds": 0.194459048, + "downloadSeconds": 0.000027769 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193181301, - "downloadSeconds": 0.000024575 + "uploadSeconds": 0.187969761, + "downloadSeconds": 0.000021266 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.189751793, - "downloadSeconds": 0.000025637 + "uploadSeconds": 0.191450763, + "downloadSeconds": 0.000020674 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.183150367, - "downloadSeconds": 0.000024492 + "uploadSeconds": 0.188425547, + "downloadSeconds": 0.00001841 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188043639, - "downloadSeconds": 0.000024447 + "uploadSeconds": 0.182830993, + "downloadSeconds": 0.000019515 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.189577218, - "downloadSeconds": 0.000018189 + "uploadSeconds": 0.179421439, + "downloadSeconds": 0.00002113 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188882264, - "downloadSeconds": 0.000021261 + "uploadSeconds": 0.188333845, + "downloadSeconds": 0.000016575 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.186325009, - "downloadSeconds": 0.000024389 + "uploadSeconds": 0.191449969, + "downloadSeconds": 0.000017998 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.181536797, - "downloadSeconds": 0.000033015 + "uploadSeconds": 0.182885312, + "downloadSeconds": 0.000019005 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193188111, - "downloadSeconds": 0.000025382 + "uploadSeconds": 0.194283541, + "downloadSeconds": 0.000016743 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185746185, - "downloadSeconds": 0.000023011 + "uploadSeconds": 0.190858767, + "downloadSeconds": 0.000019238 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182559536, - "downloadSeconds": 0.000025647 + "uploadSeconds": 0.18288068, + "downloadSeconds": 0.000014964 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.186054822, - "downloadSeconds": 0.000021982 + "uploadSeconds": 0.18555248, + "downloadSeconds": 0.000019661 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187466153, - "downloadSeconds": 0.000024312 + "uploadSeconds": 0.182370176, + "downloadSeconds": 0.000018734 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.184809142, - "downloadSeconds": 0.000022947 + "uploadSeconds": 0.188238516, + "downloadSeconds": 0.000019547 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191330569, - "downloadSeconds": 0.000028027 + "uploadSeconds": 0.188327785, + "downloadSeconds": 0.000020929 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.189069566, - "downloadSeconds": 0.000024548 + "uploadSeconds": 0.190376705, + "downloadSeconds": 0.000026902 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18767281, - "downloadSeconds": 0.000021507 + "uploadSeconds": 0.17991243, + "downloadSeconds": 0.000015986 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18593129, - "downloadSeconds": 0.000023896 + "uploadSeconds": 0.185000306, + "downloadSeconds": 0.000021125 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.181014203, - "downloadSeconds": 0.000023811 + "uploadSeconds": 0.191868063, + "downloadSeconds": 0.000016718 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188932328, - "downloadSeconds": 0.000025813 + "uploadSeconds": 0.185562211, + "downloadSeconds": 0.000019823 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.184957641, - "downloadSeconds": 0.000023322 + "uploadSeconds": 0.184510649, + "downloadSeconds": 0.000020877 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.180815006, - "downloadSeconds": 0.00003453 + "uploadSeconds": 0.184704727, + "downloadSeconds": 0.000019411 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190052471, - "downloadSeconds": 0.00002195 + "uploadSeconds": 0.182514858, + "downloadSeconds": 0.000019294 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193640405, - "downloadSeconds": 0.000020421 + "uploadSeconds": 0.191307288, + "downloadSeconds": 0.000018987 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190830146, - "downloadSeconds": 0.000022273 + "uploadSeconds": 0.185471657, + "downloadSeconds": 0.000020549 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188083369, - "downloadSeconds": 0.00002138 + "uploadSeconds": 0.188953161, + "downloadSeconds": 0.000019572 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185840961, - "downloadSeconds": 0.000021979 + "uploadSeconds": 0.182200134, + "downloadSeconds": 0.000019643 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193488566, - "downloadSeconds": 0.000024822 + "uploadSeconds": 0.188209869, + "downloadSeconds": 0.000025173 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.178135133, - "downloadSeconds": 0.000024564 + "uploadSeconds": 0.191179759, + "downloadSeconds": 0.000016738 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187243776, - "downloadSeconds": 0.00002429 + "uploadSeconds": 0.191283664, + "downloadSeconds": 0.00001794 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.186128, - "downloadSeconds": 0.00002176 + "uploadSeconds": 0.18874002, + "downloadSeconds": 0.000016605 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187437127, - "downloadSeconds": 0.000024223 + "uploadSeconds": 0.191027867, + "downloadSeconds": 0.000019676 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193260755, - "downloadSeconds": 0.000021753 + "uploadSeconds": 0.183136059, + "downloadSeconds": 0.000016257 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.17961362, - "downloadSeconds": 0.000030347 + "uploadSeconds": 0.182825571, + "downloadSeconds": 0.000025578 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185389065, - "downloadSeconds": 0.00002451 + "uploadSeconds": 0.182273002, + "downloadSeconds": 0.000016323 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.189083595, - "downloadSeconds": 0.000023793 + "uploadSeconds": 0.190947515, + "downloadSeconds": 0.000025431 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188867791, - "downloadSeconds": 0.000024162 + "uploadSeconds": 0.193378589, + "downloadSeconds": 0.00001985 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182410744, - "downloadSeconds": 0.000021144 + "uploadSeconds": 0.184944529, + "downloadSeconds": 0.000016693 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.19338541, - "downloadSeconds": 0.000024628 + "uploadSeconds": 0.191468774, + "downloadSeconds": 0.0000192 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.180148621, - "downloadSeconds": 0.000023234 + "uploadSeconds": 0.193960933, + "downloadSeconds": 0.000025698 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.183482025, - "downloadSeconds": 0.00002359 + "uploadSeconds": 0.185315955, + "downloadSeconds": 0.000019871 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.192011607, - "downloadSeconds": 0.000019914 + "uploadSeconds": 0.188847642, + "downloadSeconds": 0.000018573 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193289196, - "downloadSeconds": 0.000024513 + "uploadSeconds": 0.188097152, + "downloadSeconds": 0.000019848 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185263194, - "downloadSeconds": 0.000028503 + "uploadSeconds": 0.188100894, + "downloadSeconds": 0.000019014 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.186621738, - "downloadSeconds": 0.000024194 + "uploadSeconds": 0.182878791, + "downloadSeconds": 0.000026392 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.192898111, - "downloadSeconds": 0.000024166 + "uploadSeconds": 0.182869145, + "downloadSeconds": 0.000025336 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187423423, - "downloadSeconds": 0.000023964 + "uploadSeconds": 0.190750916, + "downloadSeconds": 0.000022091 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191429869, - "downloadSeconds": 0.000021317 + "uploadSeconds": 0.18587901, + "downloadSeconds": 0.000019658 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187678237, - "downloadSeconds": 0.000021642 + "uploadSeconds": 0.185938551, + "downloadSeconds": 0.00002095 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187827296, - "downloadSeconds": 0.000021888 + "uploadSeconds": 0.190824969, + "downloadSeconds": 0.00001511 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.186599878, - "downloadSeconds": 0.00002446 + "uploadSeconds": 0.190908212, + "downloadSeconds": 0.00002801 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190005609, - "downloadSeconds": 0.000022756 + "uploadSeconds": 0.18029583, + "downloadSeconds": 0.000018758 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.189002327, - "downloadSeconds": 0.000028052 + "uploadSeconds": 0.188462321, + "downloadSeconds": 0.000022213 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191248774, - "downloadSeconds": 0.000021291 + "uploadSeconds": 0.179931032, + "downloadSeconds": 0.000022012 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182345961, - "downloadSeconds": 0.000018505 + "uploadSeconds": 0.188148799, + "downloadSeconds": 0.000024397 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.178343946, - "downloadSeconds": 0.000024258 + "uploadSeconds": 0.188149378, + "downloadSeconds": 0.000017646 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.1796409, - "downloadSeconds": 0.000020622 + "uploadSeconds": 0.191209208, + "downloadSeconds": 0.000019247 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191527728, - "downloadSeconds": 0.000023144 + "uploadSeconds": 0.185511337, + "downloadSeconds": 0.000014801 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187086772, - "downloadSeconds": 0.000024889 + "uploadSeconds": 0.176491439, + "downloadSeconds": 0.000018543 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18110695, - "downloadSeconds": 0.000023585 + "uploadSeconds": 0.193720412, + "downloadSeconds": 0.000016254 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187533438, - "downloadSeconds": 0.000022629 + "uploadSeconds": 0.193015016, + "downloadSeconds": 0.000025464 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187532688, - "downloadSeconds": 0.000029573 + "uploadSeconds": 0.183209584, + "downloadSeconds": 0.000026755 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191096905, - "downloadSeconds": 0.000025604 + "uploadSeconds": 0.179050944, + "downloadSeconds": 0.000020689 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.194325541, - "downloadSeconds": 0.000021101 + "uploadSeconds": 0.185592294, + "downloadSeconds": 0.000025665 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.189083303, - "downloadSeconds": 0.000021147 + "uploadSeconds": 0.182671512, + "downloadSeconds": 0.000026017 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193745985, - "downloadSeconds": 0.000024439 + "uploadSeconds": 0.182686635, + "downloadSeconds": 0.000024955 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190582174, - "downloadSeconds": 0.000017468 + "uploadSeconds": 0.182974171, + "downloadSeconds": 0.00001908 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.192054523, - "downloadSeconds": 0.0000221 + "uploadSeconds": 0.188537742, + "downloadSeconds": 0.000025148 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.183943085, - "downloadSeconds": 0.000024812 + "uploadSeconds": 0.185566242, + "downloadSeconds": 0.000020149 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.17475635, - "downloadSeconds": 0.000024018 + "uploadSeconds": 0.188427983, + "downloadSeconds": 0.000031525 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.184440358, - "downloadSeconds": 0.000021449 + "uploadSeconds": 0.191230263, + "downloadSeconds": 0.000018548 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18631819, - "downloadSeconds": 0.000028734 + "uploadSeconds": 0.188441856, + "downloadSeconds": 0.000015223 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.181409699, - "downloadSeconds": 0.00002564 + "uploadSeconds": 0.191670796, + "downloadSeconds": 0.000021328 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.179933668, - "downloadSeconds": 0.000024125 + "uploadSeconds": 0.188956666, + "downloadSeconds": 0.000019708 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185195736, - "downloadSeconds": 0.000022891 + "uploadSeconds": 0.187839206, + "downloadSeconds": 0.000021322 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188159214, - "downloadSeconds": 0.00002612 + "uploadSeconds": 0.190875028, + "downloadSeconds": 0.000024525 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191314415, - "downloadSeconds": 0.000021095 + "uploadSeconds": 0.188003464, + "downloadSeconds": 0.000019573 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.183011343, - "downloadSeconds": 0.000024533 + "uploadSeconds": 0.17655002, + "downloadSeconds": 0.000025053 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188848175, - "downloadSeconds": 0.0000209 + "uploadSeconds": 0.188811542, + "downloadSeconds": 0.000019026 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.195977983, - "downloadSeconds": 0.000024503 + "uploadSeconds": 0.190840535, + "downloadSeconds": 0.000027324 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18291316, - "downloadSeconds": 0.000020749 + "uploadSeconds": 0.182647969, + "downloadSeconds": 0.000019119 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185713857, - "downloadSeconds": 0.000023253 + "uploadSeconds": 0.193650174, + "downloadSeconds": 0.000025148 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.189154788, - "downloadSeconds": 0.000024316 + "uploadSeconds": 0.190707548, + "downloadSeconds": 0.000019048 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185723779, - "downloadSeconds": 0.000022027 + "uploadSeconds": 0.182124076, + "downloadSeconds": 0.000019526 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.186181575, - "downloadSeconds": 0.000020345 + "uploadSeconds": 0.191362852, + "downloadSeconds": 0.000018785 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.183142393, - "downloadSeconds": 0.000021052 + "uploadSeconds": 0.18542719, + "downloadSeconds": 0.000025911 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.184955497, - "downloadSeconds": 0.000020846 + "uploadSeconds": 0.186165308, + "downloadSeconds": 0.000018994 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.189237981, - "downloadSeconds": 0.000027586 + "uploadSeconds": 0.193811172, + "downloadSeconds": 0.000019637 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.19088234, - "downloadSeconds": 0.000023083 + "uploadSeconds": 0.188136681, + "downloadSeconds": 0.000016352 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.181319211, - "downloadSeconds": 0.000023255 + "uploadSeconds": 0.193919929, + "downloadSeconds": 0.000016965 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.184472225, - "downloadSeconds": 0.000034077 + "uploadSeconds": 0.185569859, + "downloadSeconds": 0.000025152 } ], "implementation": "https", @@ -3010,504 +3010,504 @@ { "result": [ { - "connectionEstablishedSeconds": 0.187265924, - "uploadSeconds": 0.000003363, - "downloadSeconds": 0.062154144 + "connectionEstablishedSeconds": 0.195929802, + "uploadSeconds": 0.000003325, + "downloadSeconds": 0.065023171 }, { - "connectionEstablishedSeconds": 0.189557176, - "uploadSeconds": 0.000006487, - "downloadSeconds": 0.062203288 + "connectionEstablishedSeconds": 0.193678251, + "uploadSeconds": 0.000003409, + "downloadSeconds": 0.063776728 }, { - "connectionEstablishedSeconds": 0.183024286, - "uploadSeconds": 0.000003387, - "downloadSeconds": 0.060029314 + "connectionEstablishedSeconds": 0.18656693, + "uploadSeconds": 0.000003042, + "downloadSeconds": 0.061989241 }, { - "connectionEstablishedSeconds": 0.196939115, - "uploadSeconds": 0.000003342, - "downloadSeconds": 0.064670246 + "connectionEstablishedSeconds": 0.193991809, + "uploadSeconds": 0.000010555, + "downloadSeconds": 0.064409249 }, { - "connectionEstablishedSeconds": 0.187845645, - "uploadSeconds": 0.000003119, - "downloadSeconds": 0.061806415 + "connectionEstablishedSeconds": 0.191544509, + "uploadSeconds": 0.000002956, + "downloadSeconds": 0.063681192 }, { - "connectionEstablishedSeconds": 0.183480618, - "uploadSeconds": 0.000004217, - "downloadSeconds": 0.060140849 + "connectionEstablishedSeconds": 0.184121155, + "uploadSeconds": 0.000002484, + "downloadSeconds": 0.061623068 }, { - "connectionEstablishedSeconds": 0.194091737, - "uploadSeconds": 0.000003398, - "downloadSeconds": 0.063641913 + "connectionEstablishedSeconds": 0.191244023, + "uploadSeconds": 0.00000273, + "downloadSeconds": 0.063653197 }, { - "connectionEstablishedSeconds": 0.192041679, - "uploadSeconds": 0.000003277, - "downloadSeconds": 0.063566373 + "connectionEstablishedSeconds": 0.187206459, + "uploadSeconds": 0.000002843, + "downloadSeconds": 0.061817032 }, { - "connectionEstablishedSeconds": 0.191750568, - "uploadSeconds": 0.000004094, - "downloadSeconds": 0.06306795 + "connectionEstablishedSeconds": 0.187887386, + "uploadSeconds": 0.000002764, + "downloadSeconds": 0.06191459 }, { - "connectionEstablishedSeconds": 0.196661034, - "uploadSeconds": 0.000003638, - "downloadSeconds": 0.064597793 + "connectionEstablishedSeconds": 0.177160929, + "uploadSeconds": 0.000002652, + "downloadSeconds": 0.058984229 }, { - "connectionEstablishedSeconds": 0.192399151, - "uploadSeconds": 0.000003287, - "downloadSeconds": 0.063717409 + "connectionEstablishedSeconds": 0.188911754, + "uploadSeconds": 0.000003058, + "downloadSeconds": 0.062790015 }, { - "connectionEstablishedSeconds": 0.194512523, - "uploadSeconds": 0.000003305, - "downloadSeconds": 0.063794327 + "connectionEstablishedSeconds": 0.191857989, + "uploadSeconds": 0.000003182, + "downloadSeconds": 0.063793038 }, { - "connectionEstablishedSeconds": 0.190643887, - "uploadSeconds": 0.000003297, - "downloadSeconds": 0.063321458 + "connectionEstablishedSeconds": 0.196335711, + "uploadSeconds": 0.000002621, + "downloadSeconds": 0.064669612 }, { - "connectionEstablishedSeconds": 0.191925632, - "uploadSeconds": 0.000003153, - "downloadSeconds": 0.062927302 + "connectionEstablishedSeconds": 0.189422694, + "uploadSeconds": 0.000003145, + "downloadSeconds": 0.062942128 }, { - "connectionEstablishedSeconds": 0.193221353, - "uploadSeconds": 0.000003628, - "downloadSeconds": 0.063378233 + "connectionEstablishedSeconds": 0.189845091, + "uploadSeconds": 0.000002939, + "downloadSeconds": 0.06298465 }, { - "connectionEstablishedSeconds": 0.191420507, - "uploadSeconds": 0.000003297, - "downloadSeconds": 0.062854803 + "connectionEstablishedSeconds": 0.190076994, + "uploadSeconds": 0.000002411, + "downloadSeconds": 0.062551046 }, { - "connectionEstablishedSeconds": 0.177621185, - "uploadSeconds": 0.000004143, - "downloadSeconds": 0.058236693 + "connectionEstablishedSeconds": 0.188932068, + "uploadSeconds": 0.000003231, + "downloadSeconds": 0.062637617 }, { - "connectionEstablishedSeconds": 0.186026405, - "uploadSeconds": 0.00000371, - "downloadSeconds": 0.061038859 + "connectionEstablishedSeconds": 0.18904689, + "uploadSeconds": 0.000002544, + "downloadSeconds": 0.062688706 }, { - "connectionEstablishedSeconds": 0.187867362, - "uploadSeconds": 0.000003418, - "downloadSeconds": 0.062196985 + "connectionEstablishedSeconds": 0.189411683, + "uploadSeconds": 0.000003416, + "downloadSeconds": 0.063070733 }, { - "connectionEstablishedSeconds": 0.195457825, - "uploadSeconds": 0.000003426, - "downloadSeconds": 0.063899168 + "connectionEstablishedSeconds": 0.19168595, + "uploadSeconds": 0.000002893, + "downloadSeconds": 0.063642054 }, { - "connectionEstablishedSeconds": 0.188626728, - "uploadSeconds": 0.00000324, - "downloadSeconds": 0.06187622 + "connectionEstablishedSeconds": 0.195048493, + "uploadSeconds": 0.000002757, + "downloadSeconds": 0.064820438 }, { - "connectionEstablishedSeconds": 0.190810988, - "uploadSeconds": 0.000003275, - "downloadSeconds": 0.063101919 + "connectionEstablishedSeconds": 0.189047724, + "uploadSeconds": 0.000002808, + "downloadSeconds": 0.062834428 }, { - "connectionEstablishedSeconds": 0.192989026, - "uploadSeconds": 0.000002992, - "downloadSeconds": 0.063853567 + "connectionEstablishedSeconds": 0.180397985, + "uploadSeconds": 0.000003458, + "downloadSeconds": 0.059869496 }, { - "connectionEstablishedSeconds": 0.189992784, - "uploadSeconds": 0.000003782, - "downloadSeconds": 0.062369201 + "connectionEstablishedSeconds": 0.186177698, + "uploadSeconds": 0.000002848, + "downloadSeconds": 0.061949718 }, { - "connectionEstablishedSeconds": 0.194293407, - "uploadSeconds": 0.000003116, - "downloadSeconds": 0.063669453 + "connectionEstablishedSeconds": 0.184378953, + "uploadSeconds": 0.000002812, + "downloadSeconds": 0.060721205 }, { - "connectionEstablishedSeconds": 0.190904301, - "uploadSeconds": 0.000004374, - "downloadSeconds": 0.062676162 + "connectionEstablishedSeconds": 0.186369218, + "uploadSeconds": 0.00000278, + "downloadSeconds": 0.06184929 }, { - "connectionEstablishedSeconds": 0.195879226, - "uploadSeconds": 0.000004131, - "downloadSeconds": 0.064389181 + "connectionEstablishedSeconds": 0.181095573, + "uploadSeconds": 0.000002641, + "downloadSeconds": 0.059917592 }, { - "connectionEstablishedSeconds": 0.193824536, - "uploadSeconds": 0.000004093, - "downloadSeconds": 0.063465764 + "connectionEstablishedSeconds": 0.191990515, + "uploadSeconds": 0.000002874, + "downloadSeconds": 0.06378383 }, { - "connectionEstablishedSeconds": 0.188027247, - "uploadSeconds": 0.000002917, - "downloadSeconds": 0.062328405 + "connectionEstablishedSeconds": 0.192352466, + "uploadSeconds": 0.000002752, + "downloadSeconds": 0.063901611 }, { - "connectionEstablishedSeconds": 0.195207956, - "uploadSeconds": 0.000003012, - "downloadSeconds": 0.064754265 + "connectionEstablishedSeconds": 0.182984558, + "uploadSeconds": 0.000002565, + "downloadSeconds": 0.060697665 }, { - "connectionEstablishedSeconds": 0.190079317, - "uploadSeconds": 0.000004124, - "downloadSeconds": 0.062940938 + "connectionEstablishedSeconds": 0.180276975, + "uploadSeconds": 0.000002711, + "downloadSeconds": 0.05981274 }, { - "connectionEstablishedSeconds": 0.19125065, - "uploadSeconds": 0.000003096, - "downloadSeconds": 0.063017625 + "connectionEstablishedSeconds": 0.191817546, + "uploadSeconds": 0.000028849, + "downloadSeconds": 0.063745476 }, { - "connectionEstablishedSeconds": 0.189269514, - "uploadSeconds": 0.000003286, - "downloadSeconds": 0.062708315 + "connectionEstablishedSeconds": 0.188138466, + "uploadSeconds": 0.000003258, + "downloadSeconds": 0.06269192 }, { - "connectionEstablishedSeconds": 0.190415547, - "uploadSeconds": 0.000003906, - "downloadSeconds": 0.063148976 + "connectionEstablishedSeconds": 0.183067138, + "uploadSeconds": 0.000004419, + "downloadSeconds": 0.06075878 }, { - "connectionEstablishedSeconds": 0.187764982, - "uploadSeconds": 0.000003329, - "downloadSeconds": 0.061561417 + "connectionEstablishedSeconds": 0.18702717, + "uploadSeconds": 0.000003354, + "downloadSeconds": 0.061606144 }, { - "connectionEstablishedSeconds": 0.184668878, - "uploadSeconds": 0.000003093, - "downloadSeconds": 0.060799904 + "connectionEstablishedSeconds": 0.191716102, + "uploadSeconds": 0.000003159, + "downloadSeconds": 0.063623532 }, { - "connectionEstablishedSeconds": 0.178886012, - "uploadSeconds": 0.000003475, - "downloadSeconds": 0.058630013 + "connectionEstablishedSeconds": 0.182639882, + "uploadSeconds": 0.000003776, + "downloadSeconds": 0.060619907 }, { - "connectionEstablishedSeconds": 0.187124831, - "uploadSeconds": 0.000003911, - "downloadSeconds": 0.061490874 + "connectionEstablishedSeconds": 0.190054457, + "uploadSeconds": 0.000029109, + "downloadSeconds": 0.062534156 }, { - "connectionEstablishedSeconds": 0.191519886, - "uploadSeconds": 0.000003354, - "downloadSeconds": 0.06284 + "connectionEstablishedSeconds": 0.182799686, + "uploadSeconds": 0.000002459, + "downloadSeconds": 0.060676326 }, { - "connectionEstablishedSeconds": 0.183677331, - "uploadSeconds": 0.000003329, - "downloadSeconds": 0.060895723 + "connectionEstablishedSeconds": 0.189183668, + "uploadSeconds": 0.000002535, + "downloadSeconds": 0.062799251 }, { - "connectionEstablishedSeconds": 0.193609607, - "uploadSeconds": 0.000003424, - "downloadSeconds": 0.063463555 + "connectionEstablishedSeconds": 0.186685655, + "uploadSeconds": 0.000002854, + "downloadSeconds": 0.061968925 }, { - "connectionEstablishedSeconds": 0.190345657, - "uploadSeconds": 0.000004193, - "downloadSeconds": 0.062501922 + "connectionEstablishedSeconds": 0.185081845, + "uploadSeconds": 0.000002552, + "downloadSeconds": 0.061438607 }, { - "connectionEstablishedSeconds": 0.189962975, - "uploadSeconds": 0.000003208, - "downloadSeconds": 0.06288207 + "connectionEstablishedSeconds": 0.191663837, + "uploadSeconds": 0.000003124, + "downloadSeconds": 0.063768617 }, { - "connectionEstablishedSeconds": 0.187529507, - "uploadSeconds": 0.000003354, - "downloadSeconds": 0.061472793 + "connectionEstablishedSeconds": 0.183675177, + "uploadSeconds": 0.000002713, + "downloadSeconds": 0.060883216 }, { - "connectionEstablishedSeconds": 0.187134544, - "uploadSeconds": 0.000006123, - "downloadSeconds": 0.061314985 + "connectionEstablishedSeconds": 0.190181267, + "uploadSeconds": 0.000002829, + "downloadSeconds": 0.062700105 }, { - "connectionEstablishedSeconds": 0.197905948, - "uploadSeconds": 0.000003685, - "downloadSeconds": 0.065034712 + "connectionEstablishedSeconds": 0.180060968, + "uploadSeconds": 0.000002806, + "downloadSeconds": 0.059705018 }, { - "connectionEstablishedSeconds": 0.177555793, - "uploadSeconds": 0.000003361, - "downloadSeconds": 0.058861411 + "connectionEstablishedSeconds": 0.191645155, + "uploadSeconds": 0.000029455, + "downloadSeconds": 0.063685876 }, { - "connectionEstablishedSeconds": 0.191306735, - "uploadSeconds": 0.000017854, - "downloadSeconds": 0.064192984 + "connectionEstablishedSeconds": 0.180504364, + "uploadSeconds": 0.000002575, + "downloadSeconds": 0.05991312 }, { - "connectionEstablishedSeconds": 0.196022343, - "uploadSeconds": 0.000003263, - "downloadSeconds": 0.065029693 + "connectionEstablishedSeconds": 0.193935221, + "uploadSeconds": 0.000003045, + "downloadSeconds": 0.064477779 }, { - "connectionEstablishedSeconds": 0.193764388, - "uploadSeconds": 0.000003303, - "downloadSeconds": 0.063631364 + "connectionEstablishedSeconds": 0.192045328, + "uploadSeconds": 0.000002898, + "downloadSeconds": 0.06378694 }, { - "connectionEstablishedSeconds": 0.196818543, - "uploadSeconds": 0.0000033, - "downloadSeconds": 0.064576233 + "connectionEstablishedSeconds": 0.186306984, + "uploadSeconds": 0.00000316, + "downloadSeconds": 0.061953872 }, { - "connectionEstablishedSeconds": 0.176810816, - "uploadSeconds": 0.000002908, - "downloadSeconds": 0.058414157 + "connectionEstablishedSeconds": 0.189007922, + "uploadSeconds": 0.000003043, + "downloadSeconds": 0.06281545 }, { - "connectionEstablishedSeconds": 0.192276585, - "uploadSeconds": 0.000003158, - "downloadSeconds": 0.06325269 + "connectionEstablishedSeconds": 0.189486479, + "uploadSeconds": 0.000003315, + "downloadSeconds": 0.062825987 }, { - "connectionEstablishedSeconds": 0.194074023, - "uploadSeconds": 0.000028356, - "downloadSeconds": 0.063717898 + "connectionEstablishedSeconds": 0.181094531, + "uploadSeconds": 0.000002811, + "downloadSeconds": 0.059969804 }, { - "connectionEstablishedSeconds": 0.193206952, - "uploadSeconds": 0.000003765, - "downloadSeconds": 0.0635352 + "connectionEstablishedSeconds": 0.1830718, + "uploadSeconds": 0.000002888, + "downloadSeconds": 0.060698437 }, { - "connectionEstablishedSeconds": 0.190057792, - "uploadSeconds": 0.000003348, - "downloadSeconds": 0.062436626 + "connectionEstablishedSeconds": 0.196168338, + "uploadSeconds": 0.000002509, + "downloadSeconds": 0.064624097 }, { - "connectionEstablishedSeconds": 0.18784935, - "uploadSeconds": 0.000003782, - "downloadSeconds": 0.061669523 + "connectionEstablishedSeconds": 0.186413507, + "uploadSeconds": 0.000002768, + "downloadSeconds": 0.061899526 }, { - "connectionEstablishedSeconds": 0.198006008, - "uploadSeconds": 0.000003444, - "downloadSeconds": 0.065708426 + "connectionEstablishedSeconds": 0.189171227, + "uploadSeconds": 0.000003573, + "downloadSeconds": 0.062751134 }, { - "connectionEstablishedSeconds": 0.188476641, - "uploadSeconds": 0.0000039, - "downloadSeconds": 0.062462671 + "connectionEstablishedSeconds": 0.183086619, + "uploadSeconds": 0.000003225, + "downloadSeconds": 0.060683139 }, { - "connectionEstablishedSeconds": 0.182203575, - "uploadSeconds": 0.000003323, - "downloadSeconds": 0.060250246 + "connectionEstablishedSeconds": 0.186043297, + "uploadSeconds": 0.000002928, + "downloadSeconds": 0.06177992 }, { - "connectionEstablishedSeconds": 0.19490573, - "uploadSeconds": 0.000003738, - "downloadSeconds": 0.064006097 + "connectionEstablishedSeconds": 0.183359541, + "uploadSeconds": 0.000003048, + "downloadSeconds": 0.06096878 }, { - "connectionEstablishedSeconds": 0.185335964, - "uploadSeconds": 0.000003142, - "downloadSeconds": 0.06146971 + "connectionEstablishedSeconds": 0.192546251, + "uploadSeconds": 0.000002835, + "downloadSeconds": 0.064013308 }, { - "connectionEstablishedSeconds": 0.183792864, - "uploadSeconds": 0.000003206, - "downloadSeconds": 0.060305569 + "connectionEstablishedSeconds": 0.19044114, + "uploadSeconds": 0.000007019, + "downloadSeconds": 0.06260421 }, { - "connectionEstablishedSeconds": 0.19713591, - "uploadSeconds": 0.000003169, - "downloadSeconds": 0.065241664 + "connectionEstablishedSeconds": 0.186461758, + "uploadSeconds": 0.000002779, + "downloadSeconds": 0.061927188 }, { - "connectionEstablishedSeconds": 0.184555929, - "uploadSeconds": 0.000003789, - "downloadSeconds": 0.060342486 + "connectionEstablishedSeconds": 0.18984499, + "uploadSeconds": 0.000002472, + "downloadSeconds": 0.063014002 }, { - "connectionEstablishedSeconds": 0.191511875, - "uploadSeconds": 0.000002978, - "downloadSeconds": 0.063331886 + "connectionEstablishedSeconds": 0.188092246, + "uploadSeconds": 0.000002552, + "downloadSeconds": 0.061919963 }, { - "connectionEstablishedSeconds": 0.190624737, - "uploadSeconds": 0.000004287, - "downloadSeconds": 0.063210077 + "connectionEstablishedSeconds": 0.187593099, + "uploadSeconds": 0.000003, + "downloadSeconds": 0.061569077 }, { - "connectionEstablishedSeconds": 0.194129578, - "uploadSeconds": 0.000004907, - "downloadSeconds": 0.064407992 + "connectionEstablishedSeconds": 0.186732225, + "uploadSeconds": 0.000002904, + "downloadSeconds": 0.062112132 }, { - "connectionEstablishedSeconds": 0.195752646, - "uploadSeconds": 0.000003319, - "downloadSeconds": 0.064317242 + "connectionEstablishedSeconds": 0.192047274, + "uploadSeconds": 0.000003186, + "downloadSeconds": 0.063781942 }, { - "connectionEstablishedSeconds": 0.19257992, - "uploadSeconds": 0.000003625, - "downloadSeconds": 0.063064308 + "connectionEstablishedSeconds": 0.189776468, + "uploadSeconds": 0.000002952, + "downloadSeconds": 0.062898156 }, { - "connectionEstablishedSeconds": 0.189536779, - "uploadSeconds": 0.000004356, - "downloadSeconds": 0.062742188 + "connectionEstablishedSeconds": 0.180225416, + "uploadSeconds": 0.00000254, + "downloadSeconds": 0.059805085 }, { - "connectionEstablishedSeconds": 0.188275419, - "uploadSeconds": 0.000003002, - "downloadSeconds": 0.062369722 + "connectionEstablishedSeconds": 0.185993981, + "uploadSeconds": 0.000002424, + "downloadSeconds": 0.061691175 }, { - "connectionEstablishedSeconds": 0.186185139, - "uploadSeconds": 0.000003817, - "downloadSeconds": 0.06109316 + "connectionEstablishedSeconds": 0.186086915, + "uploadSeconds": 0.000002676, + "downloadSeconds": 0.061743733 }, { - "connectionEstablishedSeconds": 0.184696604, - "uploadSeconds": 0.000003261, - "downloadSeconds": 0.060609072 + "connectionEstablishedSeconds": 0.18631141, + "uploadSeconds": 0.000003226, + "downloadSeconds": 0.061934772 }, { - "connectionEstablishedSeconds": 0.196722355, - "uploadSeconds": 0.000003351, - "downloadSeconds": 0.064479896 + "connectionEstablishedSeconds": 0.189213803, + "uploadSeconds": 0.000002852, + "downloadSeconds": 0.062746862 }, { - "connectionEstablishedSeconds": 0.191478022, - "uploadSeconds": 0.000003218, - "downloadSeconds": 0.063413269 + "connectionEstablishedSeconds": 0.191304096, + "uploadSeconds": 0.000002636, + "downloadSeconds": 0.063466588 }, { - "connectionEstablishedSeconds": 0.187673152, - "uploadSeconds": 0.000004551, - "downloadSeconds": 0.062067971 + "connectionEstablishedSeconds": 0.1907913, + "uploadSeconds": 0.000002571, + "downloadSeconds": 0.062638182 }, { - "connectionEstablishedSeconds": 0.193827421, - "uploadSeconds": 0.000003475, - "downloadSeconds": 0.06433508 + "connectionEstablishedSeconds": 0.185683906, + "uploadSeconds": 0.000003292, + "downloadSeconds": 0.061576998 }, { - "connectionEstablishedSeconds": 0.192151163, - "uploadSeconds": 0.000003606, - "downloadSeconds": 0.06354583 + "connectionEstablishedSeconds": 0.191299515, + "uploadSeconds": 0.000002781, + "downloadSeconds": 0.063443452 }, { - "connectionEstablishedSeconds": 0.191935843, - "uploadSeconds": 0.000008481, - "downloadSeconds": 0.06291483 + "connectionEstablishedSeconds": 0.18068616, + "uploadSeconds": 0.000002626, + "downloadSeconds": 0.062160196 }, { - "connectionEstablishedSeconds": 0.185985133, - "uploadSeconds": 0.00000336, - "downloadSeconds": 0.060967739 + "connectionEstablishedSeconds": 0.184940813, + "uploadSeconds": 0.000003747, + "downloadSeconds": 0.06091017 }, { - "connectionEstablishedSeconds": 0.195609673, - "uploadSeconds": 0.000003403, - "downloadSeconds": 0.064748252 + "connectionEstablishedSeconds": 0.186415256, + "uploadSeconds": 0.000002588, + "downloadSeconds": 0.061718645 }, { - "connectionEstablishedSeconds": 0.188223984, - "uploadSeconds": 0.000003478, - "downloadSeconds": 0.061775663 + "connectionEstablishedSeconds": 0.182090029, + "uploadSeconds": 0.000002676, + "downloadSeconds": 0.059760087 }, { - "connectionEstablishedSeconds": 0.194433271, - "uploadSeconds": 0.000003335, - "downloadSeconds": 0.06381819 + "connectionEstablishedSeconds": 0.183065222, + "uploadSeconds": 0.000002804, + "downloadSeconds": 0.060781091 }, { - "connectionEstablishedSeconds": 0.192984602, - "uploadSeconds": 0.000009887, - "downloadSeconds": 0.06334622 + "connectionEstablishedSeconds": 0.183411267, + "uploadSeconds": 0.000002657, + "downloadSeconds": 0.121622158 }, { - "connectionEstablishedSeconds": 0.192388961, - "uploadSeconds": 0.00000345, - "downloadSeconds": 0.063253286 + "connectionEstablishedSeconds": 0.191322892, + "uploadSeconds": 0.000003258, + "downloadSeconds": 0.063458585 }, { - "connectionEstablishedSeconds": 0.191417727, - "uploadSeconds": 0.000004113, - "downloadSeconds": 0.063491585 + "connectionEstablishedSeconds": 0.189979037, + "uploadSeconds": 0.000002479, + "downloadSeconds": 0.063328428 }, { - "connectionEstablishedSeconds": 0.189679397, - "uploadSeconds": 0.000003253, - "downloadSeconds": 0.062184388 + "connectionEstablishedSeconds": 0.189313035, + "uploadSeconds": 0.000002764, + "downloadSeconds": 0.062912406 }, { - "connectionEstablishedSeconds": 0.193117883, - "uploadSeconds": 0.000003131, - "downloadSeconds": 0.063380846 + "connectionEstablishedSeconds": 0.18401965, + "uploadSeconds": 0.000002427, + "downloadSeconds": 0.061105562 }, { - "connectionEstablishedSeconds": 0.198822172, - "uploadSeconds": 0.000003281, - "downloadSeconds": 0.06583434 + "connectionEstablishedSeconds": 0.194944818, + "uploadSeconds": 0.000002877, + "downloadSeconds": 0.064770594 }, { - "connectionEstablishedSeconds": 0.194338454, - "uploadSeconds": 0.000003423, - "downloadSeconds": 0.063830621 + "connectionEstablishedSeconds": 0.191603773, + "uploadSeconds": 0.000002514, + "downloadSeconds": 0.063544947 }, { - "connectionEstablishedSeconds": 0.183162377, - "uploadSeconds": 0.00000359, - "downloadSeconds": 0.06064044 + "connectionEstablishedSeconds": 0.193499569, + "uploadSeconds": 0.000002845, + "downloadSeconds": 0.063754359 }, { - "connectionEstablishedSeconds": 0.185396487, - "uploadSeconds": 0.000003061, - "downloadSeconds": 0.060731449 + "connectionEstablishedSeconds": 0.184530056, + "uploadSeconds": 0.000002668, + "downloadSeconds": 0.060638263 }, { - "connectionEstablishedSeconds": 0.191415236, - "uploadSeconds": 0.000003353, - "downloadSeconds": 0.063384523 + "connectionEstablishedSeconds": 0.191604207, + "uploadSeconds": 0.000002563, + "downloadSeconds": 0.0639117 }, { - "connectionEstablishedSeconds": 0.190619261, - "uploadSeconds": 0.000003132, - "downloadSeconds": 0.063068455 + "connectionEstablishedSeconds": 0.183141822, + "uploadSeconds": 0.000002596, + "downloadSeconds": 0.060763659 }, { - "connectionEstablishedSeconds": 0.194471485, - "uploadSeconds": 0.000002969, - "downloadSeconds": 0.064423235 + "connectionEstablishedSeconds": 0.187710582, + "uploadSeconds": 0.00000278, + "downloadSeconds": 0.06188513 }, { - "connectionEstablishedSeconds": 0.188817858, - "uploadSeconds": 0.000003669, - "downloadSeconds": 0.061856513 + "connectionEstablishedSeconds": 0.189822524, + "uploadSeconds": 0.00000292, + "downloadSeconds": 0.063017814 }, { - "connectionEstablishedSeconds": 0.183555378, - "uploadSeconds": 0.000005259, - "downloadSeconds": 0.060761592 + "connectionEstablishedSeconds": 0.190594829, + "uploadSeconds": 0.000002543, + "downloadSeconds": 0.062701724 }, { - "connectionEstablishedSeconds": 0.188950417, - "uploadSeconds": 0.000003292, - "downloadSeconds": 0.062089214 + "connectionEstablishedSeconds": 0.176993265, + "uploadSeconds": 0.000003009, + "downloadSeconds": 0.058829825 }, { - "connectionEstablishedSeconds": 0.186506121, - "uploadSeconds": 0.000004426, - "downloadSeconds": 0.061217405 + "connectionEstablishedSeconds": 0.182993297, + "uploadSeconds": 0.000003084, + "downloadSeconds": 0.060837199 } ], "implementation": "go-libp2p", @@ -3517,504 +3517,504 @@ { "result": [ { - "connectionEstablishedSeconds": 0.063853531, - "uploadSeconds": 0.000002147, - "downloadSeconds": 0.061903846 + "connectionEstablishedSeconds": 0.067063128, + "uploadSeconds": 0.00000255, + "downloadSeconds": 0.063204826 }, { - "connectionEstablishedSeconds": 0.064982901, - "uploadSeconds": 0.000002321, - "downloadSeconds": 0.061408073 + "connectionEstablishedSeconds": 0.066782487, + "uploadSeconds": 0.000001546, + "downloadSeconds": 0.063122863 }, { - "connectionEstablishedSeconds": 0.065961812, - "uploadSeconds": 0.000001949, - "downloadSeconds": 0.063958454 + "connectionEstablishedSeconds": 0.064945846, + "uploadSeconds": 0.000006712, + "downloadSeconds": 0.062253545 }, { - "connectionEstablishedSeconds": 0.070058086, - "uploadSeconds": 0.000002079, - "downloadSeconds": 0.067094922 + "connectionEstablishedSeconds": 0.066663141, + "uploadSeconds": 0.000001417, + "downloadSeconds": 0.064397492 }, { - "connectionEstablishedSeconds": 0.065052069, - "uploadSeconds": 0.000002384, - "downloadSeconds": 0.061295116 + "connectionEstablishedSeconds": 0.066599132, + "uploadSeconds": 0.000001655, + "downloadSeconds": 0.063094509 }, { - "connectionEstablishedSeconds": 0.065195841, - "uploadSeconds": 0.000002264, - "downloadSeconds": 0.063325662 + "connectionEstablishedSeconds": 0.068145486, + "uploadSeconds": 0.000001412, + "downloadSeconds": 0.064893153 }, { - "connectionEstablishedSeconds": 0.066803352, - "uploadSeconds": 0.000002064, - "downloadSeconds": 0.063079582 + "connectionEstablishedSeconds": 0.066373451, + "uploadSeconds": 0.000001572, + "downloadSeconds": 0.06303169 }, { - "connectionEstablishedSeconds": 0.067422036, - "uploadSeconds": 0.000002035, - "downloadSeconds": 0.0636488 + "connectionEstablishedSeconds": 0.067468608, + "uploadSeconds": 0.000001399, + "downloadSeconds": 0.064683769 }, { - "connectionEstablishedSeconds": 0.066899127, - "uploadSeconds": 0.000002832, - "downloadSeconds": 0.063135269 + "connectionEstablishedSeconds": 0.065180795, + "uploadSeconds": 0.000001387, + "downloadSeconds": 0.061834003 }, { - "connectionEstablishedSeconds": 0.065792178, - "uploadSeconds": 0.000002077, - "downloadSeconds": 0.062246279 + "connectionEstablishedSeconds": 0.06192811, + "uploadSeconds": 0.00000254, + "downloadSeconds": 0.05925899 }, { - "connectionEstablishedSeconds": 0.063350798, - "uploadSeconds": 0.000002209, - "downloadSeconds": 0.061342022 + "connectionEstablishedSeconds": 0.064732868, + "uploadSeconds": 0.000001279, + "downloadSeconds": 0.06201311 }, { - "connectionEstablishedSeconds": 0.067943277, - "uploadSeconds": 0.000001636, - "downloadSeconds": 0.064165736 + "connectionEstablishedSeconds": 0.062626418, + "uploadSeconds": 0.000001386, + "downloadSeconds": 0.061064437 }, { - "connectionEstablishedSeconds": 0.065498156, - "uploadSeconds": 0.000001983, - "downloadSeconds": 0.063615849 + "connectionEstablishedSeconds": 0.067256976, + "uploadSeconds": 0.000008145, + "downloadSeconds": 0.064041378 }, { - "connectionEstablishedSeconds": 0.063746753, - "uploadSeconds": 0.000003141, - "downloadSeconds": 0.061706192 + "connectionEstablishedSeconds": 0.064790535, + "uploadSeconds": 0.000001452, + "downloadSeconds": 0.063175101 }, { - "connectionEstablishedSeconds": 0.064723996, - "uploadSeconds": 0.00000233, - "downloadSeconds": 0.062873571 + "connectionEstablishedSeconds": 0.064155258, + "uploadSeconds": 0.000001643, + "downloadSeconds": 0.061171104 }, { - "connectionEstablishedSeconds": 0.064921098, - "uploadSeconds": 0.000020849, - "downloadSeconds": 0.063130592 + "connectionEstablishedSeconds": 0.066241903, + "uploadSeconds": 0.000001506, + "downloadSeconds": 0.063048087 }, { - "connectionEstablishedSeconds": 0.067853394, - "uploadSeconds": 0.000002141, - "downloadSeconds": 0.063972579 + "connectionEstablishedSeconds": 0.060686694, + "uploadSeconds": 0.000001991, + "downloadSeconds": 0.058990749 }, { - "connectionEstablishedSeconds": 0.063701565, - "uploadSeconds": 0.000002394, - "downloadSeconds": 0.061574609 + "connectionEstablishedSeconds": 0.065698562, + "uploadSeconds": 0.000002571, + "downloadSeconds": 0.062183892 }, { - "connectionEstablishedSeconds": 0.067492406, - "uploadSeconds": 0.000002183, - "downloadSeconds": 0.063669215 + "connectionEstablishedSeconds": 0.067436106, + "uploadSeconds": 0.000030687, + "downloadSeconds": 0.063935949 }, { - "connectionEstablishedSeconds": 0.063868952, - "uploadSeconds": 0.000002008, - "downloadSeconds": 0.062071297 + "connectionEstablishedSeconds": 0.060679764, + "uploadSeconds": 0.00000284, + "downloadSeconds": 0.059201156 }, { - "connectionEstablishedSeconds": 0.066077904, - "uploadSeconds": 0.000001883, - "downloadSeconds": 0.064159921 + "connectionEstablishedSeconds": 0.068123828, + "uploadSeconds": 0.000003051, + "downloadSeconds": 0.065147883 }, { - "connectionEstablishedSeconds": 0.065112524, - "uploadSeconds": 0.000002018, - "downloadSeconds": 0.061445425 + "connectionEstablishedSeconds": 0.064644897, + "uploadSeconds": 0.000001669, + "downloadSeconds": 0.060923287 }, { - "connectionEstablishedSeconds": 0.066551635, - "uploadSeconds": 0.000001943, - "downloadSeconds": 0.062937389 + "connectionEstablishedSeconds": 0.068240784, + "uploadSeconds": 0.000008918, + "downloadSeconds": 0.064867621 }, { - "connectionEstablishedSeconds": 0.064780169, - "uploadSeconds": 0.000001746, - "downloadSeconds": 0.061306276 + "connectionEstablishedSeconds": 0.065982936, + "uploadSeconds": 0.000001806, + "downloadSeconds": 0.063155608 }, { - "connectionEstablishedSeconds": 0.066465614, - "uploadSeconds": 0.000003093, - "downloadSeconds": 0.065517295 + "connectionEstablishedSeconds": 0.065214654, + "uploadSeconds": 0.000001796, + "downloadSeconds": 0.061895894 }, { - "connectionEstablishedSeconds": 0.063794166, - "uploadSeconds": 0.000003571, - "downloadSeconds": 0.061647819 + "connectionEstablishedSeconds": 0.064734252, + "uploadSeconds": 0.000001514, + "downloadSeconds": 0.063098793 }, { - "connectionEstablishedSeconds": 0.063356582, - "uploadSeconds": 0.000002864, - "downloadSeconds": 0.061416973 + "connectionEstablishedSeconds": 0.064420739, + "uploadSeconds": 0.000002253, + "downloadSeconds": 0.061200988 }, { - "connectionEstablishedSeconds": 0.064958744, - "uploadSeconds": 0.000008552, - "downloadSeconds": 0.061439026 + "connectionEstablishedSeconds": 0.066506755, + "uploadSeconds": 0.000001405, + "downloadSeconds": 0.063179379 }, { - "connectionEstablishedSeconds": 0.066975692, - "uploadSeconds": 0.00000256, - "downloadSeconds": 0.063151967 + "connectionEstablishedSeconds": 0.066634867, + "uploadSeconds": 0.000001589, + "downloadSeconds": 0.062411834 }, { - "connectionEstablishedSeconds": 0.066554911, - "uploadSeconds": 0.000004909, - "downloadSeconds": 0.064505998 + "connectionEstablishedSeconds": 0.064881041, + "uploadSeconds": 0.000001849, + "downloadSeconds": 0.061304873 }, { - "connectionEstablishedSeconds": 0.069351545, - "uploadSeconds": 0.000001972, - "downloadSeconds": 0.065523048 + "connectionEstablishedSeconds": 0.063458508, + "uploadSeconds": 0.000026403, + "downloadSeconds": 0.060197354 }, { - "connectionEstablishedSeconds": 0.067342819, - "uploadSeconds": 0.000002713, - "downloadSeconds": 0.063545465 + "connectionEstablishedSeconds": 0.065878712, + "uploadSeconds": 0.000001404, + "downloadSeconds": 0.063460912 }, { - "connectionEstablishedSeconds": 0.069139158, - "uploadSeconds": 0.000002075, - "downloadSeconds": 0.065241092 + "connectionEstablishedSeconds": 0.065324234, + "uploadSeconds": 0.000001527, + "downloadSeconds": 0.062049975 }, { - "connectionEstablishedSeconds": 0.064710306, - "uploadSeconds": 0.000001897, - "downloadSeconds": 0.061037498 + "connectionEstablishedSeconds": 0.063969654, + "uploadSeconds": 0.000001452, + "downloadSeconds": 0.061173038 }, { - "connectionEstablishedSeconds": 0.068369429, - "uploadSeconds": 0.000002043, - "downloadSeconds": 0.06492128 + "connectionEstablishedSeconds": 0.065682563, + "uploadSeconds": 0.000001457, + "downloadSeconds": 0.064029696 }, { - "connectionEstablishedSeconds": 0.068059504, - "uploadSeconds": 0.00000186, - "downloadSeconds": 0.064188367 + "connectionEstablishedSeconds": 0.066428582, + "uploadSeconds": 0.000001784, + "downloadSeconds": 0.064669349 }, { - "connectionEstablishedSeconds": 0.066030516, - "uploadSeconds": 0.000002005, - "downloadSeconds": 0.062195243 + "connectionEstablishedSeconds": 0.066525035, + "uploadSeconds": 0.000001243, + "downloadSeconds": 0.063145027 }, { - "connectionEstablishedSeconds": 0.062159714, - "uploadSeconds": 0.000002165, - "downloadSeconds": 0.060150927 + "connectionEstablishedSeconds": 0.065422584, + "uploadSeconds": 0.000001937, + "downloadSeconds": 0.0620699 }, { - "connectionEstablishedSeconds": 0.065208248, - "uploadSeconds": 0.000002206, - "downloadSeconds": 0.063135191 + "connectionEstablishedSeconds": 0.064957658, + "uploadSeconds": 0.000001432, + "downloadSeconds": 0.06222241 }, { - "connectionEstablishedSeconds": 0.065286705, - "uploadSeconds": 0.000002558, - "downloadSeconds": 0.063171598 + "connectionEstablishedSeconds": 0.064929012, + "uploadSeconds": 0.000001333, + "downloadSeconds": 0.06220354 }, { - "connectionEstablishedSeconds": 0.068470709, - "uploadSeconds": 0.000002386, - "downloadSeconds": 0.064698216 + "connectionEstablishedSeconds": 0.066605833, + "uploadSeconds": 0.000004619, + "downloadSeconds": 0.063113142 }, { - "connectionEstablishedSeconds": 0.063230961, - "uploadSeconds": 0.000002172, - "downloadSeconds": 0.05948708 + "connectionEstablishedSeconds": 0.064138733, + "uploadSeconds": 0.000001712, + "downloadSeconds": 0.061120111 }, { - "connectionEstablishedSeconds": 0.064312679, - "uploadSeconds": 0.00000246, - "downloadSeconds": 0.06252934 + "connectionEstablishedSeconds": 0.065978274, + "uploadSeconds": 0.000001453, + "downloadSeconds": 0.064285653 }, { - "connectionEstablishedSeconds": 0.066295193, - "uploadSeconds": 0.000002329, - "downloadSeconds": 0.062686328 + "connectionEstablishedSeconds": 0.066495768, + "uploadSeconds": 0.000001338, + "downloadSeconds": 0.063000355 }, { - "connectionEstablishedSeconds": 0.065746978, - "uploadSeconds": 0.000018708, - "downloadSeconds": 0.062202181 + "connectionEstablishedSeconds": 0.066247408, + "uploadSeconds": 0.000001987, + "downloadSeconds": 0.062975317 }, { - "connectionEstablishedSeconds": 0.065714765, - "uploadSeconds": 0.000002683, - "downloadSeconds": 0.063791958 + "connectionEstablishedSeconds": 0.064640998, + "uploadSeconds": 0.000009963, + "downloadSeconds": 0.061157452 }, { - "connectionEstablishedSeconds": 0.064226408, - "uploadSeconds": 0.000002094, - "downloadSeconds": 0.062257861 + "connectionEstablishedSeconds": 0.064912154, + "uploadSeconds": 0.000001741, + "downloadSeconds": 0.062024509 }, { - "connectionEstablishedSeconds": 0.068032673, - "uploadSeconds": 0.000003414, - "downloadSeconds": 0.064262246 + "connectionEstablishedSeconds": 0.067015567, + "uploadSeconds": 0.000001696, + "downloadSeconds": 0.063370789 }, { - "connectionEstablishedSeconds": 0.067097228, - "uploadSeconds": 0.000002003, - "downloadSeconds": 0.06329759 + "connectionEstablishedSeconds": 0.064593149, + "uploadSeconds": 0.000003034, + "downloadSeconds": 0.060949617 }, { - "connectionEstablishedSeconds": 0.06625451, - "uploadSeconds": 0.000002024, - "downloadSeconds": 0.062532233 + "connectionEstablishedSeconds": 0.068341683, + "uploadSeconds": 0.000001986, + "downloadSeconds": 0.064775692 }, { - "connectionEstablishedSeconds": 0.064510297, - "uploadSeconds": 0.000002254, - "downloadSeconds": 0.063151006 + "connectionEstablishedSeconds": 0.063558677, + "uploadSeconds": 0.000002292, + "downloadSeconds": 0.061962625 }, { - "connectionEstablishedSeconds": 0.068352644, - "uploadSeconds": 0.000008445, - "downloadSeconds": 0.064571904 + "connectionEstablishedSeconds": 0.066248762, + "uploadSeconds": 0.00000159, + "downloadSeconds": 0.064512262 }, { - "connectionEstablishedSeconds": 0.066602972, - "uploadSeconds": 0.000002182, - "downloadSeconds": 0.063109213 + "connectionEstablishedSeconds": 0.064813596, + "uploadSeconds": 0.000001574, + "downloadSeconds": 0.063435802 }, { - "connectionEstablishedSeconds": 0.067583783, - "uploadSeconds": 0.000002343, - "downloadSeconds": 0.063861056 + "connectionEstablishedSeconds": 0.063439106, + "uploadSeconds": 0.000001517, + "downloadSeconds": 0.06185303 }, { - "connectionEstablishedSeconds": 0.066546478, - "uploadSeconds": 0.000002032, - "downloadSeconds": 0.064617388 + "connectionEstablishedSeconds": 0.067423597, + "uploadSeconds": 0.000001813, + "downloadSeconds": 0.064220062 }, { - "connectionEstablishedSeconds": 0.065510554, - "uploadSeconds": 0.000003316, - "downloadSeconds": 0.061889018 + "connectionEstablishedSeconds": 0.065665107, + "uploadSeconds": 0.000001413, + "downloadSeconds": 0.062930418 }, { - "connectionEstablishedSeconds": 0.064845031, - "uploadSeconds": 0.000002076, - "downloadSeconds": 0.063807569 + "connectionEstablishedSeconds": 0.063855472, + "uploadSeconds": 0.000001335, + "downloadSeconds": 0.061216854 }, { - "connectionEstablishedSeconds": 0.0688521, - "uploadSeconds": 0.000003133, - "downloadSeconds": 0.065068437 + "connectionEstablishedSeconds": 0.066595705, + "uploadSeconds": 0.000001521, + "downloadSeconds": 0.063159029 }, { - "connectionEstablishedSeconds": 0.065013793, - "uploadSeconds": 0.000002318, - "downloadSeconds": 0.061350768 + "connectionEstablishedSeconds": 0.065480116, + "uploadSeconds": 0.00000139, + "downloadSeconds": 0.06199377 }, { - "connectionEstablishedSeconds": 0.066968385, - "uploadSeconds": 0.000002255, - "downloadSeconds": 0.063070469 + "connectionEstablishedSeconds": 0.064459859, + "uploadSeconds": 0.00000168, + "downloadSeconds": 0.060965565 }, { - "connectionEstablishedSeconds": 0.067112664, - "uploadSeconds": 0.000002597, - "downloadSeconds": 0.063252006 + "connectionEstablishedSeconds": 0.064728359, + "uploadSeconds": 0.000001544, + "downloadSeconds": 0.061107766 }, { - "connectionEstablishedSeconds": 0.064987554, - "uploadSeconds": 0.000001884, - "downloadSeconds": 0.063063868 + "connectionEstablishedSeconds": 0.064439553, + "uploadSeconds": 0.000001289, + "downloadSeconds": 0.061237578 }, { - "connectionEstablishedSeconds": 0.065967073, - "uploadSeconds": 0.000001956, - "downloadSeconds": 0.062305387 + "connectionEstablishedSeconds": 0.066672895, + "uploadSeconds": 0.000001743, + "downloadSeconds": 0.063340486 }, { - "connectionEstablishedSeconds": 0.067108387, - "uploadSeconds": 0.000001894, - "downloadSeconds": 0.063445272 + "connectionEstablishedSeconds": 0.063725006, + "uploadSeconds": 0.00000136, + "downloadSeconds": 0.062190293 }, { - "connectionEstablishedSeconds": 0.06431435, - "uploadSeconds": 0.000002059, - "downloadSeconds": 0.060717924 + "connectionEstablishedSeconds": 0.066824963, + "uploadSeconds": 0.000001885, + "downloadSeconds": 0.063799326 }, { - "connectionEstablishedSeconds": 0.064242159, - "uploadSeconds": 0.000002072, - "downloadSeconds": 0.060499344 + "connectionEstablishedSeconds": 0.067548219, + "uploadSeconds": 0.000010823, + "downloadSeconds": 0.064073635 }, { - "connectionEstablishedSeconds": 0.066464554, - "uploadSeconds": 0.000002076, - "downloadSeconds": 0.062726048 + "connectionEstablishedSeconds": 0.06171255, + "uploadSeconds": 0.00000197, + "downloadSeconds": 0.060147052 }, { - "connectionEstablishedSeconds": 0.062476705, - "uploadSeconds": 0.000001993, - "downloadSeconds": 0.060485389 + "connectionEstablishedSeconds": 0.065509045, + "uploadSeconds": 0.000001436, + "downloadSeconds": 0.062314981 }, { - "connectionEstablishedSeconds": 0.06673264, - "uploadSeconds": 0.000001825, - "downloadSeconds": 0.063061146 + "connectionEstablishedSeconds": 0.064396241, + "uploadSeconds": 0.000001692, + "downloadSeconds": 0.061174682 }, { - "connectionEstablishedSeconds": 0.064060397, - "uploadSeconds": 0.000001966, - "downloadSeconds": 0.062155527 + "connectionEstablishedSeconds": 0.068220467, + "uploadSeconds": 0.000001645, + "downloadSeconds": 0.064929086 }, { - "connectionEstablishedSeconds": 0.066088265, - "uploadSeconds": 0.000003092, - "downloadSeconds": 0.062378945 + "connectionEstablishedSeconds": 0.067596028, + "uploadSeconds": 0.00000141, + "downloadSeconds": 0.064802475 }, { - "connectionEstablishedSeconds": 0.068514481, - "uploadSeconds": 0.000002025, - "downloadSeconds": 0.0646085 + "connectionEstablishedSeconds": 0.066586389, + "uploadSeconds": 0.000001894, + "downloadSeconds": 0.063067147 }, { - "connectionEstablishedSeconds": 0.064719319, - "uploadSeconds": 0.000001894, - "downloadSeconds": 0.061031787 + "connectionEstablishedSeconds": 0.063745895, + "uploadSeconds": 0.000001717, + "downloadSeconds": 0.060124708 }, { - "connectionEstablishedSeconds": 0.06607192, - "uploadSeconds": 0.000002233, - "downloadSeconds": 0.06412077 + "connectionEstablishedSeconds": 0.061773048, + "uploadSeconds": 0.000001567, + "downloadSeconds": 0.060148058 }, { - "connectionEstablishedSeconds": 0.067629578, - "uploadSeconds": 0.000002087, - "downloadSeconds": 0.063763949 + "connectionEstablishedSeconds": 0.063710595, + "uploadSeconds": 0.000001669, + "downloadSeconds": 0.060146027 }, { - "connectionEstablishedSeconds": 0.06230917, - "uploadSeconds": 0.000002348, - "downloadSeconds": 0.058402315 + "connectionEstablishedSeconds": 0.064994514, + "uploadSeconds": 0.000001841, + "downloadSeconds": 0.061974813 }, { - "connectionEstablishedSeconds": 0.064857756, - "uploadSeconds": 0.000002011, - "downloadSeconds": 0.061142836 + "connectionEstablishedSeconds": 0.066809761, + "uploadSeconds": 0.000001323, + "downloadSeconds": 0.064053178 }, { - "connectionEstablishedSeconds": 0.065864183, - "uploadSeconds": 0.000017621, - "downloadSeconds": 0.062186145 + "connectionEstablishedSeconds": 0.062786571, + "uploadSeconds": 0.00000137, + "downloadSeconds": 0.061228092 }, { - "connectionEstablishedSeconds": 0.06481408, - "uploadSeconds": 0.000002102, - "downloadSeconds": 0.062679584 + "connectionEstablishedSeconds": 0.067906719, + "uploadSeconds": 0.000001426, + "downloadSeconds": 0.064546662 }, { - "connectionEstablishedSeconds": 0.06828223, - "uploadSeconds": 0.000002038, - "downloadSeconds": 0.064575532 + "connectionEstablishedSeconds": 0.067564066, + "uploadSeconds": 0.000001695, + "downloadSeconds": 0.064730913 }, { - "connectionEstablishedSeconds": 0.067096999, - "uploadSeconds": 0.0000099, - "downloadSeconds": 0.063291858 + "connectionEstablishedSeconds": 0.065739467, + "uploadSeconds": 0.000001789, + "downloadSeconds": 0.064036253 }, { - "connectionEstablishedSeconds": 0.065024344, - "uploadSeconds": 0.000002007, - "downloadSeconds": 0.063014329 + "connectionEstablishedSeconds": 0.063495481, + "uploadSeconds": 0.000001853, + "downloadSeconds": 0.0600389 }, { - "connectionEstablishedSeconds": 0.064771268, - "uploadSeconds": 0.000002892, - "downloadSeconds": 0.064019739 + "connectionEstablishedSeconds": 0.065297978, + "uploadSeconds": 0.000002811, + "downloadSeconds": 0.061841368 }, { - "connectionEstablishedSeconds": 0.067307082, - "uploadSeconds": 0.000002052, - "downloadSeconds": 0.063716769 + "connectionEstablishedSeconds": 0.062515855, + "uploadSeconds": 0.000001615, + "downloadSeconds": 0.059111143 }, { - "connectionEstablishedSeconds": 0.066775409, - "uploadSeconds": 0.000002107, - "downloadSeconds": 0.063349371 + "connectionEstablishedSeconds": 0.066641327, + "uploadSeconds": 0.000001318, + "downloadSeconds": 0.063044851 }, { - "connectionEstablishedSeconds": 0.066830275, - "uploadSeconds": 0.000001923, - "downloadSeconds": 0.063185873 + "connectionEstablishedSeconds": 0.068149399, + "uploadSeconds": 0.000001895, + "downloadSeconds": 0.064876682 }, { - "connectionEstablishedSeconds": 0.06780674, - "uploadSeconds": 0.00000236, - "downloadSeconds": 0.064036164 + "connectionEstablishedSeconds": 0.068750096, + "uploadSeconds": 0.00000145, + "downloadSeconds": 0.065101856 }, { - "connectionEstablishedSeconds": 0.065967916, - "uploadSeconds": 0.000002265, - "downloadSeconds": 0.062318402 + "connectionEstablishedSeconds": 0.065012807, + "uploadSeconds": 0.000001538, + "downloadSeconds": 0.062310912 }, { - "connectionEstablishedSeconds": 0.064328056, - "uploadSeconds": 0.000002262, - "downloadSeconds": 0.062424217 + "connectionEstablishedSeconds": 0.066803006, + "uploadSeconds": 0.0000014, + "downloadSeconds": 0.063200097 }, { - "connectionEstablishedSeconds": 0.066084525, - "uploadSeconds": 0.000002192, - "downloadSeconds": 0.062286294 + "connectionEstablishedSeconds": 0.066442956, + "uploadSeconds": 0.000001954, + "downloadSeconds": 0.063076622 }, { - "connectionEstablishedSeconds": 0.06599978, - "uploadSeconds": 0.000002109, - "downloadSeconds": 0.062239371 + "connectionEstablishedSeconds": 0.065595254, + "uploadSeconds": 0.000012475, + "downloadSeconds": 0.062328551 }, { - "connectionEstablishedSeconds": 0.066048454, - "uploadSeconds": 0.000001851, - "downloadSeconds": 0.062367304 + "connectionEstablishedSeconds": 0.064841089, + "uploadSeconds": 0.000001486, + "downloadSeconds": 0.06325524 }, { - "connectionEstablishedSeconds": 0.063651651, - "uploadSeconds": 0.000001993, - "downloadSeconds": 0.061675867 + "connectionEstablishedSeconds": 0.062756433, + "uploadSeconds": 0.000003627, + "downloadSeconds": 0.061104118 }, { - "connectionEstablishedSeconds": 0.06226315, - "uploadSeconds": 0.000018316, - "downloadSeconds": 0.060474821 + "connectionEstablishedSeconds": 0.066508224, + "uploadSeconds": 0.00000183, + "downloadSeconds": 0.062804197 }, { - "connectionEstablishedSeconds": 0.066654209, - "uploadSeconds": 0.000004447, - "downloadSeconds": 0.064621304 + "connectionEstablishedSeconds": 0.067617239, + "uploadSeconds": 0.000001686, + "downloadSeconds": 0.064231672 }, { - "connectionEstablishedSeconds": 0.068243264, - "uploadSeconds": 0.000001947, - "downloadSeconds": 0.066378669 + "connectionEstablishedSeconds": 0.067346421, + "uploadSeconds": 0.000010702, + "downloadSeconds": 0.064020363 }, { - "connectionEstablishedSeconds": 0.065352793, - "uploadSeconds": 0.000002016, - "downloadSeconds": 0.061528441 + "connectionEstablishedSeconds": 0.067274596, + "uploadSeconds": 0.000001407, + "downloadSeconds": 0.064489524 }, { - "connectionEstablishedSeconds": 0.065683131, - "uploadSeconds": 0.000002917, - "downloadSeconds": 0.061882983 + "connectionEstablishedSeconds": 0.065575332, + "uploadSeconds": 0.0000019, + "downloadSeconds": 0.063819503 }, { - "connectionEstablishedSeconds": 0.066137011, - "uploadSeconds": 0.000002347, - "downloadSeconds": 0.064232968 + "connectionEstablishedSeconds": 0.065237663, + "uploadSeconds": 0.000001331, + "downloadSeconds": 0.06210594 }, { - "connectionEstablishedSeconds": 0.066276528, - "uploadSeconds": 0.000002005, - "downloadSeconds": 0.064312874 + "connectionEstablishedSeconds": 0.066305401, + "uploadSeconds": 0.000007477, + "downloadSeconds": 0.062932928 } ], "implementation": "go-libp2p", @@ -4031,106 +4031,106 @@ "pings": { "unit": "s", "results": [ - 0.0599, - 0.0599, - 0.0599, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0599, - 0.0598, - 0.0598, - 0.0599, - 0.0599, - 0.0598, - 0.0599, - 0.0599, - 0.0598, - 0.0598, - 0.0599, - 0.0599, - 0.0598, - 0.0599, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0599, - 0.0599, - 0.0598, - 0.0599, - 0.0598, - 0.0599, - 0.0599, - 0.0598, - 0.0599, - 0.0599, - 0.0599, - 0.0598, - 0.0599, - 0.0598, - 0.0598, - 0.0598, - 0.0599, - 0.0599, - 0.0599, - 0.0599, - 0.0599, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0599, - 0.0598, - 0.0599, - 0.06, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0599, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0599, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0598, - 0.0603, - 0.0598, - 0.0599, - 0.0599, - 0.0598 + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0632, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0632, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0637, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0635, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633, + 0.0633 ] }, "iperf": { @@ -4138,66 +4138,7 @@ "results": [ 3240000000, 3240000000, - 3230000000, - 3240000000, - 3230000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3230000000, - 3230000000, - 3230000000, - 3230000000, - 3230000000, - 3230000000, - 3240000000, - 3250000000, - 3230000000, - 3230000000, - 3240000000, - 3230000000, - 3240000000, - 3230000000, - 3210000000, - 3190000000, - 3190000000, - 3190000000, - 3190000000, - 3220000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3230000000, - 3230000000, - 3240000000, - 3230000000, - 3230000000, - 3230000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3240000000, - 3210000000, - 3190000000, - 3190000000, - 3200000000, - 3200000000, - 3230000000, - 3230000000 + 3050000000 ] } } \ No newline at end of file diff --git a/perf/runner/src/index.ts b/perf/runner/src/index.ts index 48b706903..a2d5077db 100644 --- a/perf/runner/src/index.ts +++ b/perf/runner/src/index.ts @@ -68,21 +68,25 @@ function runPing(clientPublicIP: string, serverPublicIP: string): PingResults { }) .filter((time): time is number => time !== null); // Remove any null values and ensure that array contains only numbers + console.error(`= done`) return { unit: "s", results: times } } function runIPerf(clientPublicIP: string, serverPublicIP: string): IperfResults { console.error(`= run 60 iPerf UDP from client to server`); + console.error(`== kill any existing iPerf server`) let killCMD = `ssh -o StrictHostKeyChecking=no ec2-user@${serverPublicIP} 'kill $(cat pidfile); rm pidfile; rm server.log || true'`; const killSTDOUT = execCommand(killCMD); console.error(killSTDOUT); + console.error(`== start iPerf server`) let serverCMD = `ssh -o StrictHostKeyChecking=no ec2-user@${serverPublicIP} 'nohup iperf3 -s > server.log 2>&1 & echo \$! > pidfile '`; const serverSTDOUT = execCommand(serverCMD); console.error(serverSTDOUT); - let cmd = `ssh -o StrictHostKeyChecking=no ec2-user@${clientPublicIP} 'iperf3 -c ${serverPublicIP} -u -b 25g -t 60'`; + console.error(`== run iPerf client`) + let cmd = `ssh -o StrictHostKeyChecking=no ec2-user@${clientPublicIP} 'iperf3 -c ${serverPublicIP} -u -b 25g -t 1'`; const stdout = execSync(cmd).toString(); // Extract the bitrate from each relevant line @@ -101,6 +105,7 @@ function runIPerf(clientPublicIP: string, serverPublicIP: string): IperfResults }) .filter((bitrate): bitrate is number => bitrate !== null); // Remove any null values + console.error(`= done`) return { unit: "bit/s", results: bitrates} } @@ -124,10 +129,12 @@ function runBenchmarkAcrossVersions(args: ArgsRunBenchmarkAcrossVersions): Bench console.error(`=== Starting server ${version.implementation}/${version.id}`); + console.error(`==== kill any existing server`) let killCMD = `ssh -o StrictHostKeyChecking=no ec2-user@${args.serverPublicIP} 'kill $(cat pidfile); rm pidfile; rm server.log || true'`; const killSTDOUT = execCommand(killCMD); console.error(killSTDOUT); + console.error(`==== start server`) let serverCMD = `ssh -o StrictHostKeyChecking=no ec2-user@${args.serverPublicIP} 'nohup ./impl/${version.implementation}/${version.id}/perf --run-server --server-address 0.0.0.0:4001 --secret-key-seed 0 > server.log 2>&1 & echo \$! > pidfile '`; const serverSTDOUT = execCommand(serverCMD); console.error(serverSTDOUT); From 433e4e5e0b1cd884ac49339a757f90e4f045b769 Mon Sep 17 00:00:00 2001 From: galargh Date: Thu, 25 May 2023 10:42:34 +0200 Subject: [PATCH 07/41] feat: give perf user access to perf bucket --- perf/terraform/common/main.tf | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/perf/terraform/common/main.tf b/perf/terraform/common/main.tf index b7619898c..a244ac5e0 100644 --- a/perf/terraform/common/main.tf +++ b/perf/terraform/common/main.tf @@ -107,3 +107,10 @@ resource "aws_iam_role_policy" "perf_bucket" { output "bucket_name" { value = aws_s3_bucket.perf.bucket } + +resource "aws_iam_user_policy" "perf_bucket" { + name = "perf-bucket" + user = aws_iam_user.perf.name + + policy = data.aws_iam_policy_document.perf_bucket.json +} From 2bf0c7490961cfb82d45161bd28be3538c0f3990 Mon Sep 17 00:00:00 2001 From: galargh Date: Thu, 25 May 2023 11:35:50 +0200 Subject: [PATCH 08/41] feat: implement reusable perf workflow --- .github/workflows/perf.yml | 107 +++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 .github/workflows/perf.yml diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml new file mode 100644 index 000000000..4abed01b9 --- /dev/null +++ b/.github/workflows/perf.yml @@ -0,0 +1,107 @@ +name: libp2p perf test + +on: + workflow_dispatch: + # Requires: + # - vars.PERF_AWS_ACCESS_KEY_ID to be set to the AWS access key ID of 'aws_iam_user.perf' + # - secrets.PERF_AWS_SECRET_ACCESS_KEY to be set to the AWS secret access key of 'aws_iam_user.perf' + # - vars.PERF_AWS_BUCKET to be set to the AWS bucket as output by 'output.bucket_name' + # - secrets.PERF_SSH_PRIVATE_KEY to be set to the SSH private key for 'aws_key_pair.perf' + workflow_call: + inputs: + aws-access-key-id: + type: string + required: true + description: The AWS access key ID of 'aws_iam_user.perf' + aws-bucket: + type: string + required: true + description: The AWS bucket as output by 'output.bucket_name' + runs-on: + type: string + required: false + description: The runs-on value to use for the perf job (defaults to 'ubuntu-latest') + default: ubuntu-latest + ref: + type: string + required: false + description: The ref of the test-plans repo to use (defaults to 'master') + default: master + secrets: + PERF_AWS_SECRET_ACCESS_KEY: # The AWS secret access key of 'aws_iam_user.perf' + required: true + PERF_SSH_PRIVATE_KEY: # The SSH private key for 'aws_key_pair.perf' + required: true + +jobs: + perf: + name: Perf + runs-on: ${{ github.event.inputs.runs-on || 'ubuntu-latest' }} + defaults: + run: + shell: bash + working-directory: perf + env: + AWS_ACCESS_KEY_ID: ${{ github.event.inputs.aws-access-key-id || vars.PERF_AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.PERF_AWS_SECRET_ACCESS_KEY }} + steps: + - name: Configure SSH + uses: webfactory/ssh-agent@d4b9b8ff72958532804b70bbe600ad43b36d5f2e # v0.8.0 + with: + ssh-private-key: ${{ secrets.PERF_SSH_PRIVATE_KEY }} + - name: Checkout test-plans + uses: actions/checkout@v3 + with: + repository: libp2p/test-plans + ref: ${{ github.event.inputs.ref || github.ref }} + - id: server + name: Provision server + run: echo "id=$(make provision-server | tail -n 1)" >> $GITHUB_OUTPUT + - id: client + name: Provision client + run: echo "id=$(make provision-client | tail -n 1)" >> $GITHUB_OUTPUT + - id: ip + name: Wait for client/server IP + env: + SERVER_ID: ${{ steps.server.outputs.id }} + CLIENT_ID: ${{ steps.client.outputs.id }} + run: | + read SERVER_IP CLIENT_IP <<< $(make wait SERVER_ID=$SERVER_ID CLIENT_ID=$CLIENT_ID | tail -n 1) + echo "server=$SERVER_IP" >> $GITHUB_OUTPUT + echo "client=$CLIENT_IP" >> $GITHUB_OUTPUT + - name: Download dependencies + run: npm ci + working-directory: perf/runner + - name: Run tests + env: + SERVER_IP: ${{ steps.ip.outputs.SERVER_IP }} + CLIENT_IP: ${{ steps.ip.outputs.CLIENT_IP }} + run: npm run start -- --client-public-ip $CLIENT_IP --server-public-ip $SERVER_IP + working-directory: perf/runner + - name: Archive results + uses: actions/upload-artifact@v2 + with: + name: results + path: perf/runner/benchmark-results.json + - id: s3 + name: Upload results + env: + AWS_BUCKET: ${{ github.event.inputs.aws-bucket || vars.PERF_AWS_BUCKET }} + run: | + aws s3 cp benchmark-results.json s3://$AWS_BUCKET/$GITHUB_REPOSITORY/$GITHUB_RUN_ID/$GITHUB_RUN_ATTEMPT/benchmark-results.json --acl public-read + echo "url=https://$AWS_BUCKET.s3.amazonaws.com/$GITHUB_REPOSITORY/$GITHUB_RUN_ID/$GITHUB_RUN_ATTEMPT/benchmark-results.json" >> $GITHUB_OUTPUT + working-directory: perf/runner + - name: Set summary + env: + URL: ${{ steps.s3.outputs.url }} + run: echo "$URL" >> $GITHUB_STEP_SUMMARY + - name: Deprovision client + if: always() && steps.client.outputs.id != '' + env: + CLIENT_ID: ${{ steps.client.outputs.id }} + run: make deprovision-client CLIENT_ID=$CLIENT_ID + - name: Deprovision server + if: always() && steps.server.outputs.id != '' + env: + SERVER_ID: ${{ steps.server.outputs.id }} + run: make deprovision-server SERVER_ID=$SERVER_ID From 516d7082f83c31c9a42b5714a19bd0979e299a03 Mon Sep 17 00:00:00 2001 From: galargh Date: Thu, 25 May 2023 12:39:27 +0200 Subject: [PATCH 09/41] debug: use galorgh/test-plans --- .github/workflows/perf.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 4abed01b9..0a28ed24c 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -52,7 +52,7 @@ jobs: - name: Checkout test-plans uses: actions/checkout@v3 with: - repository: libp2p/test-plans + repository: galorgh/test-plans ref: ${{ github.event.inputs.ref || github.ref }} - id: server name: Provision server From 58397bf392315bb09cfd45efed05f8a361931fd7 Mon Sep 17 00:00:00 2001 From: galargh Date: Thu, 25 May 2023 12:42:23 +0200 Subject: [PATCH 10/41] fix: setting server/client IP for tests --- .github/workflows/perf.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 0a28ed24c..6279353dd 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -74,8 +74,8 @@ jobs: working-directory: perf/runner - name: Run tests env: - SERVER_IP: ${{ steps.ip.outputs.SERVER_IP }} - CLIENT_IP: ${{ steps.ip.outputs.CLIENT_IP }} + SERVER_IP: ${{ steps.ip.outputs.server }} + CLIENT_IP: ${{ steps.ip.outputs.client }} run: npm run start -- --client-public-ip $CLIENT_IP --server-public-ip $SERVER_IP working-directory: perf/runner - name: Archive results From 51dbffe3741602c7e5d82620c021128ec035244d Mon Sep 17 00:00:00 2001 From: galargh Date: Thu, 25 May 2023 13:35:32 +0200 Subject: [PATCH 11/41] fix: s3 bucket settings --- perf/terraform/common/main.tf | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/perf/terraform/common/main.tf b/perf/terraform/common/main.tf index a244ac5e0..ceddadc1f 100644 --- a/perf/terraform/common/main.tf +++ b/perf/terraform/common/main.tf @@ -52,7 +52,7 @@ resource "aws_s3_bucket" "perf" { resource "aws_s3_bucket_ownership_controls" "perf" { bucket = aws_s3_bucket.perf.id rule { - object_ownership = "BucketOwnerPreferred" + object_ownership = "ObjectWriter" } } @@ -63,6 +63,16 @@ resource "aws_s3_bucket_acl" "perf" { acl = "private" } +resource "aws_s3_bucket_public_access_block" "perf" { + bucket = aws_s3_bucket.perf.id + + block_public_acls = false + block_public_policy = false + ignore_public_acls = false + restrict_public_buckets = false +} + + data "aws_iam_policy_document" "perf_assume_role" { statement { sid = "" From 2e9c363450370a7af2563d386fea95d31dddde13 Mon Sep 17 00:00:00 2001 From: galargh Date: Thu, 25 May 2023 13:45:11 +0200 Subject: [PATCH 12/41] fix: results upload path --- .github/workflows/perf.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 6279353dd..350088a3a 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -87,9 +87,10 @@ jobs: name: Upload results env: AWS_BUCKET: ${{ github.event.inputs.aws-bucket || vars.PERF_AWS_BUCKET }} + PATH: ${{ github.repository }}/${{ github.run_id }}/${{ github.run_attempt }}/benchmark-results.json run: | - aws s3 cp benchmark-results.json s3://$AWS_BUCKET/$GITHUB_REPOSITORY/$GITHUB_RUN_ID/$GITHUB_RUN_ATTEMPT/benchmark-results.json --acl public-read - echo "url=https://$AWS_BUCKET.s3.amazonaws.com/$GITHUB_REPOSITORY/$GITHUB_RUN_ID/$GITHUB_RUN_ATTEMPT/benchmark-results.json" >> $GITHUB_OUTPUT + aws s3 cp benchmark-results.json s3://$AWS_BUCKET/$PATH --acl public-read + echo "url=https://$AWS_BUCKET.s3.amazonaws.com/$PATH" >> $GITHUB_OUTPUT working-directory: perf/runner - name: Set summary env: From 279f4e2612254924b1e8b1cc6db6aa5d3569b02e Mon Sep 17 00:00:00 2001 From: galargh Date: Thu, 25 May 2023 13:46:24 +0200 Subject: [PATCH 13/41] Revert "debug: make perf tests quicker for testing automation" This reverts commit f76bf6783fa120a30361752ab2a5dc424d4fe42b. --- perf/runner/.gitignore | 2 +- perf/runner/benchmark-results.json | 4661 ++++++++++++++-------------- perf/runner/src/index.ts | 9 +- 3 files changed, 2362 insertions(+), 2310 deletions(-) diff --git a/perf/runner/.gitignore b/perf/runner/.gitignore index 5c09c53cd..6a7f7218f 100644 --- a/perf/runner/.gitignore +++ b/perf/runner/.gitignore @@ -1,2 +1,2 @@ # Ignore built ts files -dist/**/* +dist/**/* \ No newline at end of file diff --git a/perf/runner/benchmark-results.json b/perf/runner/benchmark-results.json index 89582d4e8..e7370ad16 100644 --- a/perf/runner/benchmark-results.json +++ b/perf/runner/benchmark-results.json @@ -7,29 +7,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.068663639, - "uploadSeconds": 0.971522237, - "downloadSeconds": 7.5e-8 + "connectionEstablishedSeconds": 0.071717831, + "uploadSeconds": 1.108251356, + "downloadSeconds": 8.7e-8 }, { - "connectionEstablishedSeconds": 0.064571264, - "uploadSeconds": 1.006864584, - "downloadSeconds": 8.9e-8 + "connectionEstablishedSeconds": 0.06313201, + "uploadSeconds": 0.985241566, + "downloadSeconds": 1.05e-7 }, { - "connectionEstablishedSeconds": 0.066528055, - "uploadSeconds": 1.036081606, - "downloadSeconds": 9e-8 + "connectionEstablishedSeconds": 0.066539845, + "uploadSeconds": 1.032252996, + "downloadSeconds": 7.7e-8 }, { - "connectionEstablishedSeconds": 0.065578595, - "uploadSeconds": 1.019824496, - "downloadSeconds": 7.2e-8 + "connectionEstablishedSeconds": 0.06276987, + "uploadSeconds": 0.976620431, + "downloadSeconds": 8.2e-8 }, { - "connectionEstablishedSeconds": 0.064304559, - "uploadSeconds": 0.980179797, - "downloadSeconds": 8.8e-8 + "connectionEstablishedSeconds": 0.065300697, + "uploadSeconds": 1.018646835, + "downloadSeconds": 9.1e-8 } ], "implementation": "quic-go", @@ -39,29 +39,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.128405044, - "uploadSeconds": 35.73242469, - "downloadSeconds": 0.063445019 + "connectionEstablishedSeconds": 0.126148138, + "uploadSeconds": 35.39770708, + "downloadSeconds": 0.062901647 }, { - "connectionEstablishedSeconds": 0.123901414, - "uploadSeconds": 41.486132683, - "downloadSeconds": 0.062074179 + "connectionEstablishedSeconds": 0.12372451, + "uploadSeconds": 34.877587988, + "downloadSeconds": 0.061690616 }, { - "connectionEstablishedSeconds": 0.11996276, - "uploadSeconds": 37.559449169, - "downloadSeconds": 0.059935097 + "connectionEstablishedSeconds": 0.125053112, + "uploadSeconds": 35.098348121, + "downloadSeconds": 0.062292537 }, { - "connectionEstablishedSeconds": 0.125793813, - "uploadSeconds": 35.25923725, - "downloadSeconds": 0.06271233 + "connectionEstablishedSeconds": 0.123974689, + "uploadSeconds": 34.782441092, + "downloadSeconds": 0.061811206 }, { - "connectionEstablishedSeconds": 0.129607113, - "uploadSeconds": 36.401483646, - "downloadSeconds": 0.064605546 + "connectionEstablishedSeconds": 0.125870163, + "uploadSeconds": 35.341888119, + "downloadSeconds": 0.062707768 } ], "implementation": "rust-libp2p", @@ -71,29 +71,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.064385572, - "uploadSeconds": 6.841925542, - "downloadSeconds": 0.000106173 + "connectionEstablishedSeconds": 0.06387589, + "uploadSeconds": 14.897244537, + "downloadSeconds": 0.000086712 }, { - "connectionEstablishedSeconds": 0.062341568, - "uploadSeconds": 14.459879836, - "downloadSeconds": 0.000094973 + "connectionEstablishedSeconds": 0.064333418, + "uploadSeconds": 10.918767598, + "downloadSeconds": 0.000107009 }, { - "connectionEstablishedSeconds": 0.062272847, - "uploadSeconds": 14.251757072, - "downloadSeconds": 0.000139221 + "connectionEstablishedSeconds": 0.073568486, + "uploadSeconds": 9.286607313, + "downloadSeconds": 0.000220465 }, { - "connectionEstablishedSeconds": 0.064950359, - "uploadSeconds": 12.733163519, - "downloadSeconds": 0.000235574 + "connectionEstablishedSeconds": 0.064221808, + "uploadSeconds": 6.274033928, + "downloadSeconds": 0.000063738 }, { - "connectionEstablishedSeconds": 0.063323857, - "uploadSeconds": 9.784013955, - "downloadSeconds": 0.000182479 + "connectionEstablishedSeconds": 0.063970082, + "uploadSeconds": 13.355328015, + "downloadSeconds": 0.00011874 } ], "implementation": "rust-libp2p", @@ -103,29 +103,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.066722219, - "uploadSeconds": 1.418815168, - "downloadSeconds": 0.000120128 + "connectionEstablishedSeconds": 0.0656414, + "uploadSeconds": 1.441617759, + "downloadSeconds": 0.000192843 }, { - "connectionEstablishedSeconds": 0.065270178, - "uploadSeconds": 1.4420772, - "downloadSeconds": 0.00003674 + "connectionEstablishedSeconds": 0.063041674, + "uploadSeconds": 1.391953849, + "downloadSeconds": 0.000051184 }, { - "connectionEstablishedSeconds": 0.064480199, - "uploadSeconds": 1.474654688, - "downloadSeconds": 0.000168878 + "connectionEstablishedSeconds": 0.062063281, + "uploadSeconds": 1.384806358, + "downloadSeconds": 0.000057135 }, { - "connectionEstablishedSeconds": 0.066338957, - "uploadSeconds": 1.4550637499999999, - "downloadSeconds": 0.000088704 + "connectionEstablishedSeconds": 0.064573601, + "uploadSeconds": 1.424646168, + "downloadSeconds": 0.000048773 }, { - "connectionEstablishedSeconds": 0.064319592, - "uploadSeconds": 1.421135676, - "downloadSeconds": 0.000038847 + "connectionEstablishedSeconds": 0.064452347, + "uploadSeconds": 1.41460567, + "downloadSeconds": 0.000047386 } ], "implementation": "rust-libp2p-quinn", @@ -136,28 +136,28 @@ "result": [ { "connectionEstablishedSeconds": 0, - "uploadSeconds": 3.008602379, - "downloadSeconds": 0.000003705 + "uploadSeconds": 2.7907368139999997, + "downloadSeconds": 0.000004624 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 2.759663186, - "downloadSeconds": 0.000006407 + "uploadSeconds": 2.7706807060000003, + "downloadSeconds": 0.00000681 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 2.71729437, - "downloadSeconds": 0.000004401 + "uploadSeconds": 2.719605393, + "downloadSeconds": 0.000004626 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 2.979351147, - "downloadSeconds": 0.000002086 + "uploadSeconds": 3.003131051, + "downloadSeconds": 0.000004275 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 2.763083469, - "downloadSeconds": 0.000003775 + "uploadSeconds": 3.074974594, + "downloadSeconds": 0.000004652 } ], "implementation": "https", @@ -167,29 +167,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.193456319, - "uploadSeconds": 2.894589803, - "downloadSeconds": 0.126693121 + "connectionEstablishedSeconds": 0.18356968, + "uploadSeconds": 2.845136064, + "downloadSeconds": 0.121465042 }, { - "connectionEstablishedSeconds": 0.19064022, - "uploadSeconds": 2.862888042, - "downloadSeconds": 0.125102764 + "connectionEstablishedSeconds": 0.194598603, + "uploadSeconds": 2.849080344, + "downloadSeconds": 0.126641813 }, { - "connectionEstablishedSeconds": 0.192647656, - "uploadSeconds": 2.920079595, - "downloadSeconds": 0.127129465 + "connectionEstablishedSeconds": 0.187702518, + "uploadSeconds": 2.859621042, + "downloadSeconds": 0.12183152 }, { - "connectionEstablishedSeconds": 0.189460382, - "uploadSeconds": 2.856993687, - "downloadSeconds": 0.125608271 + "connectionEstablishedSeconds": 0.191923365, + "uploadSeconds": 2.864386991, + "downloadSeconds": 0.124702355 }, { - "connectionEstablishedSeconds": 0.19275431, - "uploadSeconds": 2.841484546, - "downloadSeconds": 0.12705017 + "connectionEstablishedSeconds": 0.194006051, + "uploadSeconds": 2.887186679, + "downloadSeconds": 0.125618279 } ], "implementation": "go-libp2p", @@ -199,29 +199,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.067095593, - "uploadSeconds": 1.290156429, - "downloadSeconds": 0.062674435 + "connectionEstablishedSeconds": 0.063861006, + "uploadSeconds": 1.258915335, + "downloadSeconds": 0.060972729 }, { - "connectionEstablishedSeconds": 0.067585844, - "uploadSeconds": 1.306165302, - "downloadSeconds": 0.063240936 + "connectionEstablishedSeconds": 0.066730983, + "uploadSeconds": 1.283791855, + "downloadSeconds": 0.062247951 }, { - "connectionEstablishedSeconds": 0.066898552, - "uploadSeconds": 1.306257807, - "downloadSeconds": 0.063334017 + "connectionEstablishedSeconds": 0.063911766, + "uploadSeconds": 1.229570152, + "downloadSeconds": 0.059556412 }, { - "connectionEstablishedSeconds": 0.065124711, - "uploadSeconds": 1.249441625, - "downloadSeconds": 0.060611316 + "connectionEstablishedSeconds": 0.067878354, + "uploadSeconds": 1.310084448, + "downloadSeconds": 0.063338809 }, { - "connectionEstablishedSeconds": 0.067058528, - "uploadSeconds": 1.3092639130000001, - "downloadSeconds": 0.063869855 + "connectionEstablishedSeconds": 0.065068424, + "uploadSeconds": 1.251689327, + "downloadSeconds": 0.060601996 } ], "implementation": "go-libp2p", @@ -241,29 +241,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.063838891, - "uploadSeconds": 5.37e-7, - "downloadSeconds": 1.057076028 + "connectionEstablishedSeconds": 0.063035848, + "uploadSeconds": 5.57e-7, + "downloadSeconds": 1.031684635 }, { - "connectionEstablishedSeconds": 0.064265954, - "uploadSeconds": 4.84e-7, - "downloadSeconds": 1.082103842 + "connectionEstablishedSeconds": 0.062549491, + "uploadSeconds": 6.24e-7, + "downloadSeconds": 1.062655087 }, { - "connectionEstablishedSeconds": 0.064477977, - "uploadSeconds": 5.17e-7, - "downloadSeconds": 1.058943773 + "connectionEstablishedSeconds": 0.063882753, + "uploadSeconds": 6.15e-7, + "downloadSeconds": 1.365721807 }, { - "connectionEstablishedSeconds": 0.064552736, - "uploadSeconds": 5.06e-7, - "downloadSeconds": 1.059989485 + "connectionEstablishedSeconds": 0.068691444, + "uploadSeconds": 6.46e-7, + "downloadSeconds": 1.129898296 }, { - "connectionEstablishedSeconds": 0.065375131, - "uploadSeconds": 4.4e-7, - "downloadSeconds": 1.074151562 + "connectionEstablishedSeconds": 0.063877163, + "uploadSeconds": 5.54e-7, + "downloadSeconds": 1.049462851 } ], "implementation": "quic-go", @@ -273,29 +273,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.1196204, - "uploadSeconds": 0.059629591, - "downloadSeconds": 40.658258768 + "connectionEstablishedSeconds": 0.125497053, + "uploadSeconds": 0.062505884, + "downloadSeconds": 41.707398634 }, { - "connectionEstablishedSeconds": 0.123982377, - "uploadSeconds": 0.061622624, - "downloadSeconds": 34.689422119 + "connectionEstablishedSeconds": 0.121197039, + "uploadSeconds": 0.060202899, + "downloadSeconds": 34.43093803 }, { - "connectionEstablishedSeconds": 0.125931472, - "uploadSeconds": 0.062612666, - "downloadSeconds": 38.848739706 + "connectionEstablishedSeconds": 0.127645116, + "uploadSeconds": 0.063521098, + "downloadSeconds": 35.914196199 }, { - "connectionEstablishedSeconds": 0.124011057, - "uploadSeconds": 0.061629721, - "downloadSeconds": 34.824431693 + "connectionEstablishedSeconds": 0.129042543, + "uploadSeconds": 0.06410038, + "downloadSeconds": 36.30029051 }, { - "connectionEstablishedSeconds": 0.124096367, - "uploadSeconds": 0.061687859, - "downloadSeconds": 36.513967304 + "connectionEstablishedSeconds": 0.139024871, + "uploadSeconds": 0.069074608, + "downloadSeconds": 39.297212503 } ], "implementation": "rust-libp2p", @@ -305,29 +305,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.065462231, - "uploadSeconds": 0.126806154, - "downloadSeconds": 12.391620245 + "connectionEstablishedSeconds": 0.061232706, + "uploadSeconds": 0.118743292, + "downloadSeconds": 9.754380328 }, { - "connectionEstablishedSeconds": 0.065134832, - "uploadSeconds": 0.127062979, - "downloadSeconds": 15.271370696 + "connectionEstablishedSeconds": 0.066431038, + "uploadSeconds": 0.129401107, + "downloadSeconds": 27.496442621 }, { - "connectionEstablishedSeconds": 0.062317905, - "uploadSeconds": 0.121204266, - "downloadSeconds": 10.961394891 + "connectionEstablishedSeconds": 0.068765541, + "uploadSeconds": 0.134091062, + "downloadSeconds": 28.775083466 }, { - "connectionEstablishedSeconds": 0.063375264, - "uploadSeconds": 0.123399154, - "downloadSeconds": 22.563862097 + "connectionEstablishedSeconds": 0.062047614, + "uploadSeconds": 0.120672787, + "downloadSeconds": 8.824578368 }, { - "connectionEstablishedSeconds": 0.065357509, - "uploadSeconds": 0.127505159, - "downloadSeconds": 6.551619549 + "connectionEstablishedSeconds": 0.063827674, + "uploadSeconds": 0.124235372, + "downloadSeconds": 25.670433799 } ], "implementation": "rust-libp2p", @@ -337,29 +337,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.062966123, - "uploadSeconds": 0.121806319, - "downloadSeconds": 1.30233279 + "connectionEstablishedSeconds": 0.06307016, + "uploadSeconds": 0.121919556, + "downloadSeconds": 1.317938822 }, { - "connectionEstablishedSeconds": 0.064318679, - "uploadSeconds": 0.125496609, - "downloadSeconds": 1.34338631 + "connectionEstablishedSeconds": 0.063818881, + "uploadSeconds": 0.124205443, + "downloadSeconds": 1.348505136 }, { - "connectionEstablishedSeconds": 0.065182719, - "uploadSeconds": 0.127050397, - "downloadSeconds": 1.3743094089999999 + "connectionEstablishedSeconds": 0.06458344, + "uploadSeconds": 0.125787226, + "downloadSeconds": 1.358472583 }, { - "connectionEstablishedSeconds": 0.065216987, - "uploadSeconds": 0.127165225, - "downloadSeconds": 1.382179301 + "connectionEstablishedSeconds": 0.062156734, + "uploadSeconds": 0.120884064, + "downloadSeconds": 1.306500379 }, { - "connectionEstablishedSeconds": 0.062322094, - "uploadSeconds": 0.121392866, - "downloadSeconds": 1.316588984 + "connectionEstablishedSeconds": 0.063961475, + "uploadSeconds": 0.124511573, + "downloadSeconds": 1.345313962 } ], "implementation": "rust-libp2p-quinn", @@ -370,28 +370,28 @@ "result": [ { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188743823, - "downloadSeconds": 2.642548859 + "uploadSeconds": 0.187973696, + "downloadSeconds": 2.848235973 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.179568213, - "downloadSeconds": 2.630649672 + "uploadSeconds": 0.179092659, + "downloadSeconds": 2.597372658 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188641591, - "downloadSeconds": 2.642123384 + "uploadSeconds": 0.186427252, + "downloadSeconds": 2.6870848929999998 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.186251128, - "downloadSeconds": 2.687805906 + "uploadSeconds": 0.185136008, + "downloadSeconds": 2.752771338 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191026056, - "downloadSeconds": 2.732869955 + "uploadSeconds": 0.18952669, + "downloadSeconds": 2.80348634 } ], "implementation": "https", @@ -401,29 +401,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.191964023, - "uploadSeconds": 0.000001396, - "downloadSeconds": 3.085054406 + "connectionEstablishedSeconds": 0.179393572, + "uploadSeconds": 0.000002311, + "downloadSeconds": 2.832866447 }, { - "connectionEstablishedSeconds": 0.176920085, - "uploadSeconds": 0.000002603, - "downloadSeconds": 2.799810482 + "connectionEstablishedSeconds": 0.19359588, + "uploadSeconds": 0.000003047, + "downloadSeconds": 3.205773539 }, { - "connectionEstablishedSeconds": 0.185101448, - "uploadSeconds": 0.00000264, - "downloadSeconds": 2.892284196 + "connectionEstablishedSeconds": 0.182081015, + "uploadSeconds": 0.000002786, + "downloadSeconds": 2.847979808 }, { - "connectionEstablishedSeconds": 0.196307763, - "uploadSeconds": 0.000002245, - "downloadSeconds": 3.341566963 + "connectionEstablishedSeconds": 0.191907804, + "uploadSeconds": 0.000003374, + "downloadSeconds": 3.195657566 }, { - "connectionEstablishedSeconds": 0.183285657, - "uploadSeconds": 0.000002387, - "downloadSeconds": 2.895720577 + "connectionEstablishedSeconds": 0.190046212, + "uploadSeconds": 0.000002577, + "downloadSeconds": 2.9906799 } ], "implementation": "go-libp2p", @@ -433,29 +433,29 @@ { "result": [ { - "connectionEstablishedSeconds": 0.063238427, - "uploadSeconds": 0.000001392, - "downloadSeconds": 1.26596464 + "connectionEstablishedSeconds": 0.065825098, + "uploadSeconds": 0.000003218, + "downloadSeconds": 1.3629588369999999 }, { - "connectionEstablishedSeconds": 0.067490232, - "uploadSeconds": 0.000001589, - "downloadSeconds": 1.37421532 + "connectionEstablishedSeconds": 0.068266897, + "uploadSeconds": 0.000001669, + "downloadSeconds": 1.38042863 }, { - "connectionEstablishedSeconds": 0.066926398, - "uploadSeconds": 0.000002128, - "downloadSeconds": 1.37513495 + "connectionEstablishedSeconds": 0.063680453, + "uploadSeconds": 0.000001863, + "downloadSeconds": 1.328038099 }, { - "connectionEstablishedSeconds": 0.062912739, - "uploadSeconds": 0.000001221, - "downloadSeconds": 1.311702462 + "connectionEstablishedSeconds": 0.06607397, + "uploadSeconds": 0.000002147, + "downloadSeconds": 1.371688504 }, { - "connectionEstablishedSeconds": 0.065896618, - "uploadSeconds": 0.000001314, - "downloadSeconds": 1.286536913 + "connectionEstablishedSeconds": 0.067246739, + "uploadSeconds": 0.000002139, + "downloadSeconds": 1.359028703 } ], "implementation": "go-libp2p", @@ -475,504 +475,504 @@ { "result": [ { - "connectionEstablishedSeconds": 0.06488713, - "uploadSeconds": 9.19e-7, - "downloadSeconds": 0.062857319 + "connectionEstablishedSeconds": 0.065165399, + "uploadSeconds": 0.00000205, + "downloadSeconds": 0.062984402 }, { - "connectionEstablishedSeconds": 0.062483946, - "uploadSeconds": 0.000001831, - "downloadSeconds": 0.060607392 + "connectionEstablishedSeconds": 0.062747394, + "uploadSeconds": 0.000001998, + "downloadSeconds": 0.060839292 }, { - "connectionEstablishedSeconds": 0.06142815, - "uploadSeconds": 8.84e-7, - "downloadSeconds": 0.059845901 + "connectionEstablishedSeconds": 0.064625822, + "uploadSeconds": 0.000002479, + "downloadSeconds": 0.062788394 }, { - "connectionEstablishedSeconds": 0.063266126, - "uploadSeconds": 0.000001814, - "downloadSeconds": 0.061542901 + "connectionEstablishedSeconds": 0.063698972, + "uploadSeconds": 0.000001982, + "downloadSeconds": 0.06184015 }, { - "connectionEstablishedSeconds": 0.064322322, - "uploadSeconds": 8.1e-7, - "downloadSeconds": 0.062794106 + "connectionEstablishedSeconds": 0.062634644, + "uploadSeconds": 0.000001991, + "downloadSeconds": 0.060870242 }, { - "connectionEstablishedSeconds": 0.063579917, - "uploadSeconds": 0.000001939, - "downloadSeconds": 0.061793134 + "connectionEstablishedSeconds": 0.064013275, + "uploadSeconds": 0.000001995, + "downloadSeconds": 0.062124273 }, { - "connectionEstablishedSeconds": 0.062640298, - "uploadSeconds": 0.000002002, - "downloadSeconds": 0.060939348 + "connectionEstablishedSeconds": 0.064267083, + "uploadSeconds": 9.64e-7, + "downloadSeconds": 0.062409567 }, { - "connectionEstablishedSeconds": 0.061572764, - "uploadSeconds": 0.000001864, - "downloadSeconds": 0.059844235 + "connectionEstablishedSeconds": 0.062738711, + "uploadSeconds": 0.000001009, + "downloadSeconds": 0.061048678 }, { - "connectionEstablishedSeconds": 0.062662707, - "uploadSeconds": 0.000001864, - "downloadSeconds": 0.061032725 + "connectionEstablishedSeconds": 0.064751569, + "uploadSeconds": 8.54e-7, + "downloadSeconds": 0.062899016 }, { - "connectionEstablishedSeconds": 0.062689451, - "uploadSeconds": 0.000001806, - "downloadSeconds": 0.060849314 + "connectionEstablishedSeconds": 0.065416862, + "uploadSeconds": 0.000002034, + "downloadSeconds": 0.06361402 }, { - "connectionEstablishedSeconds": 0.060444245, - "uploadSeconds": 0.00000193, - "downloadSeconds": 0.059100418 + "connectionEstablishedSeconds": 0.063444387, + "uploadSeconds": 8.11e-7, + "downloadSeconds": 0.061771271 }, { - "connectionEstablishedSeconds": 0.062508004, - "uploadSeconds": 0.000001852, - "downloadSeconds": 0.060803652 + "connectionEstablishedSeconds": 0.063137822, + "uploadSeconds": 8.55e-7, + "downloadSeconds": 0.061375102 }, { - "connectionEstablishedSeconds": 0.064521009, - "uploadSeconds": 0.000002104, - "downloadSeconds": 0.062784003 + "connectionEstablishedSeconds": 0.065550564, + "uploadSeconds": 8.8e-7, + "downloadSeconds": 0.063849843 }, { - "connectionEstablishedSeconds": 0.062374518, - "uploadSeconds": 7.54e-7, - "downloadSeconds": 0.060729101 + "connectionEstablishedSeconds": 0.064651059, + "uploadSeconds": 8.99e-7, + "downloadSeconds": 0.062754622 }, { - "connectionEstablishedSeconds": 0.062986822, - "uploadSeconds": 0.000001848, - "downloadSeconds": 0.061419526 + "connectionEstablishedSeconds": 0.065312324, + "uploadSeconds": 0.000001972, + "downloadSeconds": 0.063641094 }, { - "connectionEstablishedSeconds": 0.063286766, - "uploadSeconds": 0.000001838, - "downloadSeconds": 0.061679645 + "connectionEstablishedSeconds": 0.062753236, + "uploadSeconds": 8.91e-7, + "downloadSeconds": 0.06103999 }, { - "connectionEstablishedSeconds": 0.06449417, - "uploadSeconds": 0.00000187, - "downloadSeconds": 0.064305581 + "connectionEstablishedSeconds": 0.064600329, + "uploadSeconds": 0.000001966, + "downloadSeconds": 0.064458711 }, { - "connectionEstablishedSeconds": 0.061786826, - "uploadSeconds": 0.000002048, - "downloadSeconds": 0.059856496 + "connectionEstablishedSeconds": 0.065615952, + "uploadSeconds": 0.00000198, + "downloadSeconds": 0.063755344 }, { - "connectionEstablishedSeconds": 0.062537244, - "uploadSeconds": 0.000001849, - "downloadSeconds": 0.060909401 + "connectionEstablishedSeconds": 0.065301512, + "uploadSeconds": 0.000001254, + "downloadSeconds": 0.06361579 }, { - "connectionEstablishedSeconds": 0.064376883, - "uploadSeconds": 7.66e-7, - "downloadSeconds": 0.062798328 + "connectionEstablishedSeconds": 0.065926556, + "uploadSeconds": 0.00000202, + "downloadSeconds": 0.064356162 }, { - "connectionEstablishedSeconds": 0.061433574, - "uploadSeconds": 0.000001822, - "downloadSeconds": 0.059688401 + "connectionEstablishedSeconds": 0.064776862, + "uploadSeconds": 0.000002286, + "downloadSeconds": 0.063039969 }, { - "connectionEstablishedSeconds": 0.06241839, - "uploadSeconds": 7.49e-7, - "downloadSeconds": 0.060739731 + "connectionEstablishedSeconds": 0.0653571, + "uploadSeconds": 0.000002036, + "downloadSeconds": 0.063505042 }, { - "connectionEstablishedSeconds": 0.063268989, - "uploadSeconds": 7.61e-7, - "downloadSeconds": 0.061596553 + "connectionEstablishedSeconds": 0.064668791, + "uploadSeconds": 8.23e-7, + "downloadSeconds": 0.062919029 }, { - "connectionEstablishedSeconds": 0.066414821, - "uploadSeconds": 7.46e-7, - "downloadSeconds": 0.064751068 + "connectionEstablishedSeconds": 0.062528538, + "uploadSeconds": 8.27e-7, + "downloadSeconds": 0.06084725 }, { - "connectionEstablishedSeconds": 0.063524943, - "uploadSeconds": 0.000001903, - "downloadSeconds": 0.061841533 + "connectionEstablishedSeconds": 0.065401851, + "uploadSeconds": 0.000002032, + "downloadSeconds": 0.063516094 }, { - "connectionEstablishedSeconds": 0.063276246, - "uploadSeconds": 0.000001881, - "downloadSeconds": 0.061584436 + "connectionEstablishedSeconds": 0.067184136, + "uploadSeconds": 0.000001065, + "downloadSeconds": 0.065393404 }, { - "connectionEstablishedSeconds": 0.064587839, - "uploadSeconds": 0.000001887, - "downloadSeconds": 0.063026474 + "connectionEstablishedSeconds": 0.064649371, + "uploadSeconds": 8.6e-7, + "downloadSeconds": 0.062844864 }, { - "connectionEstablishedSeconds": 0.065250554, - "uploadSeconds": 0.000001901, - "downloadSeconds": 0.063914861 + "connectionEstablishedSeconds": 0.064501136, + "uploadSeconds": 0.000001924, + "downloadSeconds": 0.062687518 }, { - "connectionEstablishedSeconds": 0.062156357, - "uploadSeconds": 7.6e-7, - "downloadSeconds": 0.060566451 + "connectionEstablishedSeconds": 0.063678919, + "uploadSeconds": 0.000002086, + "downloadSeconds": 0.061926582 }, { - "connectionEstablishedSeconds": 0.065163547, - "uploadSeconds": 7.72e-7, - "downloadSeconds": 0.063670287 + "connectionEstablishedSeconds": 0.064837881, + "uploadSeconds": 0.000001932, + "downloadSeconds": 0.063041324 }, { - "connectionEstablishedSeconds": 0.063315452, - "uploadSeconds": 0.0000018, - "downloadSeconds": 0.061674428 + "connectionEstablishedSeconds": 0.065451424, + "uploadSeconds": 9.38e-7, + "downloadSeconds": 0.063633789 }, { - "connectionEstablishedSeconds": 0.063380478, - "uploadSeconds": 0.000001745, - "downloadSeconds": 0.061790406 + "connectionEstablishedSeconds": 0.06614835, + "uploadSeconds": 0.000001994, + "downloadSeconds": 0.064388666 }, { - "connectionEstablishedSeconds": 0.064626595, - "uploadSeconds": 0.000001872, - "downloadSeconds": 0.062913441 + "connectionEstablishedSeconds": 0.065818051, + "uploadSeconds": 0.00000108, + "downloadSeconds": 0.06417327 }, { - "connectionEstablishedSeconds": 0.06514523, - "uploadSeconds": 0.000001879, - "downloadSeconds": 0.062825222 + "connectionEstablishedSeconds": 0.064165866, + "uploadSeconds": 0.000001895, + "downloadSeconds": 0.061931799 }, { - "connectionEstablishedSeconds": 0.064459485, - "uploadSeconds": 0.000001887, - "downloadSeconds": 0.062821292 + "connectionEstablishedSeconds": 0.065610024, + "uploadSeconds": 7.56e-7, + "downloadSeconds": 0.063755582 }, { - "connectionEstablishedSeconds": 0.066253555, - "uploadSeconds": 0.000001886, - "downloadSeconds": 0.064580674 + "connectionEstablishedSeconds": 0.064895944, + "uploadSeconds": 0.000001911, + "downloadSeconds": 0.062890372 }, { - "connectionEstablishedSeconds": 0.064468505, - "uploadSeconds": 7.2e-7, - "downloadSeconds": 0.062916373 + "connectionEstablishedSeconds": 0.063400465, + "uploadSeconds": 9.37e-7, + "downloadSeconds": 0.061724983 }, { - "connectionEstablishedSeconds": 0.063095687, - "uploadSeconds": 7.59e-7, - "downloadSeconds": 0.061504988 + "connectionEstablishedSeconds": 0.062550655, + "uploadSeconds": 0.00000184, + "downloadSeconds": 0.060743791 }, { - "connectionEstablishedSeconds": 0.062483352, - "uploadSeconds": 0.000001864, - "downloadSeconds": 0.060847342 + "connectionEstablishedSeconds": 0.061837061, + "uploadSeconds": 7.97e-7, + "downloadSeconds": 0.060037219 }, { - "connectionEstablishedSeconds": 0.064527068, - "uploadSeconds": 0.000001807, - "downloadSeconds": 0.06284921 + "connectionEstablishedSeconds": 0.063318984, + "uploadSeconds": 9.51e-7, + "downloadSeconds": 0.061501912 }, { - "connectionEstablishedSeconds": 0.062523274, - "uploadSeconds": 0.000001939, - "downloadSeconds": 0.060896402 + "connectionEstablishedSeconds": 0.062755613, + "uploadSeconds": 0.000001847, + "downloadSeconds": 0.060933817 }, { - "connectionEstablishedSeconds": 0.065474079, - "uploadSeconds": 0.000001739, - "downloadSeconds": 0.063812404 + "connectionEstablishedSeconds": 0.064000301, + "uploadSeconds": 0.000001945, + "downloadSeconds": 0.062272194 }, { - "connectionEstablishedSeconds": 0.062631776, - "uploadSeconds": 0.000001808, - "downloadSeconds": 0.060957735 + "connectionEstablishedSeconds": 0.063320814, + "uploadSeconds": 8.07e-7, + "downloadSeconds": 0.061480115 }, { - "connectionEstablishedSeconds": 0.064478149, - "uploadSeconds": 0.000001811, - "downloadSeconds": 0.06328586 + "connectionEstablishedSeconds": 0.063596796, + "uploadSeconds": 0.000002113, + "downloadSeconds": 0.061863084 }, { - "connectionEstablishedSeconds": 0.064369049, - "uploadSeconds": 0.000001755, - "downloadSeconds": 0.062731886 + "connectionEstablishedSeconds": 0.0626508, + "uploadSeconds": 7.9e-7, + "downloadSeconds": 0.060858716 }, { - "connectionEstablishedSeconds": 0.061508042, - "uploadSeconds": 0.000001887, - "downloadSeconds": 0.059872758 + "connectionEstablishedSeconds": 0.065164927, + "uploadSeconds": 8.62e-7, + "downloadSeconds": 0.06338737 }, { - "connectionEstablishedSeconds": 0.064326436, - "uploadSeconds": 0.000001789, - "downloadSeconds": 0.061872659 + "connectionEstablishedSeconds": 0.065109136, + "uploadSeconds": 0.00000193, + "downloadSeconds": 0.062728035 }, { - "connectionEstablishedSeconds": 0.064240804, - "uploadSeconds": 0.00000169, - "downloadSeconds": 0.062725133 + "connectionEstablishedSeconds": 0.064769405, + "uploadSeconds": 0.000001872, + "downloadSeconds": 0.062852259 }, { - "connectionEstablishedSeconds": 0.062320912, - "uploadSeconds": 7.04e-7, - "downloadSeconds": 0.060828243 + "connectionEstablishedSeconds": 0.061786286, + "uploadSeconds": 8.24e-7, + "downloadSeconds": 0.060027114 }, { - "connectionEstablishedSeconds": 0.063464511, - "uploadSeconds": 0.000001826, - "downloadSeconds": 0.061819542 + "connectionEstablishedSeconds": 0.064935099, + "uploadSeconds": 0.000002051, + "downloadSeconds": 0.063098459 }, { - "connectionEstablishedSeconds": 0.065340872, - "uploadSeconds": 0.000001809, - "downloadSeconds": 0.063616552 + "connectionEstablishedSeconds": 0.065655911, + "uploadSeconds": 8.36e-7, + "downloadSeconds": 0.063901518 }, { - "connectionEstablishedSeconds": 0.063314114, - "uploadSeconds": 0.000001829, - "downloadSeconds": 0.061738138 + "connectionEstablishedSeconds": 0.064747825, + "uploadSeconds": 7.87e-7, + "downloadSeconds": 0.063124483 }, { - "connectionEstablishedSeconds": 0.065386979, - "uploadSeconds": 0.000001791, - "downloadSeconds": 0.063648812 + "connectionEstablishedSeconds": 0.063503289, + "uploadSeconds": 0.000001984, + "downloadSeconds": 0.061868251 }, { - "connectionEstablishedSeconds": 0.063517435, - "uploadSeconds": 0.000001769, - "downloadSeconds": 0.061911425 + "connectionEstablishedSeconds": 0.061415703, + "uploadSeconds": 0.000001962, + "downloadSeconds": 0.05970872 }, { - "connectionEstablishedSeconds": 0.060455971, - "uploadSeconds": 0.000001961, - "downloadSeconds": 0.058811756 + "connectionEstablishedSeconds": 0.064769602, + "uploadSeconds": 8.4e-7, + "downloadSeconds": 0.063023085 }, { - "connectionEstablishedSeconds": 0.064616367, - "uploadSeconds": 0.000001923, - "downloadSeconds": 0.062953616 + "connectionEstablishedSeconds": 0.065505636, + "uploadSeconds": 8.87e-7, + "downloadSeconds": 0.063739308 }, { - "connectionEstablishedSeconds": 0.064410183, - "uploadSeconds": 0.000001956, - "downloadSeconds": 0.061932159 + "connectionEstablishedSeconds": 0.06451846, + "uploadSeconds": 9.46e-7, + "downloadSeconds": 0.062635088 }, { - "connectionEstablishedSeconds": 0.066156053, - "uploadSeconds": 7.68e-7, - "downloadSeconds": 0.064566131 + "connectionEstablishedSeconds": 0.066384201, + "uploadSeconds": 0.000002059, + "downloadSeconds": 0.063873253 }, { - "connectionEstablishedSeconds": 0.062437355, - "uploadSeconds": 0.000001785, - "downloadSeconds": 0.060726981 + "connectionEstablishedSeconds": 0.062558555, + "uploadSeconds": 0.000001889, + "downloadSeconds": 0.060869005 }, { - "connectionEstablishedSeconds": 0.062192905, - "uploadSeconds": 0.000001946, - "downloadSeconds": 0.060536263 + "connectionEstablishedSeconds": 0.066144963, + "uploadSeconds": 0.000001031, + "downloadSeconds": 0.064446439 }, { - "connectionEstablishedSeconds": 0.065992475, - "uploadSeconds": 0.00000168, - "downloadSeconds": 0.064390333 + "connectionEstablishedSeconds": 0.064371163, + "uploadSeconds": 0.000001844, + "downloadSeconds": 0.062515291 }, { - "connectionEstablishedSeconds": 0.065525251, - "uploadSeconds": 7.09e-7, - "downloadSeconds": 0.063888511 + "connectionEstablishedSeconds": 0.064233048, + "uploadSeconds": 0.000001994, + "downloadSeconds": 0.0624386 }, { - "connectionEstablishedSeconds": 0.065939205, - "uploadSeconds": 8.32e-7, - "downloadSeconds": 0.064554815 + "connectionEstablishedSeconds": 0.06191039, + "uploadSeconds": 0.00000197, + "downloadSeconds": 0.060132284 }, { - "connectionEstablishedSeconds": 0.065506435, - "uploadSeconds": 0.000002034, - "downloadSeconds": 0.063856291 + "connectionEstablishedSeconds": 0.064568576, + "uploadSeconds": 0.000002053, + "downloadSeconds": 0.062796254 }, { - "connectionEstablishedSeconds": 0.066425376, - "uploadSeconds": 0.000001844, - "downloadSeconds": 0.064728163 + "connectionEstablishedSeconds": 0.066758576, + "uploadSeconds": 8.63e-7, + "downloadSeconds": 0.064851693 }, { - "connectionEstablishedSeconds": 0.066165293, - "uploadSeconds": 7.47e-7, - "downloadSeconds": 0.064545913 + "connectionEstablishedSeconds": 0.061160558, + "uploadSeconds": 0.000001989, + "downloadSeconds": 0.059307607 }, { - "connectionEstablishedSeconds": 0.065035418, - "uploadSeconds": 0.000002005, - "downloadSeconds": 0.063411556 + "connectionEstablishedSeconds": 0.063013566, + "uploadSeconds": 0.000002047, + "downloadSeconds": 0.061166608 }, { - "connectionEstablishedSeconds": 0.063229654, - "uploadSeconds": 0.000001932, - "downloadSeconds": 0.061787794 + "connectionEstablishedSeconds": 0.062846489, + "uploadSeconds": 0.000001952, + "downloadSeconds": 0.0610489 }, { - "connectionEstablishedSeconds": 0.065857536, - "uploadSeconds": 0.000001792, - "downloadSeconds": 0.063014235 + "connectionEstablishedSeconds": 0.063905027, + "uploadSeconds": 0.000001906, + "downloadSeconds": 0.062143314 }, { - "connectionEstablishedSeconds": 0.06297993, - "uploadSeconds": 0.000001822, - "downloadSeconds": 0.061267943 + "connectionEstablishedSeconds": 0.062881868, + "uploadSeconds": 0.000001966, + "downloadSeconds": 0.061308403 }, { - "connectionEstablishedSeconds": 0.062498822, - "uploadSeconds": 0.000001732, - "downloadSeconds": 0.060820382 + "connectionEstablishedSeconds": 0.064227255, + "uploadSeconds": 0.000001957, + "downloadSeconds": 0.06239708 }, { - "connectionEstablishedSeconds": 0.061334544, - "uploadSeconds": 7.68e-7, - "downloadSeconds": 0.059707498 + "connectionEstablishedSeconds": 0.064044998, + "uploadSeconds": 0.000001985, + "downloadSeconds": 0.062253102 }, { - "connectionEstablishedSeconds": 0.064359557, - "uploadSeconds": 0.000001835, - "downloadSeconds": 0.062715661 + "connectionEstablishedSeconds": 0.062412245, + "uploadSeconds": 0.000002063, + "downloadSeconds": 0.060736469 }, { - "connectionEstablishedSeconds": 0.06350886, - "uploadSeconds": 0.000001824, - "downloadSeconds": 0.061819536 + "connectionEstablishedSeconds": 0.063499965, + "uploadSeconds": 0.000001956, + "downloadSeconds": 0.061751684 }, { - "connectionEstablishedSeconds": 0.062510941, - "uploadSeconds": 0.000001847, - "downloadSeconds": 0.060904902 + "connectionEstablishedSeconds": 0.063699321, + "uploadSeconds": 0.000001905, + "downloadSeconds": 0.061931416 }, { - "connectionEstablishedSeconds": 0.064446726, - "uploadSeconds": 0.000001919, - "downloadSeconds": 0.062786546 + "connectionEstablishedSeconds": 0.066367568, + "uploadSeconds": 0.000001943, + "downloadSeconds": 0.064741811 }, { - "connectionEstablishedSeconds": 0.06534114, - "uploadSeconds": 0.000001824, - "downloadSeconds": 0.063730181 + "connectionEstablishedSeconds": 0.066423741, + "uploadSeconds": 8.75e-7, + "downloadSeconds": 0.064588142 }, { - "connectionEstablishedSeconds": 0.064263223, - "uploadSeconds": 7.33e-7, - "downloadSeconds": 0.062664078 + "connectionEstablishedSeconds": 0.063184712, + "uploadSeconds": 0.000001091, + "downloadSeconds": 0.061426575 }, { - "connectionEstablishedSeconds": 0.064327565, - "uploadSeconds": 0.000001789, - "downloadSeconds": 0.062762381 + "connectionEstablishedSeconds": 0.062697375, + "uploadSeconds": 0.000002063, + "downloadSeconds": 0.061594337 }, { - "connectionEstablishedSeconds": 0.064470892, - "uploadSeconds": 0.000001838, - "downloadSeconds": 0.062872479 + "connectionEstablishedSeconds": 0.065604173, + "uploadSeconds": 0.000001958, + "downloadSeconds": 0.063896418 }, { - "connectionEstablishedSeconds": 0.063361378, - "uploadSeconds": 7.26e-7, - "downloadSeconds": 0.061756714 + "connectionEstablishedSeconds": 0.063786339, + "uploadSeconds": 0.000001924, + "downloadSeconds": 0.061962591 }, { - "connectionEstablishedSeconds": 0.066150732, - "uploadSeconds": 0.000001773, - "downloadSeconds": 0.064832635 + "connectionEstablishedSeconds": 0.064901403, + "uploadSeconds": 8.44e-7, + "downloadSeconds": 0.063061015 }, { - "connectionEstablishedSeconds": 0.06447775, - "uploadSeconds": 0.000001747, - "downloadSeconds": 0.06280719 + "connectionEstablishedSeconds": 0.066902795, + "uploadSeconds": 0.000002142, + "downloadSeconds": 0.065148918 }, { - "connectionEstablishedSeconds": 0.06250265, - "uploadSeconds": 0.00000172, - "downloadSeconds": 0.061143724 + "connectionEstablishedSeconds": 0.06681438, + "uploadSeconds": 9.44e-7, + "downloadSeconds": 0.06453611 }, { - "connectionEstablishedSeconds": 0.065227921, - "uploadSeconds": 7.5e-7, - "downloadSeconds": 0.063628605 + "connectionEstablishedSeconds": 0.06516872, + "uploadSeconds": 0.000001025, + "downloadSeconds": 0.063345599 }, { - "connectionEstablishedSeconds": 0.063523292, - "uploadSeconds": 7.94e-7, - "downloadSeconds": 0.06180878 + "connectionEstablishedSeconds": 0.065608415, + "uploadSeconds": 8.83e-7, + "downloadSeconds": 0.063954477 }, { - "connectionEstablishedSeconds": 0.063022435, - "uploadSeconds": 0.000001936, - "downloadSeconds": 0.061456683 + "connectionEstablishedSeconds": 0.063050374, + "uploadSeconds": 0.0000019, + "downloadSeconds": 0.061264983 }, { - "connectionEstablishedSeconds": 0.065339679, - "uploadSeconds": 0.000001714, - "downloadSeconds": 0.063600025 + "connectionEstablishedSeconds": 0.06506769, + "uploadSeconds": 0.000001938, + "downloadSeconds": 0.06324869 }, { - "connectionEstablishedSeconds": 0.064131359, - "uploadSeconds": 0.000001939, - "downloadSeconds": 0.062487512 + "connectionEstablishedSeconds": 0.063733822, + "uploadSeconds": 8.25e-7, + "downloadSeconds": 0.06194249 }, { - "connectionEstablishedSeconds": 0.063201195, - "uploadSeconds": 0.000001884, - "downloadSeconds": 0.061657171 + "connectionEstablishedSeconds": 0.06545029, + "uploadSeconds": 0.00000198, + "downloadSeconds": 0.063731531 }, { - "connectionEstablishedSeconds": 0.064213476, - "uploadSeconds": 7.83e-7, - "downloadSeconds": 0.062466066 + "connectionEstablishedSeconds": 0.063806752, + "uploadSeconds": 0.000001977, + "downloadSeconds": 0.062047961 }, { - "connectionEstablishedSeconds": 0.065218015, - "uploadSeconds": 0.00000199, - "downloadSeconds": 0.063658817 + "connectionEstablishedSeconds": 0.065782118, + "uploadSeconds": 7.98e-7, + "downloadSeconds": 0.063986379 }, { - "connectionEstablishedSeconds": 0.065181891, - "uploadSeconds": 7.47e-7, - "downloadSeconds": 0.063628663 + "connectionEstablishedSeconds": 0.065587017, + "uploadSeconds": 0.000001947, + "downloadSeconds": 0.063807411 }, { - "connectionEstablishedSeconds": 0.063481231, - "uploadSeconds": 0.000001929, - "downloadSeconds": 0.061841342 + "connectionEstablishedSeconds": 0.064806976, + "uploadSeconds": 0.000001822, + "downloadSeconds": 0.063000614 }, { - "connectionEstablishedSeconds": 0.065292605, - "uploadSeconds": 8.42e-7, - "downloadSeconds": 0.063629366 + "connectionEstablishedSeconds": 0.063191426, + "uploadSeconds": 8.52e-7, + "downloadSeconds": 0.061417895 }, { - "connectionEstablishedSeconds": 0.065067578, - "uploadSeconds": 8.17e-7, - "downloadSeconds": 0.06344993 + "connectionEstablishedSeconds": 0.066138367, + "uploadSeconds": 0.000001897, + "downloadSeconds": 0.064314152 }, { - "connectionEstablishedSeconds": 0.066225496, - "uploadSeconds": 0.000001903, - "downloadSeconds": 0.065134795 + "connectionEstablishedSeconds": 0.06372295, + "uploadSeconds": 0.000001952, + "downloadSeconds": 0.061796685 }, { - "connectionEstablishedSeconds": 0.063477891, - "uploadSeconds": 0.000001795, - "downloadSeconds": 0.061751113 + "connectionEstablishedSeconds": 0.064172483, + "uploadSeconds": 0.00000199, + "downloadSeconds": 0.062531066 }, { - "connectionEstablishedSeconds": 0.063098328, - "uploadSeconds": 0.000001874, - "downloadSeconds": 0.061404151 + "connectionEstablishedSeconds": 0.069595187, + "uploadSeconds": 8.8e-7, + "downloadSeconds": 0.0677336 }, { - "connectionEstablishedSeconds": 0.063335351, - "uploadSeconds": 0.000001858, - "downloadSeconds": 0.061006764 + "connectionEstablishedSeconds": 0.065298142, + "uploadSeconds": 0.000002023, + "downloadSeconds": 0.063484516 } ], "implementation": "quic-go", @@ -982,504 +982,504 @@ { "result": [ { - "connectionEstablishedSeconds": 0.117914044, - "uploadSeconds": 0.058831947, - "downloadSeconds": 0.058634499 + "connectionEstablishedSeconds": 0.128782283, + "uploadSeconds": 0.064142782, + "downloadSeconds": 0.064041615 }, { - "connectionEstablishedSeconds": 0.129337927, - "uploadSeconds": 0.064389365, - "downloadSeconds": 0.064372711 + "connectionEstablishedSeconds": 0.122877358, + "uploadSeconds": 0.061015723, + "downloadSeconds": 0.061037874 }, { - "connectionEstablishedSeconds": 0.125696382, - "uploadSeconds": 0.062542887, - "downloadSeconds": 0.062533586 + "connectionEstablishedSeconds": 0.126806208, + "uploadSeconds": 0.063001184, + "downloadSeconds": 0.06303076 }, { - "connectionEstablishedSeconds": 0.124048621, - "uploadSeconds": 0.061677151, - "downloadSeconds": 0.061683356 + "connectionEstablishedSeconds": 0.127298349, + "uploadSeconds": 0.063292919, + "downloadSeconds": 0.063327184 }, { - "connectionEstablishedSeconds": 0.117808239, - "uploadSeconds": 0.058590961, - "downloadSeconds": 0.058557948 + "connectionEstablishedSeconds": 0.124117775, + "uploadSeconds": 0.061674621, + "downloadSeconds": 0.061733501 }, { - "connectionEstablishedSeconds": 0.12408088, - "uploadSeconds": 0.061696494, - "downloadSeconds": 0.06166079 + "connectionEstablishedSeconds": 0.11815247, + "uploadSeconds": 0.058715189, + "downloadSeconds": 0.058717916 }, { - "connectionEstablishedSeconds": 0.129338661, - "uploadSeconds": 0.064219525, - "downloadSeconds": 0.064320672 + "connectionEstablishedSeconds": 0.130421381, + "uploadSeconds": 0.064805873, + "downloadSeconds": 0.064916393 }, { - "connectionEstablishedSeconds": 0.127655755, - "uploadSeconds": 0.0634499, - "downloadSeconds": 0.063481699 + "connectionEstablishedSeconds": 0.120928897, + "uploadSeconds": 0.060078751, + "downloadSeconds": 0.060161814 }, { - "connectionEstablishedSeconds": 0.121684902, - "uploadSeconds": 0.060526993, - "downloadSeconds": 0.060505728 + "connectionEstablishedSeconds": 0.1208453, + "uploadSeconds": 0.059910829, + "downloadSeconds": 0.059957343 }, { - "connectionEstablishedSeconds": 0.125826736, - "uploadSeconds": 0.062548907, - "downloadSeconds": 0.062558083 + "connectionEstablishedSeconds": 0.129701024, + "uploadSeconds": 0.064453217, + "downloadSeconds": 0.064540534 }, { - "connectionEstablishedSeconds": 0.120273554, - "uploadSeconds": 0.059748907, - "downloadSeconds": 0.059815825 + "connectionEstablishedSeconds": 0.122099613, + "uploadSeconds": 0.060642482, + "downloadSeconds": 0.060735635 }, { - "connectionEstablishedSeconds": 0.123783327, - "uploadSeconds": 0.061577028, - "downloadSeconds": 0.061530348 + "connectionEstablishedSeconds": 0.125861895, + "uploadSeconds": 0.062546269, + "downloadSeconds": 0.062614625 }, { - "connectionEstablishedSeconds": 0.12823648, - "uploadSeconds": 0.063625064, - "downloadSeconds": 0.063628597 + "connectionEstablishedSeconds": 0.121033173, + "uploadSeconds": 0.060119234, + "downloadSeconds": 0.060325896 }, { - "connectionEstablishedSeconds": 0.127943393, - "uploadSeconds": 0.06363687, - "downloadSeconds": 0.063633453 + "connectionEstablishedSeconds": 0.12897512, + "uploadSeconds": 0.064099577, + "downloadSeconds": 0.064192461 }, { - "connectionEstablishedSeconds": 0.129126934, - "uploadSeconds": 0.064186643, - "downloadSeconds": 0.064207098 + "connectionEstablishedSeconds": 0.12537412, + "uploadSeconds": 0.062271465, + "downloadSeconds": 0.062348898 }, { - "connectionEstablishedSeconds": 0.124049686, - "uploadSeconds": 0.061660371, - "downloadSeconds": 0.061655487 + "connectionEstablishedSeconds": 0.122704549, + "uploadSeconds": 0.060939701, + "downloadSeconds": 0.061026676 }, { - "connectionEstablishedSeconds": 0.125947797, - "uploadSeconds": 0.062696859, - "downloadSeconds": 0.062614258 + "connectionEstablishedSeconds": 0.121299417, + "uploadSeconds": 0.060644079, + "downloadSeconds": 0.060340429 }, { - "connectionEstablishedSeconds": 0.127234183, - "uploadSeconds": 0.063298498, - "downloadSeconds": 0.063245735 + "connectionEstablishedSeconds": 0.129463275, + "uploadSeconds": 0.064330819, + "downloadSeconds": 0.064387025 }, { - "connectionEstablishedSeconds": 0.117473215, - "uploadSeconds": 0.058362871, - "downloadSeconds": 0.058360234 + "connectionEstablishedSeconds": 0.118009564, + "uploadSeconds": 0.058634205, + "downloadSeconds": 0.058707631 }, { - "connectionEstablishedSeconds": 0.129129754, - "uploadSeconds": 0.064221842, - "downloadSeconds": 0.064205492 + "connectionEstablishedSeconds": 0.126005819, + "uploadSeconds": 0.06262453, + "downloadSeconds": 0.062693139 }, { - "connectionEstablishedSeconds": 0.125749097, - "uploadSeconds": 0.062507549, - "downloadSeconds": 0.062529001 + "connectionEstablishedSeconds": 0.123951592, + "uploadSeconds": 0.061564866, + "downloadSeconds": 0.061667522 }, { - "connectionEstablishedSeconds": 0.123629932, - "uploadSeconds": 0.061459391, - "downloadSeconds": 0.061461951 + "connectionEstablishedSeconds": 0.130207645, + "uploadSeconds": 0.064686677, + "downloadSeconds": 0.064783184 }, { - "connectionEstablishedSeconds": 0.128896555, - "uploadSeconds": 0.064091373, - "downloadSeconds": 0.064096147 + "connectionEstablishedSeconds": 0.122590137, + "uploadSeconds": 0.060902271, + "downloadSeconds": 0.060967625 }, { - "connectionEstablishedSeconds": 0.121794929, - "uploadSeconds": 0.060553527, - "downloadSeconds": 0.060572893 + "connectionEstablishedSeconds": 0.121903049, + "uploadSeconds": 0.060545381, + "downloadSeconds": 0.060599883 }, { - "connectionEstablishedSeconds": 0.117345028, - "uploadSeconds": 0.058269004, - "downloadSeconds": 0.058326628 + "connectionEstablishedSeconds": 0.127654451, + "uploadSeconds": 0.063419366, + "downloadSeconds": 0.063509647 }, { - "connectionEstablishedSeconds": 0.126094789, - "uploadSeconds": 0.06266925, - "downloadSeconds": 0.062677163 + "connectionEstablishedSeconds": 0.123890299, + "uploadSeconds": 0.061515197, + "downloadSeconds": 0.061600551 }, { - "connectionEstablishedSeconds": 0.125756326, - "uploadSeconds": 0.062499303, - "downloadSeconds": 0.062541549 + "connectionEstablishedSeconds": 0.127159301, + "uploadSeconds": 0.063216999, + "downloadSeconds": 0.063270615 }, { - "connectionEstablishedSeconds": 0.125292515, - "uploadSeconds": 0.062245107, - "downloadSeconds": 0.062286821 + "connectionEstablishedSeconds": 0.11853953, + "uploadSeconds": 0.058840163, + "downloadSeconds": 0.058910879 }, { - "connectionEstablishedSeconds": 0.126254646, - "uploadSeconds": 0.062751342, - "downloadSeconds": 0.062759833 + "connectionEstablishedSeconds": 0.125482649, + "uploadSeconds": 0.062332114, + "downloadSeconds": 0.062400346 }, { - "connectionEstablishedSeconds": 0.121698597, - "uploadSeconds": 0.060474917, - "downloadSeconds": 0.060473682 + "connectionEstablishedSeconds": 0.122352409, + "uploadSeconds": 0.060781148, + "downloadSeconds": 0.060850876 }, { - "connectionEstablishedSeconds": 0.11982186, - "uploadSeconds": 0.059530054, - "downloadSeconds": 0.059532278 + "connectionEstablishedSeconds": 0.127330874, + "uploadSeconds": 0.063281691, + "downloadSeconds": 0.063333099 }, { - "connectionEstablishedSeconds": 0.125813863, - "uploadSeconds": 0.062563828, - "downloadSeconds": 0.062562123 + "connectionEstablishedSeconds": 0.125958156, + "uploadSeconds": 0.062593238, + "downloadSeconds": 0.062644244 }, { - "connectionEstablishedSeconds": 0.120111482, - "uploadSeconds": 0.059683619, - "downloadSeconds": 0.06032216 + "connectionEstablishedSeconds": 0.126108225, + "uploadSeconds": 0.062657803, + "downloadSeconds": 0.062761149 }, { - "connectionEstablishedSeconds": 0.123824867, - "uploadSeconds": 0.061500033, - "downloadSeconds": 0.061574041 + "connectionEstablishedSeconds": 0.120901849, + "uploadSeconds": 0.06002898, + "downloadSeconds": 0.060096329 }, { - "connectionEstablishedSeconds": 0.11978968, - "uploadSeconds": 0.059542049, - "downloadSeconds": 0.059545694 + "connectionEstablishedSeconds": 0.130562683, + "uploadSeconds": 0.064496581, + "downloadSeconds": 0.064553639 }, { - "connectionEstablishedSeconds": 0.125650186, - "uploadSeconds": 0.062460174, - "downloadSeconds": 0.062536015 + "connectionEstablishedSeconds": 0.126918076, + "uploadSeconds": 0.063321541, + "downloadSeconds": 0.063453397 }, { - "connectionEstablishedSeconds": 0.119980873, - "uploadSeconds": 0.059646191, - "downloadSeconds": 0.059623655 + "connectionEstablishedSeconds": 0.12198058, + "uploadSeconds": 0.06060065, + "downloadSeconds": 0.060660093 }, { - "connectionEstablishedSeconds": 0.122278741, - "uploadSeconds": 0.061289687, - "downloadSeconds": 0.060741838 + "connectionEstablishedSeconds": 0.1259285, + "uploadSeconds": 0.062543989, + "downloadSeconds": 0.062632145 }, { - "connectionEstablishedSeconds": 0.127994603, - "uploadSeconds": 0.063612181, - "downloadSeconds": 0.063647272 + "connectionEstablishedSeconds": 0.12017305, + "uploadSeconds": 0.059617034, + "downloadSeconds": 0.059714616 }, { - "connectionEstablishedSeconds": 0.125683139, - "uploadSeconds": 0.062511818, - "downloadSeconds": 0.062504393 + "connectionEstablishedSeconds": 0.120856119, + "uploadSeconds": 0.0600165, + "downloadSeconds": 0.060091443 }, { - "connectionEstablishedSeconds": 0.123121098, - "uploadSeconds": 0.061189226, - "downloadSeconds": 0.061209897 + "connectionEstablishedSeconds": 0.126045508, + "uploadSeconds": 0.06261744, + "downloadSeconds": 0.062673731 }, { - "connectionEstablishedSeconds": 0.117695346, - "uploadSeconds": 0.058538495, - "downloadSeconds": 0.058503865 + "connectionEstablishedSeconds": 0.124257681, + "uploadSeconds": 0.061677647, + "downloadSeconds": 0.061778575 }, { - "connectionEstablishedSeconds": 0.125690572, - "uploadSeconds": 0.062623286, - "downloadSeconds": 0.062535532 + "connectionEstablishedSeconds": 0.125857894, + "uploadSeconds": 0.062652721, + "downloadSeconds": 0.062597471 }, { - "connectionEstablishedSeconds": 0.123343502, - "uploadSeconds": 0.061285483, - "downloadSeconds": 0.061321409 + "connectionEstablishedSeconds": 0.122715896, + "uploadSeconds": 0.060923454, + "downloadSeconds": 0.06102335 }, { - "connectionEstablishedSeconds": 0.12584052, - "uploadSeconds": 0.062549027, - "downloadSeconds": 0.062568991 + "connectionEstablishedSeconds": 0.126295478, + "uploadSeconds": 0.062703852, + "downloadSeconds": 0.062786489 }, { - "connectionEstablishedSeconds": 0.129174715, - "uploadSeconds": 0.064223462, - "downloadSeconds": 0.064223164 + "connectionEstablishedSeconds": 0.130609852, + "uploadSeconds": 0.0648943, + "downloadSeconds": 0.064971453 }, { - "connectionEstablishedSeconds": 0.125759665, - "uploadSeconds": 0.062487151, - "downloadSeconds": 0.062785986 + "connectionEstablishedSeconds": 0.124722058, + "uploadSeconds": 0.061948955, + "downloadSeconds": 0.062011269 }, { - "connectionEstablishedSeconds": 0.121995084, - "uploadSeconds": 0.060662899, - "downloadSeconds": 0.06066677 + "connectionEstablishedSeconds": 0.128852791, + "uploadSeconds": 0.064004153, + "downloadSeconds": 0.064074731 }, { - "connectionEstablishedSeconds": 0.119592911, - "uploadSeconds": 0.059453386, - "downloadSeconds": 0.05945651 + "connectionEstablishedSeconds": 0.129624863, + "uploadSeconds": 0.064394522, + "downloadSeconds": 0.064471689 }, { - "connectionEstablishedSeconds": 0.124013011, - "uploadSeconds": 0.061656102, - "downloadSeconds": 0.061668502 + "connectionEstablishedSeconds": 0.129167269, + "uploadSeconds": 0.064227411, + "downloadSeconds": 0.064319623 }, { - "connectionEstablishedSeconds": 0.127730207, - "uploadSeconds": 0.0636424, - "downloadSeconds": 0.063506917 + "connectionEstablishedSeconds": 0.124525167, + "uploadSeconds": 0.061863103, + "downloadSeconds": 0.061928295 }, { - "connectionEstablishedSeconds": 0.127385172, - "uploadSeconds": 0.06336053, - "downloadSeconds": 0.063353217 + "connectionEstablishedSeconds": 0.127854544, + "uploadSeconds": 0.063500323, + "downloadSeconds": 0.063627182 }, { - "connectionEstablishedSeconds": 0.117910963, - "uploadSeconds": 0.058578741, - "downloadSeconds": 0.058599423 + "connectionEstablishedSeconds": 0.118824595, + "uploadSeconds": 0.059012971, + "downloadSeconds": 0.059077709 }, { - "connectionEstablishedSeconds": 0.125323926, - "uploadSeconds": 0.06228637, - "downloadSeconds": 0.062309412 + "connectionEstablishedSeconds": 0.12448396, + "uploadSeconds": 0.061848909, + "downloadSeconds": 0.061928463 }, { - "connectionEstablishedSeconds": 0.128867058, - "uploadSeconds": 0.064073392, - "downloadSeconds": 0.064072262 + "connectionEstablishedSeconds": 0.125085891, + "uploadSeconds": 0.062138362, + "downloadSeconds": 0.062185374 }, { - "connectionEstablishedSeconds": 0.119875016, - "uploadSeconds": 0.059568332, - "downloadSeconds": 0.059664564 + "connectionEstablishedSeconds": 0.120385765, + "uploadSeconds": 0.059740462, + "downloadSeconds": 0.059817489 }, { - "connectionEstablishedSeconds": 0.119881674, - "uploadSeconds": 0.059570937, - "downloadSeconds": 0.059595551 + "connectionEstablishedSeconds": 0.126787493, + "uploadSeconds": 0.063007284, + "downloadSeconds": 0.063050622 }, { - "connectionEstablishedSeconds": 0.125756087, - "uploadSeconds": 0.062518549, - "downloadSeconds": 0.062555156 + "connectionEstablishedSeconds": 0.127343774, + "uploadSeconds": 0.0632535, + "downloadSeconds": 0.06330645 }, { - "connectionEstablishedSeconds": 0.121874647, - "uploadSeconds": 0.060643272, - "downloadSeconds": 0.060594429 + "connectionEstablishedSeconds": 0.129443303, + "uploadSeconds": 0.064301956, + "downloadSeconds": 0.064416941 }, { - "connectionEstablishedSeconds": 0.117574655, - "uploadSeconds": 0.058395013, - "downloadSeconds": 0.058438876 + "connectionEstablishedSeconds": 0.12880829, + "uploadSeconds": 0.063989307, + "downloadSeconds": 0.064044952 }, { - "connectionEstablishedSeconds": 0.123858673, - "uploadSeconds": 0.061544576, - "downloadSeconds": 0.061577997 + "connectionEstablishedSeconds": 0.125715137, + "uploadSeconds": 0.062466058, + "downloadSeconds": 0.062509002 }, { - "connectionEstablishedSeconds": 0.126205491, - "uploadSeconds": 0.062736613, - "downloadSeconds": 0.062740617 + "connectionEstablishedSeconds": 0.130802753, + "uploadSeconds": 0.06499956, + "downloadSeconds": 0.065050477 }, { - "connectionEstablishedSeconds": 0.127645728, - "uploadSeconds": 0.06355015, - "downloadSeconds": 0.063499064 + "connectionEstablishedSeconds": 0.127359533, + "uploadSeconds": 0.06326897, + "downloadSeconds": 0.063325505 }, { - "connectionEstablishedSeconds": 0.129394022, - "uploadSeconds": 0.064355196, - "downloadSeconds": 0.064345099 + "connectionEstablishedSeconds": 0.125144649, + "uploadSeconds": 0.06215178, + "downloadSeconds": 0.062216615 }, { - "connectionEstablishedSeconds": 0.119937264, - "uploadSeconds": 0.059618541, - "downloadSeconds": 0.059598387 + "connectionEstablishedSeconds": 0.128044962, + "uploadSeconds": 0.063625884, + "downloadSeconds": 0.063674575 }, { - "connectionEstablishedSeconds": 0.125866724, - "uploadSeconds": 0.062468107, - "downloadSeconds": 0.062622304 + "connectionEstablishedSeconds": 0.12984098, + "uploadSeconds": 0.064508148, + "downloadSeconds": 0.064584498 }, { - "connectionEstablishedSeconds": 0.124072403, - "uploadSeconds": 0.061805038, - "downloadSeconds": 0.061704243 + "connectionEstablishedSeconds": 0.127962304, + "uploadSeconds": 0.063610496, + "downloadSeconds": 0.063675836 }, { - "connectionEstablishedSeconds": 0.121683587, - "uploadSeconds": 0.060503896, - "downloadSeconds": 0.060498856 + "connectionEstablishedSeconds": 0.120000642, + "uploadSeconds": 0.059590507, + "downloadSeconds": 0.059647934 }, { - "connectionEstablishedSeconds": 0.123535893, - "uploadSeconds": 0.061414856, - "downloadSeconds": 0.061420664 + "connectionEstablishedSeconds": 0.125749348, + "uploadSeconds": 0.062478223, + "downloadSeconds": 0.062530638 }, { - "connectionEstablishedSeconds": 0.125660217, - "uploadSeconds": 0.062456398, - "downloadSeconds": 0.062500046 + "connectionEstablishedSeconds": 0.127441701, + "uploadSeconds": 0.063300783, + "downloadSeconds": 0.063393374 }, { - "connectionEstablishedSeconds": 0.125879987, - "uploadSeconds": 0.062585134, - "downloadSeconds": 0.062589782 + "connectionEstablishedSeconds": 0.123424165, + "uploadSeconds": 0.061305335, + "downloadSeconds": 0.06136762 }, { - "connectionEstablishedSeconds": 0.121671723, - "uploadSeconds": 0.060445685, - "downloadSeconds": 0.060496337 + "connectionEstablishedSeconds": 0.12304951, + "uploadSeconds": 0.061146982, + "downloadSeconds": 0.06118203 }, { - "connectionEstablishedSeconds": 0.119761444, - "uploadSeconds": 0.059606107, - "downloadSeconds": 0.05954471 + "connectionEstablishedSeconds": 0.125308047, + "uploadSeconds": 0.062224494, + "downloadSeconds": 0.062323807 }, { - "connectionEstablishedSeconds": 0.125858804, - "uploadSeconds": 0.06260909, - "downloadSeconds": 0.062594449 + "connectionEstablishedSeconds": 0.12973905, + "uploadSeconds": 0.064472966, + "downloadSeconds": 0.064529546 }, { - "connectionEstablishedSeconds": 0.122005433, - "uploadSeconds": 0.060636631, - "downloadSeconds": 0.060717436 + "connectionEstablishedSeconds": 0.128102656, + "uploadSeconds": 0.063863468, + "downloadSeconds": 0.063635207 }, { - "connectionEstablishedSeconds": 0.125761947, - "uploadSeconds": 0.062493943, - "downloadSeconds": 0.062492834 + "connectionEstablishedSeconds": 0.125637036, + "uploadSeconds": 0.062420345, + "downloadSeconds": 0.062469283 }, { - "connectionEstablishedSeconds": 0.127381931, - "uploadSeconds": 0.063311625, - "downloadSeconds": 0.063408387 + "connectionEstablishedSeconds": 0.118981084, + "uploadSeconds": 0.059069735, + "downloadSeconds": 0.059129922 }, { - "connectionEstablishedSeconds": 0.125102921, - "uploadSeconds": 0.06222272, - "downloadSeconds": 0.062226545 + "connectionEstablishedSeconds": 0.120720618, + "uploadSeconds": 0.059951333, + "downloadSeconds": 0.060029474 }, { - "connectionEstablishedSeconds": 0.121948047, - "uploadSeconds": 0.060612304, - "downloadSeconds": 0.060640765 + "connectionEstablishedSeconds": 0.123367197, + "uploadSeconds": 0.061363585, + "downloadSeconds": 0.061318307 }, { - "connectionEstablishedSeconds": 0.121462681, - "uploadSeconds": 0.06037682, - "downloadSeconds": 0.060403032 + "connectionEstablishedSeconds": 0.125229133, + "uploadSeconds": 0.062206788, + "downloadSeconds": 0.062294396 }, { - "connectionEstablishedSeconds": 0.125803979, - "uploadSeconds": 0.062537056, - "downloadSeconds": 0.062518618 + "connectionEstablishedSeconds": 0.12312703, + "uploadSeconds": 0.061167752, + "downloadSeconds": 0.061232767 }, { - "connectionEstablishedSeconds": 0.128018538, - "uploadSeconds": 0.063625105, - "downloadSeconds": 0.063684661 + "connectionEstablishedSeconds": 0.125516511, + "uploadSeconds": 0.062366896, + "downloadSeconds": 0.062436136 }, { - "connectionEstablishedSeconds": 0.121811759, - "uploadSeconds": 0.060507406, - "downloadSeconds": 0.060541407 + "connectionEstablishedSeconds": 0.126220729, + "uploadSeconds": 0.062574059, + "downloadSeconds": 0.062642618 }, { - "connectionEstablishedSeconds": 0.125563337, - "uploadSeconds": 0.062420673, - "downloadSeconds": 0.062440885 + "connectionEstablishedSeconds": 0.125496394, + "uploadSeconds": 0.0623366, + "downloadSeconds": 0.062402276 }, { - "connectionEstablishedSeconds": 0.122135716, - "uploadSeconds": 0.060683884, - "downloadSeconds": 0.060688028 + "connectionEstablishedSeconds": 0.123646613, + "uploadSeconds": 0.061393611, + "downloadSeconds": 0.061439843 }, { - "connectionEstablishedSeconds": 0.12571618, - "uploadSeconds": 0.062747876, - "downloadSeconds": 0.062491653 + "connectionEstablishedSeconds": 0.128086877, + "uploadSeconds": 0.063653077, + "downloadSeconds": 0.063718554 }, { - "connectionEstablishedSeconds": 0.122022057, - "uploadSeconds": 0.060627045, - "downloadSeconds": 0.060649261 + "connectionEstablishedSeconds": 0.129262803, + "uploadSeconds": 0.064253408, + "downloadSeconds": 0.064303179 }, { - "connectionEstablishedSeconds": 0.127548676, - "uploadSeconds": 0.06336601, - "downloadSeconds": 0.063406245 + "connectionEstablishedSeconds": 0.127148072, + "uploadSeconds": 0.063193085, + "downloadSeconds": 0.063277279 }, { - "connectionEstablishedSeconds": 0.129237903, - "uploadSeconds": 0.064220412, - "downloadSeconds": 0.064248594 + "connectionEstablishedSeconds": 0.128584395, + "uploadSeconds": 0.063907041, + "downloadSeconds": 0.06396357 }, { - "connectionEstablishedSeconds": 0.121809873, - "uploadSeconds": 0.060565836, - "downloadSeconds": 0.060610217 + "connectionEstablishedSeconds": 0.124292227, + "uploadSeconds": 0.061732539, + "downloadSeconds": 0.061779283 }, { - "connectionEstablishedSeconds": 0.122083072, - "uploadSeconds": 0.060692784, - "downloadSeconds": 0.060709873 + "connectionEstablishedSeconds": 0.125535576, + "uploadSeconds": 0.062369058, + "downloadSeconds": 0.062449164 }, { - "connectionEstablishedSeconds": 0.126097347, - "uploadSeconds": 0.062687736, - "downloadSeconds": 0.06268969 + "connectionEstablishedSeconds": 0.130730147, + "uploadSeconds": 0.064963572, + "downloadSeconds": 0.065039169 }, { - "connectionEstablishedSeconds": 0.125690233, - "uploadSeconds": 0.062476793, - "downloadSeconds": 0.062519338 + "connectionEstablishedSeconds": 0.123208736, + "uploadSeconds": 0.061167329, + "downloadSeconds": 0.061260565 }, { - "connectionEstablishedSeconds": 0.122036672, - "uploadSeconds": 0.060649477, - "downloadSeconds": 0.060666975 + "connectionEstablishedSeconds": 0.127480441, + "uploadSeconds": 0.063313736, + "downloadSeconds": 0.063365761 }, { - "connectionEstablishedSeconds": 0.123676938, - "uploadSeconds": 0.061491798, - "downloadSeconds": 0.06148428 + "connectionEstablishedSeconds": 0.124865335, + "uploadSeconds": 0.062069213, + "downloadSeconds": 0.062112659 }, { - "connectionEstablishedSeconds": 0.127699422, - "uploadSeconds": 0.063437505, - "downloadSeconds": 0.063449133 + "connectionEstablishedSeconds": 0.127346962, + "uploadSeconds": 0.063268241, + "downloadSeconds": 0.063310113 }, { - "connectionEstablishedSeconds": 0.123279523, - "uploadSeconds": 0.061226117, - "downloadSeconds": 0.061252672 + "connectionEstablishedSeconds": 0.130435342, + "uploadSeconds": 0.064819538, + "downloadSeconds": 0.064874989 }, { - "connectionEstablishedSeconds": 0.125515053, - "uploadSeconds": 0.06240927, - "downloadSeconds": 0.06241746 + "connectionEstablishedSeconds": 0.122051259, + "uploadSeconds": 0.060598517, + "downloadSeconds": 0.060682717 }, { - "connectionEstablishedSeconds": 0.127866164, - "uploadSeconds": 0.063533392, - "downloadSeconds": 0.063580884 + "connectionEstablishedSeconds": 0.126631048, + "uploadSeconds": 0.062935626, + "downloadSeconds": 0.062977163 }, { - "connectionEstablishedSeconds": 0.127493511, - "uploadSeconds": 0.063432903, - "downloadSeconds": 0.063401208 + "connectionEstablishedSeconds": 0.125074157, + "uploadSeconds": 0.062137365, + "downloadSeconds": 0.06219817 } ], "implementation": "rust-libp2p", @@ -1489,504 +1489,504 @@ { "result": [ { - "connectionEstablishedSeconds": 0.062600093, - "uploadSeconds": 0.121759564, - "downloadSeconds": 0.000096668 + "connectionEstablishedSeconds": 0.065269712, + "uploadSeconds": 0.126687384, + "downloadSeconds": 0.000095155 }, { - "connectionEstablishedSeconds": 0.065168016, - "uploadSeconds": 0.126908502, - "downloadSeconds": 0.000074853 + "connectionEstablishedSeconds": 0.061772457, + "uploadSeconds": 0.119781377, + "downloadSeconds": 0.000088763 }, { - "connectionEstablishedSeconds": 0.060402683, - "uploadSeconds": 0.117514313, - "downloadSeconds": 0.000073054 + "connectionEstablishedSeconds": 0.063039581, + "uploadSeconds": 0.122439261, + "downloadSeconds": 0.000063515 }, { - "connectionEstablishedSeconds": 0.066024655, - "uploadSeconds": 0.128822696, - "downloadSeconds": 0.000081864 + "connectionEstablishedSeconds": 0.065332846, + "uploadSeconds": 0.126995051, + "downloadSeconds": 0.000086659 }, { - "connectionEstablishedSeconds": 0.066298735, - "uploadSeconds": 0.129484089, - "downloadSeconds": 0.000076365 + "connectionEstablishedSeconds": 0.064835466, + "uploadSeconds": 0.126084756, + "downloadSeconds": 0.000102772 }, { - "connectionEstablishedSeconds": 0.064258817, - "uploadSeconds": 0.125199207, - "downloadSeconds": 0.000055862 + "connectionEstablishedSeconds": 0.064252537, + "uploadSeconds": 0.125076452, + "downloadSeconds": 0.00008998 }, { - "connectionEstablishedSeconds": 0.063066618, - "uploadSeconds": 0.122831382, - "downloadSeconds": 0.000088136 + "connectionEstablishedSeconds": 0.062896955, + "uploadSeconds": 0.122347549, + "downloadSeconds": 0.000088885 }, { - "connectionEstablishedSeconds": 0.062436435, - "uploadSeconds": 0.121547924, - "downloadSeconds": 0.000075148 + "connectionEstablishedSeconds": 0.062537671, + "uploadSeconds": 0.121699801, + "downloadSeconds": 0.000105042 }, { - "connectionEstablishedSeconds": 0.06235574, - "uploadSeconds": 0.121583906, - "downloadSeconds": 0.000094345 + "connectionEstablishedSeconds": 0.062560666, + "uploadSeconds": 0.121530528, + "downloadSeconds": 0.000083081 }, { - "connectionEstablishedSeconds": 0.064193613, - "uploadSeconds": 0.125233213, - "downloadSeconds": 0.000050523 + "connectionEstablishedSeconds": 0.06503231, + "uploadSeconds": 0.12662378, + "downloadSeconds": 0.000076862 }, { - "connectionEstablishedSeconds": 0.062520487, - "uploadSeconds": 0.122156692, - "downloadSeconds": 0.000075356 + "connectionEstablishedSeconds": 0.064646935, + "uploadSeconds": 0.125940369, + "downloadSeconds": 0.000048777 }, { - "connectionEstablishedSeconds": 0.064028759, - "uploadSeconds": 0.125035872, - "downloadSeconds": 0.00006718 + "connectionEstablishedSeconds": 0.066467573, + "uploadSeconds": 0.129119886, + "downloadSeconds": 0.000109769 }, { - "connectionEstablishedSeconds": 0.062642286, - "uploadSeconds": 0.121787442, - "downloadSeconds": 0.000095452 + "connectionEstablishedSeconds": 0.066872165, + "uploadSeconds": 0.130419701, + "downloadSeconds": 0.000087987 }, { - "connectionEstablishedSeconds": 0.062426485, - "uploadSeconds": 0.121683008, - "downloadSeconds": 0.000069536 + "connectionEstablishedSeconds": 0.066463517, + "uploadSeconds": 0.129347194, + "downloadSeconds": 0.000088743 }, { - "connectionEstablishedSeconds": 0.063451013, - "uploadSeconds": 0.12359071, - "downloadSeconds": 0.000110006 + "connectionEstablishedSeconds": 0.062683614, + "uploadSeconds": 0.121793655, + "downloadSeconds": 0.000101821 }, { - "connectionEstablishedSeconds": 0.065149741, - "uploadSeconds": 0.127065715, - "downloadSeconds": 0.000075859 + "connectionEstablishedSeconds": 0.064007545, + "uploadSeconds": 0.124402074, + "downloadSeconds": 0.000051133 }, { - "connectionEstablishedSeconds": 0.062387177, - "uploadSeconds": 0.121665465, - "downloadSeconds": 0.000090093 + "connectionEstablishedSeconds": 0.066345827, + "uploadSeconds": 0.129196438, + "downloadSeconds": 0.000087874 }, { - "connectionEstablishedSeconds": 0.064206419, - "uploadSeconds": 0.12507347, - "downloadSeconds": 0.000079769 + "connectionEstablishedSeconds": 0.061959997, + "uploadSeconds": 0.120403148, + "downloadSeconds": 0.000099978 }, { - "connectionEstablishedSeconds": 0.066101488, - "uploadSeconds": 0.129176106, - "downloadSeconds": 0.000102487 + "connectionEstablishedSeconds": 0.064957415, + "uploadSeconds": 0.126484389, + "downloadSeconds": 0.000086646 }, { - "connectionEstablishedSeconds": 0.064995584, - "uploadSeconds": 0.12546444, - "downloadSeconds": 0.000093765 + "connectionEstablishedSeconds": 0.064050398, + "uploadSeconds": 0.124593436, + "downloadSeconds": 0.000093129 }, { - "connectionEstablishedSeconds": 0.065281929, - "uploadSeconds": 0.127290988, - "downloadSeconds": 0.000088086 + "connectionEstablishedSeconds": 0.065479175, + "uploadSeconds": 0.127563336, + "downloadSeconds": 0.000091752 }, { - "connectionEstablishedSeconds": 0.062469029, - "uploadSeconds": 0.121998725, - "downloadSeconds": 0.000068347 + "connectionEstablishedSeconds": 0.064459311, + "uploadSeconds": 0.125632443, + "downloadSeconds": 0.000088312 }, { - "connectionEstablishedSeconds": 0.062310894, - "uploadSeconds": 0.121515205, - "downloadSeconds": 0.000045471 + "connectionEstablishedSeconds": 0.065418506, + "uploadSeconds": 0.127318706, + "downloadSeconds": 0.000099893 }, { - "connectionEstablishedSeconds": 0.064312393, - "uploadSeconds": 0.125444788, - "downloadSeconds": 0.000071243 + "connectionEstablishedSeconds": 0.06115891, + "uploadSeconds": 0.118787732, + "downloadSeconds": 0.000072519 }, { - "connectionEstablishedSeconds": 0.064964904, - "uploadSeconds": 0.126957433, - "downloadSeconds": 0.000081389 + "connectionEstablishedSeconds": 0.063789728, + "uploadSeconds": 0.124151792, + "downloadSeconds": 0.000061331 }, { - "connectionEstablishedSeconds": 0.06445174, - "uploadSeconds": 0.125624677, - "downloadSeconds": 0.000096227 + "connectionEstablishedSeconds": 0.063565335, + "uploadSeconds": 0.123800509, + "downloadSeconds": 0.000066504 }, { - "connectionEstablishedSeconds": 0.062406364, - "uploadSeconds": 0.121701083, - "downloadSeconds": 0.000072941 + "connectionEstablishedSeconds": 0.065340559, + "uploadSeconds": 0.127107457, + "downloadSeconds": 0.000082091 }, { - "connectionEstablishedSeconds": 0.064507293, - "uploadSeconds": 0.12572421, - "downloadSeconds": 0.000075676 + "connectionEstablishedSeconds": 0.065274161, + "uploadSeconds": 0.126985152, + "downloadSeconds": 0.000098832 }, { - "connectionEstablishedSeconds": 0.062245439, - "uploadSeconds": 0.121511478, - "downloadSeconds": 0.00008053 + "connectionEstablishedSeconds": 0.061532374, + "uploadSeconds": 0.119412761, + "downloadSeconds": 0.000087572 }, { - "connectionEstablishedSeconds": 0.064514181, - "uploadSeconds": 0.125914963, - "downloadSeconds": 0.000099623 + "connectionEstablishedSeconds": 0.066015107, + "uploadSeconds": 0.12895258, + "downloadSeconds": 0.000107437 }, { - "connectionEstablishedSeconds": 0.065784148, - "uploadSeconds": 0.128423248, - "downloadSeconds": 0.000086705 + "connectionEstablishedSeconds": 0.063298652, + "uploadSeconds": 0.123194972, + "downloadSeconds": 0.000074348 }, { - "connectionEstablishedSeconds": 0.063366109, - "uploadSeconds": 0.123705156, - "downloadSeconds": 0.000086683 + "connectionEstablishedSeconds": 0.064874404, + "uploadSeconds": 0.126240455, + "downloadSeconds": 0.000102661 }, { - "connectionEstablishedSeconds": 0.064126896, - "uploadSeconds": 0.12513368, - "downloadSeconds": 0.000087 + "connectionEstablishedSeconds": 0.060850312, + "uploadSeconds": 0.11825899, + "downloadSeconds": 0.000074344 }, { - "connectionEstablishedSeconds": 0.06522082, - "uploadSeconds": 0.127384227, - "downloadSeconds": 0.000078841 + "connectionEstablishedSeconds": 0.063836571, + "uploadSeconds": 0.124325405, + "downloadSeconds": 0.000058374 }, { - "connectionEstablishedSeconds": 0.065178933, - "uploadSeconds": 0.127099449, - "downloadSeconds": 0.000062779 + "connectionEstablishedSeconds": 0.062482892, + "uploadSeconds": 0.12198127, + "downloadSeconds": 0.000066463 }, { - "connectionEstablishedSeconds": 0.065065304, - "uploadSeconds": 0.127017103, - "downloadSeconds": 0.000076416 + "connectionEstablishedSeconds": 0.066011166, + "uploadSeconds": 0.128493564, + "downloadSeconds": 0.000086812 }, { - "connectionEstablishedSeconds": 0.063369575, - "uploadSeconds": 0.123792608, - "downloadSeconds": 0.000070216 + "connectionEstablishedSeconds": 0.065877087, + "uploadSeconds": 0.128252352, + "downloadSeconds": 0.000087883 }, { - "connectionEstablishedSeconds": 0.066176096, - "uploadSeconds": 0.12928697, - "downloadSeconds": 0.000076435 + "connectionEstablishedSeconds": 0.06625631, + "uploadSeconds": 0.128871405, + "downloadSeconds": 0.000075303 }, { - "connectionEstablishedSeconds": 0.062118261, - "uploadSeconds": 0.121487454, - "downloadSeconds": 0.000042447 + "connectionEstablishedSeconds": 0.062467673, + "uploadSeconds": 0.121489929, + "downloadSeconds": 0.000093727 }, { - "connectionEstablishedSeconds": 0.06413027, - "uploadSeconds": 0.125092948, - "downloadSeconds": 0.000090647 + "connectionEstablishedSeconds": 0.064259174, + "uploadSeconds": 0.125116047, + "downloadSeconds": 0.000130588 }, { - "connectionEstablishedSeconds": 0.064355412, - "uploadSeconds": 0.125820027, - "downloadSeconds": 0.000074631 + "connectionEstablishedSeconds": 0.064881658, + "uploadSeconds": 0.12634141, + "downloadSeconds": 0.000096298 }, { - "connectionEstablishedSeconds": 0.064424965, - "uploadSeconds": 0.125626212, - "downloadSeconds": 0.000092905 + "connectionEstablishedSeconds": 0.062591642, + "uploadSeconds": 0.121615007, + "downloadSeconds": 0.000052845 }, { - "connectionEstablishedSeconds": 0.063150565, - "uploadSeconds": 0.123051398, - "downloadSeconds": 0.000094722 + "connectionEstablishedSeconds": 0.062009462, + "uploadSeconds": 0.120569713, + "downloadSeconds": 0.000059144 }, { - "connectionEstablishedSeconds": 0.06528981, - "uploadSeconds": 0.127392345, - "downloadSeconds": 0.000080433 + "connectionEstablishedSeconds": 0.065772964, + "uploadSeconds": 0.128015637, + "downloadSeconds": 0.00005976 }, { - "connectionEstablishedSeconds": 0.064397919, - "uploadSeconds": 0.125604893, - "downloadSeconds": 0.000069993 + "connectionEstablishedSeconds": 0.065244623, + "uploadSeconds": 0.127597754, + "downloadSeconds": 0.000101338 }, { - "connectionEstablishedSeconds": 0.065187591, - "uploadSeconds": 0.126990687, - "downloadSeconds": 0.000091627 + "connectionEstablishedSeconds": 0.064528531, + "uploadSeconds": 0.125431869, + "downloadSeconds": 0.000102549 }, { - "connectionEstablishedSeconds": 0.063417623, - "uploadSeconds": 0.123617361, - "downloadSeconds": 0.000081642 + "connectionEstablishedSeconds": 0.064060708, + "uploadSeconds": 0.124861387, + "downloadSeconds": 0.000089563 }, { - "connectionEstablishedSeconds": 0.064258337, - "uploadSeconds": 0.125301748, - "downloadSeconds": 0.000080782 + "connectionEstablishedSeconds": 0.065100315, + "uploadSeconds": 0.126407417, + "downloadSeconds": 0.00009769 }, { - "connectionEstablishedSeconds": 0.06530541, - "uploadSeconds": 0.127461622, - "downloadSeconds": 0.000079359 + "connectionEstablishedSeconds": 0.063827269, + "uploadSeconds": 0.12418934, + "downloadSeconds": 0.000059017 }, { - "connectionEstablishedSeconds": 0.066364456, - "uploadSeconds": 0.129484859, - "downloadSeconds": 0.000082134 + "connectionEstablishedSeconds": 0.063091443, + "uploadSeconds": 0.122694617, + "downloadSeconds": 0.000088479 }, { - "connectionEstablishedSeconds": 0.063161012, - "uploadSeconds": 0.12313346, - "downloadSeconds": 0.000110439 + "connectionEstablishedSeconds": 0.063035134, + "uploadSeconds": 0.122636708, + "downloadSeconds": 0.000090614 }, { - "connectionEstablishedSeconds": 0.065088703, - "uploadSeconds": 0.127989293, - "downloadSeconds": 0.000128456 + "connectionEstablishedSeconds": 0.063237351, + "uploadSeconds": 0.123009684, + "downloadSeconds": 0.000085346 }, { - "connectionEstablishedSeconds": 0.065123001, - "uploadSeconds": 0.127103757, - "downloadSeconds": 0.000089359 + "connectionEstablishedSeconds": 0.065321546, + "uploadSeconds": 0.127202042, + "downloadSeconds": 0.0000863 }, { - "connectionEstablishedSeconds": 0.064166981, - "uploadSeconds": 0.125169024, - "downloadSeconds": 0.000076537 + "connectionEstablishedSeconds": 0.062293646, + "uploadSeconds": 0.121197102, + "downloadSeconds": 0.00008741 }, { - "connectionEstablishedSeconds": 0.064034879, - "uploadSeconds": 0.124937213, - "downloadSeconds": 0.000092306 + "connectionEstablishedSeconds": 0.06499849, + "uploadSeconds": 0.12637115, + "downloadSeconds": 0.000075902 }, { - "connectionEstablishedSeconds": 0.062318916, - "uploadSeconds": 0.121570439, - "downloadSeconds": 0.00008869 + "connectionEstablishedSeconds": 0.064614152, + "uploadSeconds": 0.125767329, + "downloadSeconds": 0.000102428 }, { - "connectionEstablishedSeconds": 0.06451775, - "uploadSeconds": 0.125880374, - "downloadSeconds": 0.000070733 + "connectionEstablishedSeconds": 0.064867917, + "uploadSeconds": 0.126189822, + "downloadSeconds": 0.000049127 }, { - "connectionEstablishedSeconds": 0.0653148, - "uploadSeconds": 0.127512076, - "downloadSeconds": 0.000105563 + "connectionEstablishedSeconds": 0.066343616, + "uploadSeconds": 0.129171678, + "downloadSeconds": 0.000109185 }, { - "connectionEstablishedSeconds": 0.065928837, - "uploadSeconds": 0.128754109, - "downloadSeconds": 0.000068297 + "connectionEstablishedSeconds": 0.063594419, + "uploadSeconds": 0.123729252, + "downloadSeconds": 0.000046197 }, { - "connectionEstablishedSeconds": 0.063017372, - "uploadSeconds": 0.122802979, - "downloadSeconds": 0.000076553 + "connectionEstablishedSeconds": 0.062504828, + "uploadSeconds": 0.121566267, + "downloadSeconds": 0.000054981 }, { - "connectionEstablishedSeconds": 0.062494702, - "uploadSeconds": 0.121722861, - "downloadSeconds": 0.000102752 + "connectionEstablishedSeconds": 0.064002572, + "uploadSeconds": 0.12462905, + "downloadSeconds": 0.000100446 }, { - "connectionEstablishedSeconds": 0.066021783, - "uploadSeconds": 0.128869731, - "downloadSeconds": 0.000098913 + "connectionEstablishedSeconds": 0.063602089, + "uploadSeconds": 0.123874281, + "downloadSeconds": 0.000048411 }, { - "connectionEstablishedSeconds": 0.06433668, - "uploadSeconds": 0.125500287, - "downloadSeconds": 0.000083697 + "connectionEstablishedSeconds": 0.062719554, + "uploadSeconds": 0.121941194, + "downloadSeconds": 0.000089545 }, { - "connectionEstablishedSeconds": 0.065283629, - "uploadSeconds": 0.127384802, - "downloadSeconds": 0.000105729 + "connectionEstablishedSeconds": 0.063417018, + "uploadSeconds": 0.123306077, + "downloadSeconds": 0.000098731 }, { - "connectionEstablishedSeconds": 0.064466863, - "uploadSeconds": 0.125718278, - "downloadSeconds": 0.000075692 + "connectionEstablishedSeconds": 0.064107384, + "uploadSeconds": 0.124691877, + "downloadSeconds": 0.000051022 }, { - "connectionEstablishedSeconds": 0.064268034, - "uploadSeconds": 0.125557539, - "downloadSeconds": 0.000090321 + "connectionEstablishedSeconds": 0.063100152, + "uploadSeconds": 0.122616935, + "downloadSeconds": 0.000099 }, { - "connectionEstablishedSeconds": 0.06638065, - "uploadSeconds": 0.129462231, - "downloadSeconds": 0.000081654 + "connectionEstablishedSeconds": 0.062746556, + "uploadSeconds": 0.121948401, + "downloadSeconds": 0.000095793 }, { - "connectionEstablishedSeconds": 0.064237751, - "uploadSeconds": 0.125439776, - "downloadSeconds": 0.000106965 + "connectionEstablishedSeconds": 0.06261075, + "uploadSeconds": 0.121898582, + "downloadSeconds": 0.000094156 }, { - "connectionEstablishedSeconds": 0.064175167, - "uploadSeconds": 0.125600749, - "downloadSeconds": 0.000075985 + "connectionEstablishedSeconds": 0.062358096, + "uploadSeconds": 0.121059397, + "downloadSeconds": 0.000085366 }, { - "connectionEstablishedSeconds": 0.064403694, - "uploadSeconds": 0.125558819, - "downloadSeconds": 0.000080568 + "connectionEstablishedSeconds": 0.063956063, + "uploadSeconds": 0.12442619, + "downloadSeconds": 0.000084146 }, { - "connectionEstablishedSeconds": 0.066074582, - "uploadSeconds": 0.128839817, - "downloadSeconds": 0.00008531 + "connectionEstablishedSeconds": 0.06177277, + "uploadSeconds": 0.11993679, + "downloadSeconds": 0.000051577 }, { - "connectionEstablishedSeconds": 0.065286891, - "uploadSeconds": 0.127462148, - "downloadSeconds": 0.000072748 + "connectionEstablishedSeconds": 0.065472055, + "uploadSeconds": 0.128132439, + "downloadSeconds": 0.000099309 }, { - "connectionEstablishedSeconds": 0.064274389, - "uploadSeconds": 0.125370487, - "downloadSeconds": 0.000070981 + "connectionEstablishedSeconds": 0.064005678, + "uploadSeconds": 0.124557276, + "downloadSeconds": 0.000071229 }, { - "connectionEstablishedSeconds": 0.060105349, - "uploadSeconds": 0.116970484, - "downloadSeconds": 0.000091248 + "connectionEstablishedSeconds": 0.06607158, + "uploadSeconds": 0.128709658, + "downloadSeconds": 0.000041673 }, { - "connectionEstablishedSeconds": 0.062335245, - "uploadSeconds": 0.121292054, - "downloadSeconds": 0.000070328 + "connectionEstablishedSeconds": 0.06447987, + "uploadSeconds": 0.125384308, + "downloadSeconds": 0.000068772 }, { - "connectionEstablishedSeconds": 0.062301273, - "uploadSeconds": 0.121239449, - "downloadSeconds": 0.000085547 + "connectionEstablishedSeconds": 0.063884104, + "uploadSeconds": 0.124527706, + "downloadSeconds": 0.000111449 }, { - "connectionEstablishedSeconds": 0.06428912, - "uploadSeconds": 0.125382739, - "downloadSeconds": 0.000081108 + "connectionEstablishedSeconds": 0.06461319, + "uploadSeconds": 0.125775606, + "downloadSeconds": 0.000085327 }, { - "connectionEstablishedSeconds": 0.064360109, - "uploadSeconds": 0.125580701, - "downloadSeconds": 0.000079713 + "connectionEstablishedSeconds": 0.064890847, + "uploadSeconds": 0.126204848, + "downloadSeconds": 0.000082451 }, { - "connectionEstablishedSeconds": 0.065119304, - "uploadSeconds": 0.127077108, - "downloadSeconds": 0.000088751 + "connectionEstablishedSeconds": 0.063228089, + "uploadSeconds": 0.122949404, + "downloadSeconds": 0.000146099 }, { - "connectionEstablishedSeconds": 0.062163236, - "uploadSeconds": 0.121235601, - "downloadSeconds": 0.000079591 + "connectionEstablishedSeconds": 0.061495799, + "uploadSeconds": 0.11947625, + "downloadSeconds": 0.000048393 }, { - "connectionEstablishedSeconds": 0.061306086, - "uploadSeconds": 0.11942279, - "downloadSeconds": 0.000078386 + "connectionEstablishedSeconds": 0.065020492, + "uploadSeconds": 0.12666505, + "downloadSeconds": 0.000089146 }, { - "connectionEstablishedSeconds": 0.061190747, - "uploadSeconds": 0.119219845, - "downloadSeconds": 0.000110473 + "connectionEstablishedSeconds": 0.065945204, + "uploadSeconds": 0.128484838, + "downloadSeconds": 0.000106159 }, { - "connectionEstablishedSeconds": 0.065292125, - "uploadSeconds": 0.127396382, - "downloadSeconds": 0.000068734 + "connectionEstablishedSeconds": 0.067762673, + "uploadSeconds": 0.132168213, + "downloadSeconds": 0.000107903 }, { - "connectionEstablishedSeconds": 0.062185957, - "uploadSeconds": 0.121243088, - "downloadSeconds": 0.000114471 + "connectionEstablishedSeconds": 0.065572532, + "uploadSeconds": 0.127516638, + "downloadSeconds": 0.000089004 }, { - "connectionEstablishedSeconds": 0.063528118, - "uploadSeconds": 0.123997793, - "downloadSeconds": 0.000075911 + "connectionEstablishedSeconds": 0.064566376, + "uploadSeconds": 0.125582624, + "downloadSeconds": 0.000092355 }, { - "connectionEstablishedSeconds": 0.064042916, - "uploadSeconds": 0.125024996, - "downloadSeconds": 0.00007225 + "connectionEstablishedSeconds": 0.065893006, + "uploadSeconds": 0.128263391, + "downloadSeconds": 0.000093783 }, { - "connectionEstablishedSeconds": 0.064443886, - "uploadSeconds": 0.125672597, - "downloadSeconds": 0.000078395 + "connectionEstablishedSeconds": 0.062806285, + "uploadSeconds": 0.122113968, + "downloadSeconds": 0.000065137 }, { - "connectionEstablishedSeconds": 0.063392206, - "uploadSeconds": 0.123587602, - "downloadSeconds": 0.000072712 + "connectionEstablishedSeconds": 0.06517263, + "uploadSeconds": 0.12702264, + "downloadSeconds": 0.000102609 }, { - "connectionEstablishedSeconds": 0.062296009, - "uploadSeconds": 0.121451264, - "downloadSeconds": 0.000089308 + "connectionEstablishedSeconds": 0.063970953, + "uploadSeconds": 0.12447171, + "downloadSeconds": 0.000084464 }, { - "connectionEstablishedSeconds": 0.062416512, - "uploadSeconds": 0.121895573, - "downloadSeconds": 0.000088052 + "connectionEstablishedSeconds": 0.063519187, + "uploadSeconds": 0.123752611, + "downloadSeconds": 0.000092866 }, { - "connectionEstablishedSeconds": 0.063479879, - "uploadSeconds": 0.123484239, - "downloadSeconds": 0.000073097 + "connectionEstablishedSeconds": 0.065027565, + "uploadSeconds": 0.126622237, + "downloadSeconds": 0.000106011 }, { - "connectionEstablishedSeconds": 0.063076285, - "uploadSeconds": 0.122962526, - "downloadSeconds": 0.000067781 + "connectionEstablishedSeconds": 0.065309519, + "uploadSeconds": 0.127363373, + "downloadSeconds": 0.000068864 }, { - "connectionEstablishedSeconds": 0.062992078, - "uploadSeconds": 0.122791521, - "downloadSeconds": 0.000102182 + "connectionEstablishedSeconds": 0.060630725, + "uploadSeconds": 0.117690014, + "downloadSeconds": 0.000111107 }, { - "connectionEstablishedSeconds": 0.062388485, - "uploadSeconds": 0.12169624, - "downloadSeconds": 0.000054821 + "connectionEstablishedSeconds": 0.065486703, + "uploadSeconds": 0.127455826, + "downloadSeconds": 0.000090808 }, { - "connectionEstablishedSeconds": 0.065163787, - "uploadSeconds": 0.127124215, - "downloadSeconds": 0.000071285 + "connectionEstablishedSeconds": 0.063195899, + "uploadSeconds": 0.123090512, + "downloadSeconds": 0.000056723 }, { - "connectionEstablishedSeconds": 0.06500456, - "uploadSeconds": 0.126837921, - "downloadSeconds": 0.000096057 + "connectionEstablishedSeconds": 0.06505979, + "uploadSeconds": 0.126614753, + "downloadSeconds": 0.000089765 }, { - "connectionEstablishedSeconds": 0.060228236, - "uploadSeconds": 0.117322131, - "downloadSeconds": 0.000088203 + "connectionEstablishedSeconds": 0.062354526, + "uploadSeconds": 0.12156822, + "downloadSeconds": 0.000086259 }, { - "connectionEstablishedSeconds": 0.061374285, - "uploadSeconds": 0.119650773, - "downloadSeconds": 0.000093075 + "connectionEstablishedSeconds": 0.062418939, + "uploadSeconds": 0.121418247, + "downloadSeconds": 0.000087486 }, { - "connectionEstablishedSeconds": 0.066049331, - "uploadSeconds": 0.128896322, - "downloadSeconds": 0.000068872 + "connectionEstablishedSeconds": 0.065193432, + "uploadSeconds": 0.126871858, + "downloadSeconds": 0.000092619 }, { - "connectionEstablishedSeconds": 0.063424729, - "uploadSeconds": 0.123681527, - "downloadSeconds": 0.000074472 + "connectionEstablishedSeconds": 0.063621014, + "uploadSeconds": 0.123766947, + "downloadSeconds": 0.000062353 } ], "implementation": "rust-libp2p", @@ -1996,504 +1996,504 @@ { "result": [ { - "connectionEstablishedSeconds": 0.063690418, - "uploadSeconds": 0.123487097, - "downloadSeconds": 0.000077911 + "connectionEstablishedSeconds": 0.06295453, + "uploadSeconds": 0.121854033, + "downloadSeconds": 0.000077444 }, { - "connectionEstablishedSeconds": 0.064549682, - "uploadSeconds": 0.125719346, - "downloadSeconds": 0.000062381 + "connectionEstablishedSeconds": 0.065123301, + "uploadSeconds": 0.126731822, + "downloadSeconds": 0.000083647 }, { - "connectionEstablishedSeconds": 0.062453895, - "uploadSeconds": 0.121577091, - "downloadSeconds": 0.000058544 + "connectionEstablishedSeconds": 0.064473496, + "uploadSeconds": 0.125295297, + "downloadSeconds": 0.000093787 }, { - "connectionEstablishedSeconds": 0.065392818, - "uploadSeconds": 0.127281329, - "downloadSeconds": 0.000054925 + "connectionEstablishedSeconds": 0.063632156, + "uploadSeconds": 0.123478645, + "downloadSeconds": 0.000072658 }, { - "connectionEstablishedSeconds": 0.06519152, - "uploadSeconds": 0.127275479, - "downloadSeconds": 0.000135901 + "connectionEstablishedSeconds": 0.062453992, + "uploadSeconds": 0.121532257, + "downloadSeconds": 0.000080757 }, { - "connectionEstablishedSeconds": 0.063443656, - "uploadSeconds": 0.123693117, - "downloadSeconds": 0.000052125 + "connectionEstablishedSeconds": 0.06282161, + "uploadSeconds": 0.122050909, + "downloadSeconds": 0.000062642 }, { - "connectionEstablishedSeconds": 0.062347545, - "uploadSeconds": 0.121569889, - "downloadSeconds": 0.000036034 + "connectionEstablishedSeconds": 0.064755094, + "uploadSeconds": 0.125864073, + "downloadSeconds": 0.000105545 }, { - "connectionEstablishedSeconds": 0.063280881, - "uploadSeconds": 0.123415714, - "downloadSeconds": 0.000056959 + "connectionEstablishedSeconds": 0.064105606, + "uploadSeconds": 0.124738407, + "downloadSeconds": 0.000045231 }, { - "connectionEstablishedSeconds": 0.066193179, - "uploadSeconds": 0.129518294, - "downloadSeconds": 0.000071852 + "connectionEstablishedSeconds": 0.064166122, + "uploadSeconds": 0.124608084, + "downloadSeconds": 0.000084333 }, { - "connectionEstablishedSeconds": 0.062126532, - "uploadSeconds": 0.121228283, - "downloadSeconds": 0.000052937 + "connectionEstablishedSeconds": 0.062669409, + "uploadSeconds": 0.121852983, + "downloadSeconds": 0.000086386 }, { - "connectionEstablishedSeconds": 0.06231345, - "uploadSeconds": 0.121525482, - "downloadSeconds": 0.000071782 + "connectionEstablishedSeconds": 0.064950734, + "uploadSeconds": 0.126331357, + "downloadSeconds": 0.000155847 }, { - "connectionEstablishedSeconds": 0.063269109, - "uploadSeconds": 0.123361124, - "downloadSeconds": 0.000044688 + "connectionEstablishedSeconds": 0.062348759, + "uploadSeconds": 0.121223049, + "downloadSeconds": 0.000101475 }, { - "connectionEstablishedSeconds": 0.065207518, - "uploadSeconds": 0.127207981, - "downloadSeconds": 0.000070084 + "connectionEstablishedSeconds": 0.061410545, + "uploadSeconds": 0.119357751, + "downloadSeconds": 0.00013631 }, { - "connectionEstablishedSeconds": 0.061380173, - "uploadSeconds": 0.119481956, - "downloadSeconds": 0.000065015 + "connectionEstablishedSeconds": 0.06538073, + "uploadSeconds": 0.127286516, + "downloadSeconds": 0.000084163 }, { - "connectionEstablishedSeconds": 0.060212037, - "uploadSeconds": 0.117167964, - "downloadSeconds": 0.000043358 + "connectionEstablishedSeconds": 0.065267895, + "uploadSeconds": 0.127053901, + "downloadSeconds": 0.00006416 }, { - "connectionEstablishedSeconds": 0.06323939, - "uploadSeconds": 0.123184237, - "downloadSeconds": 0.000072781 + "connectionEstablishedSeconds": 0.064411294, + "uploadSeconds": 0.124778899, + "downloadSeconds": 0.000074301 }, { - "connectionEstablishedSeconds": 0.065025993, - "uploadSeconds": 0.126928598, - "downloadSeconds": 0.000051023 + "connectionEstablishedSeconds": 0.063916077, + "uploadSeconds": 0.124393312, + "downloadSeconds": 0.000085843 }, { - "connectionEstablishedSeconds": 0.064152457, - "uploadSeconds": 0.125391783, - "downloadSeconds": 0.000040382 + "connectionEstablishedSeconds": 0.062081196, + "uploadSeconds": 0.120463049, + "downloadSeconds": 0.000081798 }, { - "connectionEstablishedSeconds": 0.063408868, - "uploadSeconds": 0.123466335, - "downloadSeconds": 0.000058209 + "connectionEstablishedSeconds": 0.064835647, + "uploadSeconds": 0.126418203, + "downloadSeconds": 0.000073351 }, { - "connectionEstablishedSeconds": 0.065041042, - "uploadSeconds": 0.126991778, - "downloadSeconds": 0.000074001 + "connectionEstablishedSeconds": 0.065654051, + "uploadSeconds": 0.127722734, + "downloadSeconds": 0.000105934 }, { - "connectionEstablishedSeconds": 0.06346134, - "uploadSeconds": 0.123686005, - "downloadSeconds": 0.000056565 + "connectionEstablishedSeconds": 0.063670175, + "uploadSeconds": 0.123943916, + "downloadSeconds": 0.000077717 }, { - "connectionEstablishedSeconds": 0.063262021, - "uploadSeconds": 0.123524436, - "downloadSeconds": 0.00006451 + "connectionEstablishedSeconds": 0.065474963, + "uploadSeconds": 0.127595228, + "downloadSeconds": 0.000055289 }, { - "connectionEstablishedSeconds": 0.064249558, - "uploadSeconds": 0.125533608, - "downloadSeconds": 0.000052007 + "connectionEstablishedSeconds": 0.064085463, + "uploadSeconds": 0.124794593, + "downloadSeconds": 0.00009378 }, { - "connectionEstablishedSeconds": 0.06135226, - "uploadSeconds": 0.119824249, - "downloadSeconds": 0.00004232 + "connectionEstablishedSeconds": 0.063967591, + "uploadSeconds": 0.124510889, + "downloadSeconds": 0.000077411 }, { - "connectionEstablishedSeconds": 0.065392495, - "uploadSeconds": 0.127486291, - "downloadSeconds": 0.000045368 + "connectionEstablishedSeconds": 0.062634672, + "uploadSeconds": 0.121821183, + "downloadSeconds": 0.000063691 }, { - "connectionEstablishedSeconds": 0.064357878, - "uploadSeconds": 0.125534367, - "downloadSeconds": 0.000047927 + "connectionEstablishedSeconds": 0.066294521, + "uploadSeconds": 0.129160959, + "downloadSeconds": 0.000054596 }, { - "connectionEstablishedSeconds": 0.064144147, - "uploadSeconds": 0.12524382, - "downloadSeconds": 0.000054457 + "connectionEstablishedSeconds": 0.064455007, + "uploadSeconds": 0.125418313, + "downloadSeconds": 0.00007373 }, { - "connectionEstablishedSeconds": 0.063220658, - "uploadSeconds": 0.123295038, - "downloadSeconds": 0.000050545 + "connectionEstablishedSeconds": 0.063959842, + "uploadSeconds": 0.1244949, + "downloadSeconds": 0.000073275 }, { - "connectionEstablishedSeconds": 0.065487019, - "uploadSeconds": 0.12789526, - "downloadSeconds": 0.000062426 + "connectionEstablishedSeconds": 0.066070252, + "uploadSeconds": 0.128792037, + "downloadSeconds": 0.00004618 }, { - "connectionEstablishedSeconds": 0.065351055, - "uploadSeconds": 0.127626139, - "downloadSeconds": 0.000053051 + "connectionEstablishedSeconds": 0.065236645, + "uploadSeconds": 0.127059524, + "downloadSeconds": 0.000050571 }, { - "connectionEstablishedSeconds": 0.063279657, - "uploadSeconds": 0.123287258, - "downloadSeconds": 0.00004275 + "connectionEstablishedSeconds": 0.06094768, + "uploadSeconds": 0.118601577, + "downloadSeconds": 0.000093052 }, { - "connectionEstablishedSeconds": 0.061394639, - "uploadSeconds": 0.119676583, - "downloadSeconds": 0.000057056 + "connectionEstablishedSeconds": 0.064582742, + "uploadSeconds": 0.12575478, + "downloadSeconds": 0.000082067 }, { - "connectionEstablishedSeconds": 0.062591515, - "uploadSeconds": 0.121892998, - "downloadSeconds": 0.000059725 + "connectionEstablishedSeconds": 0.065072501, + "uploadSeconds": 0.12662061, + "downloadSeconds": 0.000098341 }, { - "connectionEstablishedSeconds": 0.060265923, - "uploadSeconds": 0.117536191, - "downloadSeconds": 0.000064234 + "connectionEstablishedSeconds": 0.066624862, + "uploadSeconds": 0.129815026, + "downloadSeconds": 0.000081843 }, { - "connectionEstablishedSeconds": 0.063357613, - "uploadSeconds": 0.123683173, - "downloadSeconds": 0.000045259 + "connectionEstablishedSeconds": 0.065496903, + "uploadSeconds": 0.12779438, + "downloadSeconds": 0.000105756 }, { - "connectionEstablishedSeconds": 0.065073817, - "uploadSeconds": 0.127155289, - "downloadSeconds": 0.000063339 + "connectionEstablishedSeconds": 0.063587012, + "uploadSeconds": 0.123648704, + "downloadSeconds": 0.000073976 }, { - "connectionEstablishedSeconds": 0.063421051, - "uploadSeconds": 0.123679629, - "downloadSeconds": 0.000044839 + "connectionEstablishedSeconds": 0.065166457, + "uploadSeconds": 0.126912988, + "downloadSeconds": 0.000109828 }, { - "connectionEstablishedSeconds": 0.064240118, - "uploadSeconds": 0.125388798, - "downloadSeconds": 0.000062731 + "connectionEstablishedSeconds": 0.06025493, + "uploadSeconds": 0.117031953, + "downloadSeconds": 0.00008765 }, { - "connectionEstablishedSeconds": 0.06585202, - "uploadSeconds": 0.128542709, - "downloadSeconds": 0.000057998 + "connectionEstablishedSeconds": 0.065858394, + "uploadSeconds": 0.128498961, + "downloadSeconds": 0.000117106 }, { - "connectionEstablishedSeconds": 0.064264679, - "uploadSeconds": 0.125482804, - "downloadSeconds": 0.000066616 + "connectionEstablishedSeconds": 0.065079865, + "uploadSeconds": 0.126656494, + "downloadSeconds": 0.00007727 }, { - "connectionEstablishedSeconds": 0.064430646, - "uploadSeconds": 0.125464915, - "downloadSeconds": 0.000061849 + "connectionEstablishedSeconds": 0.0635718, + "uploadSeconds": 0.123726091, + "downloadSeconds": 0.000074642 }, { - "connectionEstablishedSeconds": 0.065909843, - "uploadSeconds": 0.128525099, - "downloadSeconds": 0.000065476 + "connectionEstablishedSeconds": 0.063487759, + "uploadSeconds": 0.123542277, + "downloadSeconds": 0.000057058 }, { - "connectionEstablishedSeconds": 0.06430694, - "uploadSeconds": 0.125555703, - "downloadSeconds": 0.000051914 + "connectionEstablishedSeconds": 0.061036628, + "uploadSeconds": 0.118754325, + "downloadSeconds": 0.000087272 }, { - "connectionEstablishedSeconds": 0.064431927, - "uploadSeconds": 0.125858749, - "downloadSeconds": 0.000073389 + "connectionEstablishedSeconds": 0.064088629, + "uploadSeconds": 0.124607971, + "downloadSeconds": 0.00005193 }, { - "connectionEstablishedSeconds": 0.065025922, - "uploadSeconds": 0.127005147, - "downloadSeconds": 0.000089877 + "connectionEstablishedSeconds": 0.063898205, + "uploadSeconds": 0.12449889, + "downloadSeconds": 0.00007393 }, { - "connectionEstablishedSeconds": 0.062570155, - "uploadSeconds": 0.121852184, - "downloadSeconds": 0.000070642 + "connectionEstablishedSeconds": 0.063112121, + "uploadSeconds": 0.122876487, + "downloadSeconds": 0.000082174 }, { - "connectionEstablishedSeconds": 0.065281436, - "uploadSeconds": 0.127189725, - "downloadSeconds": 0.000052287 + "connectionEstablishedSeconds": 0.061838182, + "uploadSeconds": 0.119878674, + "downloadSeconds": 0.000089398 }, { - "connectionEstablishedSeconds": 0.064203143, - "uploadSeconds": 0.12554179, - "downloadSeconds": 0.000060465 + "connectionEstablishedSeconds": 0.062248433, + "uploadSeconds": 0.121379219, + "downloadSeconds": 0.000044327 }, { - "connectionEstablishedSeconds": 0.063340976, - "uploadSeconds": 0.123315032, - "downloadSeconds": 0.00006574 + "connectionEstablishedSeconds": 0.064517291, + "uploadSeconds": 0.125572328, + "downloadSeconds": 0.000050306 }, { - "connectionEstablishedSeconds": 0.064188012, - "uploadSeconds": 0.125448996, - "downloadSeconds": 0.00008078 + "connectionEstablishedSeconds": 0.064898676, + "uploadSeconds": 0.126133518, + "downloadSeconds": 0.000068667 }, { - "connectionEstablishedSeconds": 0.063262438, - "uploadSeconds": 0.123200694, - "downloadSeconds": 0.000040357 + "connectionEstablishedSeconds": 0.062271554, + "uploadSeconds": 0.121187727, + "downloadSeconds": 0.00004803 }, { - "connectionEstablishedSeconds": 0.06405408, - "uploadSeconds": 0.125016783, - "downloadSeconds": 0.000052261 + "connectionEstablishedSeconds": 0.062338208, + "uploadSeconds": 0.120937059, + "downloadSeconds": 0.000050162 }, { - "connectionEstablishedSeconds": 0.066007539, - "uploadSeconds": 0.129046091, - "downloadSeconds": 0.000047777 + "connectionEstablishedSeconds": 0.06516715, + "uploadSeconds": 0.12658971, + "downloadSeconds": 0.000054901 }, { - "connectionEstablishedSeconds": 0.062257359, - "uploadSeconds": 0.121266969, - "downloadSeconds": 0.000061191 + "connectionEstablishedSeconds": 0.065651049, + "uploadSeconds": 0.127730491, + "downloadSeconds": 0.000072302 }, { - "connectionEstablishedSeconds": 0.065401755, - "uploadSeconds": 0.127345828, - "downloadSeconds": 0.00005843 + "connectionEstablishedSeconds": 0.065052451, + "uploadSeconds": 0.126855008, + "downloadSeconds": 0.000069138 }, { - "connectionEstablishedSeconds": 0.065216621, - "uploadSeconds": 0.127424421, - "downloadSeconds": 0.000077764 + "connectionEstablishedSeconds": 0.066387803, + "uploadSeconds": 0.129441088, + "downloadSeconds": 0.000046108 }, { - "connectionEstablishedSeconds": 0.062458448, - "uploadSeconds": 0.119817401, - "downloadSeconds": 0.000044767 + "connectionEstablishedSeconds": 0.064914776, + "uploadSeconds": 0.126462724, + "downloadSeconds": 0.000060604 }, { - "connectionEstablishedSeconds": 0.065362314, - "uploadSeconds": 0.127749913, - "downloadSeconds": 0.000066144 + "connectionEstablishedSeconds": 0.066325354, + "uploadSeconds": 0.128622135, + "downloadSeconds": 0.000089472 }, { - "connectionEstablishedSeconds": 0.06299922, - "uploadSeconds": 0.122889744, - "downloadSeconds": 0.000047904 + "connectionEstablishedSeconds": 0.064877193, + "uploadSeconds": 0.126410536, + "downloadSeconds": 0.000083253 }, { - "connectionEstablishedSeconds": 0.065867978, - "uploadSeconds": 0.128718284, - "downloadSeconds": 0.000076852 + "connectionEstablishedSeconds": 0.061518459, + "uploadSeconds": 0.11970554, + "downloadSeconds": 0.000098102 }, { - "connectionEstablishedSeconds": 0.065840031, - "uploadSeconds": 0.128727742, - "downloadSeconds": 0.000069704 + "connectionEstablishedSeconds": 0.066446584, + "uploadSeconds": 0.129426228, + "downloadSeconds": 0.000052881 }, { - "connectionEstablishedSeconds": 0.06227749, - "uploadSeconds": 0.121451953, - "downloadSeconds": 0.000057764 + "connectionEstablishedSeconds": 0.063347672, + "uploadSeconds": 0.123333115, + "downloadSeconds": 0.000051834 }, { - "connectionEstablishedSeconds": 0.064352122, - "uploadSeconds": 0.125497917, - "downloadSeconds": 0.000050079 + "connectionEstablishedSeconds": 0.062311469, + "uploadSeconds": 0.121232877, + "downloadSeconds": 0.000067479 }, { - "connectionEstablishedSeconds": 0.062215245, - "uploadSeconds": 0.121336215, - "downloadSeconds": 0.000044258 + "connectionEstablishedSeconds": 0.065580823, + "uploadSeconds": 0.127383534, + "downloadSeconds": 0.00008774 }, { - "connectionEstablishedSeconds": 0.064409462, - "uploadSeconds": 0.125819277, - "downloadSeconds": 0.000059226 + "connectionEstablishedSeconds": 0.062602698, + "uploadSeconds": 0.12176476, + "downloadSeconds": 0.000084162 }, { - "connectionEstablishedSeconds": 0.064314713, - "uploadSeconds": 0.12540278, - "downloadSeconds": 0.000076264 + "connectionEstablishedSeconds": 0.064679694, + "uploadSeconds": 0.125792176, + "downloadSeconds": 0.000049092 }, { - "connectionEstablishedSeconds": 0.063241447, - "uploadSeconds": 0.123451158, - "downloadSeconds": 0.000076863 + "connectionEstablishedSeconds": 0.066119217, + "uploadSeconds": 0.128911034, + "downloadSeconds": 0.000052582 }, { - "connectionEstablishedSeconds": 0.063309122, - "uploadSeconds": 0.123704461, - "downloadSeconds": 0.000046913 + "connectionEstablishedSeconds": 0.064028513, + "uploadSeconds": 0.12462816, + "downloadSeconds": 0.000062379 }, { - "connectionEstablishedSeconds": 0.064230872, - "uploadSeconds": 0.125191226, - "downloadSeconds": 0.000049758 + "connectionEstablishedSeconds": 0.066205814, + "uploadSeconds": 0.128883233, + "downloadSeconds": 0.000052233 }, { - "connectionEstablishedSeconds": 0.063383078, - "uploadSeconds": 0.12360638, - "downloadSeconds": 0.000043805 + "connectionEstablishedSeconds": 0.062012424, + "uploadSeconds": 0.120882738, + "downloadSeconds": 0.00005704 }, { - "connectionEstablishedSeconds": 0.063390599, - "uploadSeconds": 0.123606064, - "downloadSeconds": 0.00005037 + "connectionEstablishedSeconds": 0.064255919, + "uploadSeconds": 0.124959707, + "downloadSeconds": 0.000091863 }, { - "connectionEstablishedSeconds": 0.061395116, - "uploadSeconds": 0.119511358, - "downloadSeconds": 0.000053731 + "connectionEstablishedSeconds": 0.063693044, + "uploadSeconds": 0.123805374, + "downloadSeconds": 0.000094304 }, { - "connectionEstablishedSeconds": 0.064234483, - "uploadSeconds": 0.125461846, - "downloadSeconds": 0.000043607 + "connectionEstablishedSeconds": 0.064984709, + "uploadSeconds": 0.126642484, + "downloadSeconds": 0.000047402 }, { - "connectionEstablishedSeconds": 0.063639676, - "uploadSeconds": 0.124015955, - "downloadSeconds": 0.00006317 + "connectionEstablishedSeconds": 0.061120801, + "uploadSeconds": 0.11917866, + "downloadSeconds": 0.000070103 }, { - "connectionEstablishedSeconds": 0.064129008, - "uploadSeconds": 0.123573337, - "downloadSeconds": 0.000059694 + "connectionEstablishedSeconds": 0.063592651, + "uploadSeconds": 0.123675225, + "downloadSeconds": 0.000061204 }, { - "connectionEstablishedSeconds": 0.065094816, - "uploadSeconds": 0.127210865, - "downloadSeconds": 0.000072237 + "connectionEstablishedSeconds": 0.062592166, + "uploadSeconds": 0.121571849, + "downloadSeconds": 0.000071449 }, { - "connectionEstablishedSeconds": 0.065374183, - "uploadSeconds": 0.127396263, - "downloadSeconds": 0.000052285 + "connectionEstablishedSeconds": 0.065114172, + "uploadSeconds": 0.126766224, + "downloadSeconds": 0.000060301 }, { - "connectionEstablishedSeconds": 0.06434635, - "uploadSeconds": 0.125461101, - "downloadSeconds": 0.000095363 + "connectionEstablishedSeconds": 0.063331652, + "uploadSeconds": 0.122993699, + "downloadSeconds": 0.000085199 }, { - "connectionEstablishedSeconds": 0.062472734, - "uploadSeconds": 0.121582369, - "downloadSeconds": 0.00004803 + "connectionEstablishedSeconds": 0.064596237, + "uploadSeconds": 0.125709824, + "downloadSeconds": 0.000080473 }, { - "connectionEstablishedSeconds": 0.064244778, - "uploadSeconds": 0.125580371, - "downloadSeconds": 0.000064647 + "connectionEstablishedSeconds": 0.066972879, + "uploadSeconds": 0.130634142, + "downloadSeconds": 0.00004697 }, { - "connectionEstablishedSeconds": 0.063115128, - "uploadSeconds": 0.122980499, - "downloadSeconds": 0.000051285 + "connectionEstablishedSeconds": 0.062545682, + "uploadSeconds": 0.121463022, + "downloadSeconds": 0.000060858 }, { - "connectionEstablishedSeconds": 0.0653275, - "uploadSeconds": 0.12554814, - "downloadSeconds": 0.000040053 + "connectionEstablishedSeconds": 0.065678017, + "uploadSeconds": 0.128114478, + "downloadSeconds": 0.000054247 }, { - "connectionEstablishedSeconds": 0.06421283, - "uploadSeconds": 0.12536133, - "downloadSeconds": 0.00005974 + "connectionEstablishedSeconds": 0.066031352, + "uploadSeconds": 0.128668745, + "downloadSeconds": 0.000046151 }, { - "connectionEstablishedSeconds": 0.065252182, - "uploadSeconds": 0.127183247, - "downloadSeconds": 0.000039168 + "connectionEstablishedSeconds": 0.065528277, + "uploadSeconds": 0.127732124, + "downloadSeconds": 0.000050967 }, { - "connectionEstablishedSeconds": 0.062238062, - "uploadSeconds": 0.121393298, - "downloadSeconds": 0.000044896 + "connectionEstablishedSeconds": 0.061144288, + "uploadSeconds": 0.118864606, + "downloadSeconds": 0.000055298 }, { - "connectionEstablishedSeconds": 0.06385464, - "uploadSeconds": 0.12381855, - "downloadSeconds": 0.000044188 + "connectionEstablishedSeconds": 0.065305185, + "uploadSeconds": 0.127158917, + "downloadSeconds": 0.000050949 }, { - "connectionEstablishedSeconds": 0.061221602, - "uploadSeconds": 0.119336532, - "downloadSeconds": 0.000045733 + "connectionEstablishedSeconds": 0.065225217, + "uploadSeconds": 0.126952291, + "downloadSeconds": 0.000044136 }, { - "connectionEstablishedSeconds": 0.065851607, - "uploadSeconds": 0.127245975, - "downloadSeconds": 0.000050606 + "connectionEstablishedSeconds": 0.064853145, + "uploadSeconds": 0.126412428, + "downloadSeconds": 0.000097659 }, { - "connectionEstablishedSeconds": 0.063989896, - "uploadSeconds": 0.125020257, - "downloadSeconds": 0.000052014 + "connectionEstablishedSeconds": 0.065478193, + "uploadSeconds": 0.127374565, + "downloadSeconds": 0.000062365 }, { - "connectionEstablishedSeconds": 0.064260289, - "uploadSeconds": 0.125517964, - "downloadSeconds": 0.000055818 + "connectionEstablishedSeconds": 0.05995481, + "uploadSeconds": 0.116531334, + "downloadSeconds": 0.000078307 }, { - "connectionEstablishedSeconds": 0.06514428, - "uploadSeconds": 0.127180271, - "downloadSeconds": 0.000073513 + "connectionEstablishedSeconds": 0.066140712, + "uploadSeconds": 0.128805388, + "downloadSeconds": 0.000049685 }, { - "connectionEstablishedSeconds": 0.065387466, - "uploadSeconds": 0.127538416, - "downloadSeconds": 0.000065984 + "connectionEstablishedSeconds": 0.064286525, + "uploadSeconds": 0.125063487, + "downloadSeconds": 0.000092709 }, { - "connectionEstablishedSeconds": 0.064262191, - "uploadSeconds": 0.125284932, - "downloadSeconds": 0.000053444 + "connectionEstablishedSeconds": 0.065156327, + "uploadSeconds": 0.127035923, + "downloadSeconds": 0.00005645 }, { - "connectionEstablishedSeconds": 0.066231763, - "uploadSeconds": 0.129317457, - "downloadSeconds": 0.000108319 + "connectionEstablishedSeconds": 0.062462454, + "uploadSeconds": 0.121519512, + "downloadSeconds": 0.000090082 }, { - "connectionEstablishedSeconds": 0.06293954, - "uploadSeconds": 0.122896242, - "downloadSeconds": 0.000043568 + "connectionEstablishedSeconds": 0.063023488, + "uploadSeconds": 0.122460757, + "downloadSeconds": 0.000049759 }, { - "connectionEstablishedSeconds": 0.063313225, - "uploadSeconds": 0.123378226, - "downloadSeconds": 0.000049142 + "connectionEstablishedSeconds": 0.065384733, + "uploadSeconds": 0.127145941, + "downloadSeconds": 0.000078884 }, { - "connectionEstablishedSeconds": 0.061407975, - "uploadSeconds": 0.11947587, - "downloadSeconds": 0.000077536 + "connectionEstablishedSeconds": 0.064855409, + "uploadSeconds": 0.12630613, + "downloadSeconds": 0.0000832 }, { - "connectionEstablishedSeconds": 0.063267036, - "uploadSeconds": 0.123277946, - "downloadSeconds": 0.000074473 + "connectionEstablishedSeconds": 0.065364575, + "uploadSeconds": 0.127268953, + "downloadSeconds": 0.000079745 }, { - "connectionEstablishedSeconds": 0.064343927, - "uploadSeconds": 0.125660162, - "downloadSeconds": 0.000075987 + "connectionEstablishedSeconds": 0.066317931, + "uploadSeconds": 0.129352868, + "downloadSeconds": 0.000089251 }, { - "connectionEstablishedSeconds": 0.065948219, - "uploadSeconds": 0.128840182, - "downloadSeconds": 0.000040577 + "connectionEstablishedSeconds": 0.061175776, + "uploadSeconds": 0.118754982, + "downloadSeconds": 0.00005179 } ], "implementation": "rust-libp2p-quinn", @@ -2504,503 +2504,503 @@ "result": [ { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191208407, - "downloadSeconds": 0.000022101 + "uploadSeconds": 0.191286116, + "downloadSeconds": 0.000030153 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185101468, - "downloadSeconds": 0.000017833 + "uploadSeconds": 0.183529055, + "downloadSeconds": 0.000025756 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.189288901, - "downloadSeconds": 0.00001904 + "uploadSeconds": 0.184410375, + "downloadSeconds": 0.000040311 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185814162, - "downloadSeconds": 0.000019369 + "uploadSeconds": 0.190450232, + "downloadSeconds": 0.000028102 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185623765, - "downloadSeconds": 0.000017995 + "uploadSeconds": 0.187048479, + "downloadSeconds": 0.000020757 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191143454, - "downloadSeconds": 0.000027876 + "uploadSeconds": 0.190285011, + "downloadSeconds": 0.000024856 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.176678783, - "downloadSeconds": 0.00002569 + "uploadSeconds": 0.178674815, + "downloadSeconds": 0.000024766 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188957086, - "downloadSeconds": 0.000025008 + "uploadSeconds": 0.189727631, + "downloadSeconds": 0.000021712 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.194459048, - "downloadSeconds": 0.000027769 + "uploadSeconds": 0.18619776, + "downloadSeconds": 0.000034857 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187969761, - "downloadSeconds": 0.000021266 + "uploadSeconds": 0.193181301, + "downloadSeconds": 0.000024575 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191450763, - "downloadSeconds": 0.000020674 + "uploadSeconds": 0.189751793, + "downloadSeconds": 0.000025637 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188425547, - "downloadSeconds": 0.00001841 + "uploadSeconds": 0.183150367, + "downloadSeconds": 0.000024492 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182830993, - "downloadSeconds": 0.000019515 + "uploadSeconds": 0.188043639, + "downloadSeconds": 0.000024447 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.179421439, - "downloadSeconds": 0.00002113 + "uploadSeconds": 0.189577218, + "downloadSeconds": 0.000018189 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188333845, - "downloadSeconds": 0.000016575 + "uploadSeconds": 0.188882264, + "downloadSeconds": 0.000021261 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191449969, - "downloadSeconds": 0.000017998 + "uploadSeconds": 0.186325009, + "downloadSeconds": 0.000024389 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182885312, - "downloadSeconds": 0.000019005 + "uploadSeconds": 0.181536797, + "downloadSeconds": 0.000033015 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.194283541, - "downloadSeconds": 0.000016743 + "uploadSeconds": 0.193188111, + "downloadSeconds": 0.000025382 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190858767, - "downloadSeconds": 0.000019238 + "uploadSeconds": 0.185746185, + "downloadSeconds": 0.000023011 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18288068, - "downloadSeconds": 0.000014964 + "uploadSeconds": 0.182559536, + "downloadSeconds": 0.000025647 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18555248, - "downloadSeconds": 0.000019661 + "uploadSeconds": 0.186054822, + "downloadSeconds": 0.000021982 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182370176, - "downloadSeconds": 0.000018734 + "uploadSeconds": 0.187466153, + "downloadSeconds": 0.000024312 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188238516, - "downloadSeconds": 0.000019547 + "uploadSeconds": 0.184809142, + "downloadSeconds": 0.000022947 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188327785, - "downloadSeconds": 0.000020929 + "uploadSeconds": 0.191330569, + "downloadSeconds": 0.000028027 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190376705, - "downloadSeconds": 0.000026902 + "uploadSeconds": 0.189069566, + "downloadSeconds": 0.000024548 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.17991243, - "downloadSeconds": 0.000015986 + "uploadSeconds": 0.18767281, + "downloadSeconds": 0.000021507 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185000306, - "downloadSeconds": 0.000021125 + "uploadSeconds": 0.18593129, + "downloadSeconds": 0.000023896 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191868063, - "downloadSeconds": 0.000016718 + "uploadSeconds": 0.181014203, + "downloadSeconds": 0.000023811 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185562211, - "downloadSeconds": 0.000019823 + "uploadSeconds": 0.188932328, + "downloadSeconds": 0.000025813 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.184510649, - "downloadSeconds": 0.000020877 + "uploadSeconds": 0.184957641, + "downloadSeconds": 0.000023322 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.184704727, - "downloadSeconds": 0.000019411 + "uploadSeconds": 0.180815006, + "downloadSeconds": 0.00003453 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182514858, - "downloadSeconds": 0.000019294 + "uploadSeconds": 0.190052471, + "downloadSeconds": 0.00002195 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191307288, - "downloadSeconds": 0.000018987 + "uploadSeconds": 0.193640405, + "downloadSeconds": 0.000020421 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185471657, - "downloadSeconds": 0.000020549 + "uploadSeconds": 0.190830146, + "downloadSeconds": 0.000022273 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188953161, - "downloadSeconds": 0.000019572 + "uploadSeconds": 0.188083369, + "downloadSeconds": 0.00002138 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182200134, - "downloadSeconds": 0.000019643 + "uploadSeconds": 0.185840961, + "downloadSeconds": 0.000021979 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188209869, - "downloadSeconds": 0.000025173 + "uploadSeconds": 0.193488566, + "downloadSeconds": 0.000024822 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191179759, - "downloadSeconds": 0.000016738 + "uploadSeconds": 0.178135133, + "downloadSeconds": 0.000024564 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191283664, - "downloadSeconds": 0.00001794 + "uploadSeconds": 0.187243776, + "downloadSeconds": 0.00002429 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18874002, - "downloadSeconds": 0.000016605 + "uploadSeconds": 0.186128, + "downloadSeconds": 0.00002176 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191027867, - "downloadSeconds": 0.000019676 + "uploadSeconds": 0.187437127, + "downloadSeconds": 0.000024223 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.183136059, - "downloadSeconds": 0.000016257 + "uploadSeconds": 0.193260755, + "downloadSeconds": 0.000021753 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182825571, - "downloadSeconds": 0.000025578 + "uploadSeconds": 0.17961362, + "downloadSeconds": 0.000030347 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182273002, - "downloadSeconds": 0.000016323 + "uploadSeconds": 0.185389065, + "downloadSeconds": 0.00002451 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190947515, - "downloadSeconds": 0.000025431 + "uploadSeconds": 0.189083595, + "downloadSeconds": 0.000023793 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193378589, - "downloadSeconds": 0.00001985 + "uploadSeconds": 0.188867791, + "downloadSeconds": 0.000024162 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.184944529, - "downloadSeconds": 0.000016693 + "uploadSeconds": 0.182410744, + "downloadSeconds": 0.000021144 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191468774, - "downloadSeconds": 0.0000192 + "uploadSeconds": 0.19338541, + "downloadSeconds": 0.000024628 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193960933, - "downloadSeconds": 0.000025698 + "uploadSeconds": 0.180148621, + "downloadSeconds": 0.000023234 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185315955, - "downloadSeconds": 0.000019871 + "uploadSeconds": 0.183482025, + "downloadSeconds": 0.00002359 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188847642, - "downloadSeconds": 0.000018573 + "uploadSeconds": 0.192011607, + "downloadSeconds": 0.000019914 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188097152, - "downloadSeconds": 0.000019848 + "uploadSeconds": 0.193289196, + "downloadSeconds": 0.000024513 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188100894, - "downloadSeconds": 0.000019014 + "uploadSeconds": 0.185263194, + "downloadSeconds": 0.000028503 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182878791, - "downloadSeconds": 0.000026392 + "uploadSeconds": 0.186621738, + "downloadSeconds": 0.000024194 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182869145, - "downloadSeconds": 0.000025336 + "uploadSeconds": 0.192898111, + "downloadSeconds": 0.000024166 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190750916, - "downloadSeconds": 0.000022091 + "uploadSeconds": 0.187423423, + "downloadSeconds": 0.000023964 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18587901, - "downloadSeconds": 0.000019658 + "uploadSeconds": 0.191429869, + "downloadSeconds": 0.000021317 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185938551, - "downloadSeconds": 0.00002095 + "uploadSeconds": 0.187678237, + "downloadSeconds": 0.000021642 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190824969, - "downloadSeconds": 0.00001511 + "uploadSeconds": 0.187827296, + "downloadSeconds": 0.000021888 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190908212, - "downloadSeconds": 0.00002801 + "uploadSeconds": 0.186599878, + "downloadSeconds": 0.00002446 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18029583, - "downloadSeconds": 0.000018758 + "uploadSeconds": 0.190005609, + "downloadSeconds": 0.000022756 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188462321, - "downloadSeconds": 0.000022213 + "uploadSeconds": 0.189002327, + "downloadSeconds": 0.000028052 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.179931032, - "downloadSeconds": 0.000022012 + "uploadSeconds": 0.191248774, + "downloadSeconds": 0.000021291 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188148799, - "downloadSeconds": 0.000024397 + "uploadSeconds": 0.182345961, + "downloadSeconds": 0.000018505 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188149378, - "downloadSeconds": 0.000017646 + "uploadSeconds": 0.178343946, + "downloadSeconds": 0.000024258 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191209208, - "downloadSeconds": 0.000019247 + "uploadSeconds": 0.1796409, + "downloadSeconds": 0.000020622 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185511337, - "downloadSeconds": 0.000014801 + "uploadSeconds": 0.191527728, + "downloadSeconds": 0.000023144 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.176491439, - "downloadSeconds": 0.000018543 + "uploadSeconds": 0.187086772, + "downloadSeconds": 0.000024889 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193720412, - "downloadSeconds": 0.000016254 + "uploadSeconds": 0.18110695, + "downloadSeconds": 0.000023585 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193015016, - "downloadSeconds": 0.000025464 + "uploadSeconds": 0.187533438, + "downloadSeconds": 0.000022629 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.183209584, - "downloadSeconds": 0.000026755 + "uploadSeconds": 0.187532688, + "downloadSeconds": 0.000029573 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.179050944, - "downloadSeconds": 0.000020689 + "uploadSeconds": 0.191096905, + "downloadSeconds": 0.000025604 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185592294, - "downloadSeconds": 0.000025665 + "uploadSeconds": 0.194325541, + "downloadSeconds": 0.000021101 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182671512, - "downloadSeconds": 0.000026017 + "uploadSeconds": 0.189083303, + "downloadSeconds": 0.000021147 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182686635, - "downloadSeconds": 0.000024955 + "uploadSeconds": 0.193745985, + "downloadSeconds": 0.000024439 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182974171, - "downloadSeconds": 0.00001908 + "uploadSeconds": 0.190582174, + "downloadSeconds": 0.000017468 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188537742, - "downloadSeconds": 0.000025148 + "uploadSeconds": 0.192054523, + "downloadSeconds": 0.0000221 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185566242, - "downloadSeconds": 0.000020149 + "uploadSeconds": 0.183943085, + "downloadSeconds": 0.000024812 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188427983, - "downloadSeconds": 0.000031525 + "uploadSeconds": 0.17475635, + "downloadSeconds": 0.000024018 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191230263, - "downloadSeconds": 0.000018548 + "uploadSeconds": 0.184440358, + "downloadSeconds": 0.000021449 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188441856, - "downloadSeconds": 0.000015223 + "uploadSeconds": 0.18631819, + "downloadSeconds": 0.000028734 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191670796, - "downloadSeconds": 0.000021328 + "uploadSeconds": 0.181409699, + "downloadSeconds": 0.00002564 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188956666, - "downloadSeconds": 0.000019708 + "uploadSeconds": 0.179933668, + "downloadSeconds": 0.000024125 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.187839206, - "downloadSeconds": 0.000021322 + "uploadSeconds": 0.185195736, + "downloadSeconds": 0.000022891 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190875028, - "downloadSeconds": 0.000024525 + "uploadSeconds": 0.188159214, + "downloadSeconds": 0.00002612 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188003464, - "downloadSeconds": 0.000019573 + "uploadSeconds": 0.191314415, + "downloadSeconds": 0.000021095 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.17655002, - "downloadSeconds": 0.000025053 + "uploadSeconds": 0.183011343, + "downloadSeconds": 0.000024533 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188811542, - "downloadSeconds": 0.000019026 + "uploadSeconds": 0.188848175, + "downloadSeconds": 0.0000209 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190840535, - "downloadSeconds": 0.000027324 + "uploadSeconds": 0.195977983, + "downloadSeconds": 0.000024503 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182647969, - "downloadSeconds": 0.000019119 + "uploadSeconds": 0.18291316, + "downloadSeconds": 0.000020749 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193650174, - "downloadSeconds": 0.000025148 + "uploadSeconds": 0.185713857, + "downloadSeconds": 0.000023253 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.190707548, - "downloadSeconds": 0.000019048 + "uploadSeconds": 0.189154788, + "downloadSeconds": 0.000024316 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.182124076, - "downloadSeconds": 0.000019526 + "uploadSeconds": 0.185723779, + "downloadSeconds": 0.000022027 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.191362852, - "downloadSeconds": 0.000018785 + "uploadSeconds": 0.186181575, + "downloadSeconds": 0.000020345 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.18542719, - "downloadSeconds": 0.000025911 + "uploadSeconds": 0.183142393, + "downloadSeconds": 0.000021052 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.186165308, - "downloadSeconds": 0.000018994 + "uploadSeconds": 0.184955497, + "downloadSeconds": 0.000020846 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193811172, - "downloadSeconds": 0.000019637 + "uploadSeconds": 0.189237981, + "downloadSeconds": 0.000027586 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.188136681, - "downloadSeconds": 0.000016352 + "uploadSeconds": 0.19088234, + "downloadSeconds": 0.000023083 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.193919929, - "downloadSeconds": 0.000016965 + "uploadSeconds": 0.181319211, + "downloadSeconds": 0.000023255 }, { "connectionEstablishedSeconds": 0, - "uploadSeconds": 0.185569859, - "downloadSeconds": 0.000025152 + "uploadSeconds": 0.184472225, + "downloadSeconds": 0.000034077 } ], "implementation": "https", @@ -3010,504 +3010,504 @@ { "result": [ { - "connectionEstablishedSeconds": 0.195929802, - "uploadSeconds": 0.000003325, - "downloadSeconds": 0.065023171 + "connectionEstablishedSeconds": 0.187265924, + "uploadSeconds": 0.000003363, + "downloadSeconds": 0.062154144 }, { - "connectionEstablishedSeconds": 0.193678251, - "uploadSeconds": 0.000003409, - "downloadSeconds": 0.063776728 + "connectionEstablishedSeconds": 0.189557176, + "uploadSeconds": 0.000006487, + "downloadSeconds": 0.062203288 }, { - "connectionEstablishedSeconds": 0.18656693, - "uploadSeconds": 0.000003042, - "downloadSeconds": 0.061989241 + "connectionEstablishedSeconds": 0.183024286, + "uploadSeconds": 0.000003387, + "downloadSeconds": 0.060029314 }, { - "connectionEstablishedSeconds": 0.193991809, - "uploadSeconds": 0.000010555, - "downloadSeconds": 0.064409249 + "connectionEstablishedSeconds": 0.196939115, + "uploadSeconds": 0.000003342, + "downloadSeconds": 0.064670246 }, { - "connectionEstablishedSeconds": 0.191544509, - "uploadSeconds": 0.000002956, - "downloadSeconds": 0.063681192 + "connectionEstablishedSeconds": 0.187845645, + "uploadSeconds": 0.000003119, + "downloadSeconds": 0.061806415 }, { - "connectionEstablishedSeconds": 0.184121155, - "uploadSeconds": 0.000002484, - "downloadSeconds": 0.061623068 + "connectionEstablishedSeconds": 0.183480618, + "uploadSeconds": 0.000004217, + "downloadSeconds": 0.060140849 }, { - "connectionEstablishedSeconds": 0.191244023, - "uploadSeconds": 0.00000273, - "downloadSeconds": 0.063653197 + "connectionEstablishedSeconds": 0.194091737, + "uploadSeconds": 0.000003398, + "downloadSeconds": 0.063641913 }, { - "connectionEstablishedSeconds": 0.187206459, - "uploadSeconds": 0.000002843, - "downloadSeconds": 0.061817032 + "connectionEstablishedSeconds": 0.192041679, + "uploadSeconds": 0.000003277, + "downloadSeconds": 0.063566373 }, { - "connectionEstablishedSeconds": 0.187887386, - "uploadSeconds": 0.000002764, - "downloadSeconds": 0.06191459 + "connectionEstablishedSeconds": 0.191750568, + "uploadSeconds": 0.000004094, + "downloadSeconds": 0.06306795 }, { - "connectionEstablishedSeconds": 0.177160929, - "uploadSeconds": 0.000002652, - "downloadSeconds": 0.058984229 + "connectionEstablishedSeconds": 0.196661034, + "uploadSeconds": 0.000003638, + "downloadSeconds": 0.064597793 }, { - "connectionEstablishedSeconds": 0.188911754, - "uploadSeconds": 0.000003058, - "downloadSeconds": 0.062790015 + "connectionEstablishedSeconds": 0.192399151, + "uploadSeconds": 0.000003287, + "downloadSeconds": 0.063717409 }, { - "connectionEstablishedSeconds": 0.191857989, - "uploadSeconds": 0.000003182, - "downloadSeconds": 0.063793038 + "connectionEstablishedSeconds": 0.194512523, + "uploadSeconds": 0.000003305, + "downloadSeconds": 0.063794327 }, { - "connectionEstablishedSeconds": 0.196335711, - "uploadSeconds": 0.000002621, - "downloadSeconds": 0.064669612 + "connectionEstablishedSeconds": 0.190643887, + "uploadSeconds": 0.000003297, + "downloadSeconds": 0.063321458 }, { - "connectionEstablishedSeconds": 0.189422694, - "uploadSeconds": 0.000003145, - "downloadSeconds": 0.062942128 + "connectionEstablishedSeconds": 0.191925632, + "uploadSeconds": 0.000003153, + "downloadSeconds": 0.062927302 }, { - "connectionEstablishedSeconds": 0.189845091, - "uploadSeconds": 0.000002939, - "downloadSeconds": 0.06298465 + "connectionEstablishedSeconds": 0.193221353, + "uploadSeconds": 0.000003628, + "downloadSeconds": 0.063378233 }, { - "connectionEstablishedSeconds": 0.190076994, - "uploadSeconds": 0.000002411, - "downloadSeconds": 0.062551046 + "connectionEstablishedSeconds": 0.191420507, + "uploadSeconds": 0.000003297, + "downloadSeconds": 0.062854803 }, { - "connectionEstablishedSeconds": 0.188932068, - "uploadSeconds": 0.000003231, - "downloadSeconds": 0.062637617 + "connectionEstablishedSeconds": 0.177621185, + "uploadSeconds": 0.000004143, + "downloadSeconds": 0.058236693 }, { - "connectionEstablishedSeconds": 0.18904689, - "uploadSeconds": 0.000002544, - "downloadSeconds": 0.062688706 + "connectionEstablishedSeconds": 0.186026405, + "uploadSeconds": 0.00000371, + "downloadSeconds": 0.061038859 }, { - "connectionEstablishedSeconds": 0.189411683, - "uploadSeconds": 0.000003416, - "downloadSeconds": 0.063070733 + "connectionEstablishedSeconds": 0.187867362, + "uploadSeconds": 0.000003418, + "downloadSeconds": 0.062196985 }, { - "connectionEstablishedSeconds": 0.19168595, - "uploadSeconds": 0.000002893, - "downloadSeconds": 0.063642054 + "connectionEstablishedSeconds": 0.195457825, + "uploadSeconds": 0.000003426, + "downloadSeconds": 0.063899168 }, { - "connectionEstablishedSeconds": 0.195048493, - "uploadSeconds": 0.000002757, - "downloadSeconds": 0.064820438 + "connectionEstablishedSeconds": 0.188626728, + "uploadSeconds": 0.00000324, + "downloadSeconds": 0.06187622 }, { - "connectionEstablishedSeconds": 0.189047724, - "uploadSeconds": 0.000002808, - "downloadSeconds": 0.062834428 + "connectionEstablishedSeconds": 0.190810988, + "uploadSeconds": 0.000003275, + "downloadSeconds": 0.063101919 }, { - "connectionEstablishedSeconds": 0.180397985, - "uploadSeconds": 0.000003458, - "downloadSeconds": 0.059869496 + "connectionEstablishedSeconds": 0.192989026, + "uploadSeconds": 0.000002992, + "downloadSeconds": 0.063853567 }, { - "connectionEstablishedSeconds": 0.186177698, - "uploadSeconds": 0.000002848, - "downloadSeconds": 0.061949718 + "connectionEstablishedSeconds": 0.189992784, + "uploadSeconds": 0.000003782, + "downloadSeconds": 0.062369201 }, { - "connectionEstablishedSeconds": 0.184378953, - "uploadSeconds": 0.000002812, - "downloadSeconds": 0.060721205 + "connectionEstablishedSeconds": 0.194293407, + "uploadSeconds": 0.000003116, + "downloadSeconds": 0.063669453 }, { - "connectionEstablishedSeconds": 0.186369218, - "uploadSeconds": 0.00000278, - "downloadSeconds": 0.06184929 + "connectionEstablishedSeconds": 0.190904301, + "uploadSeconds": 0.000004374, + "downloadSeconds": 0.062676162 }, { - "connectionEstablishedSeconds": 0.181095573, - "uploadSeconds": 0.000002641, - "downloadSeconds": 0.059917592 + "connectionEstablishedSeconds": 0.195879226, + "uploadSeconds": 0.000004131, + "downloadSeconds": 0.064389181 }, { - "connectionEstablishedSeconds": 0.191990515, - "uploadSeconds": 0.000002874, - "downloadSeconds": 0.06378383 + "connectionEstablishedSeconds": 0.193824536, + "uploadSeconds": 0.000004093, + "downloadSeconds": 0.063465764 }, { - "connectionEstablishedSeconds": 0.192352466, - "uploadSeconds": 0.000002752, - "downloadSeconds": 0.063901611 + "connectionEstablishedSeconds": 0.188027247, + "uploadSeconds": 0.000002917, + "downloadSeconds": 0.062328405 }, { - "connectionEstablishedSeconds": 0.182984558, - "uploadSeconds": 0.000002565, - "downloadSeconds": 0.060697665 + "connectionEstablishedSeconds": 0.195207956, + "uploadSeconds": 0.000003012, + "downloadSeconds": 0.064754265 }, { - "connectionEstablishedSeconds": 0.180276975, - "uploadSeconds": 0.000002711, - "downloadSeconds": 0.05981274 + "connectionEstablishedSeconds": 0.190079317, + "uploadSeconds": 0.000004124, + "downloadSeconds": 0.062940938 }, { - "connectionEstablishedSeconds": 0.191817546, - "uploadSeconds": 0.000028849, - "downloadSeconds": 0.063745476 + "connectionEstablishedSeconds": 0.19125065, + "uploadSeconds": 0.000003096, + "downloadSeconds": 0.063017625 }, { - "connectionEstablishedSeconds": 0.188138466, - "uploadSeconds": 0.000003258, - "downloadSeconds": 0.06269192 + "connectionEstablishedSeconds": 0.189269514, + "uploadSeconds": 0.000003286, + "downloadSeconds": 0.062708315 }, { - "connectionEstablishedSeconds": 0.183067138, - "uploadSeconds": 0.000004419, - "downloadSeconds": 0.06075878 + "connectionEstablishedSeconds": 0.190415547, + "uploadSeconds": 0.000003906, + "downloadSeconds": 0.063148976 }, { - "connectionEstablishedSeconds": 0.18702717, - "uploadSeconds": 0.000003354, - "downloadSeconds": 0.061606144 + "connectionEstablishedSeconds": 0.187764982, + "uploadSeconds": 0.000003329, + "downloadSeconds": 0.061561417 }, { - "connectionEstablishedSeconds": 0.191716102, - "uploadSeconds": 0.000003159, - "downloadSeconds": 0.063623532 + "connectionEstablishedSeconds": 0.184668878, + "uploadSeconds": 0.000003093, + "downloadSeconds": 0.060799904 }, { - "connectionEstablishedSeconds": 0.182639882, - "uploadSeconds": 0.000003776, - "downloadSeconds": 0.060619907 + "connectionEstablishedSeconds": 0.178886012, + "uploadSeconds": 0.000003475, + "downloadSeconds": 0.058630013 }, { - "connectionEstablishedSeconds": 0.190054457, - "uploadSeconds": 0.000029109, - "downloadSeconds": 0.062534156 + "connectionEstablishedSeconds": 0.187124831, + "uploadSeconds": 0.000003911, + "downloadSeconds": 0.061490874 }, { - "connectionEstablishedSeconds": 0.182799686, - "uploadSeconds": 0.000002459, - "downloadSeconds": 0.060676326 + "connectionEstablishedSeconds": 0.191519886, + "uploadSeconds": 0.000003354, + "downloadSeconds": 0.06284 }, { - "connectionEstablishedSeconds": 0.189183668, - "uploadSeconds": 0.000002535, - "downloadSeconds": 0.062799251 + "connectionEstablishedSeconds": 0.183677331, + "uploadSeconds": 0.000003329, + "downloadSeconds": 0.060895723 }, { - "connectionEstablishedSeconds": 0.186685655, - "uploadSeconds": 0.000002854, - "downloadSeconds": 0.061968925 + "connectionEstablishedSeconds": 0.193609607, + "uploadSeconds": 0.000003424, + "downloadSeconds": 0.063463555 }, { - "connectionEstablishedSeconds": 0.185081845, - "uploadSeconds": 0.000002552, - "downloadSeconds": 0.061438607 + "connectionEstablishedSeconds": 0.190345657, + "uploadSeconds": 0.000004193, + "downloadSeconds": 0.062501922 }, { - "connectionEstablishedSeconds": 0.191663837, - "uploadSeconds": 0.000003124, - "downloadSeconds": 0.063768617 + "connectionEstablishedSeconds": 0.189962975, + "uploadSeconds": 0.000003208, + "downloadSeconds": 0.06288207 }, { - "connectionEstablishedSeconds": 0.183675177, - "uploadSeconds": 0.000002713, - "downloadSeconds": 0.060883216 + "connectionEstablishedSeconds": 0.187529507, + "uploadSeconds": 0.000003354, + "downloadSeconds": 0.061472793 }, { - "connectionEstablishedSeconds": 0.190181267, - "uploadSeconds": 0.000002829, - "downloadSeconds": 0.062700105 + "connectionEstablishedSeconds": 0.187134544, + "uploadSeconds": 0.000006123, + "downloadSeconds": 0.061314985 }, { - "connectionEstablishedSeconds": 0.180060968, - "uploadSeconds": 0.000002806, - "downloadSeconds": 0.059705018 + "connectionEstablishedSeconds": 0.197905948, + "uploadSeconds": 0.000003685, + "downloadSeconds": 0.065034712 }, { - "connectionEstablishedSeconds": 0.191645155, - "uploadSeconds": 0.000029455, - "downloadSeconds": 0.063685876 + "connectionEstablishedSeconds": 0.177555793, + "uploadSeconds": 0.000003361, + "downloadSeconds": 0.058861411 }, { - "connectionEstablishedSeconds": 0.180504364, - "uploadSeconds": 0.000002575, - "downloadSeconds": 0.05991312 + "connectionEstablishedSeconds": 0.191306735, + "uploadSeconds": 0.000017854, + "downloadSeconds": 0.064192984 }, { - "connectionEstablishedSeconds": 0.193935221, - "uploadSeconds": 0.000003045, - "downloadSeconds": 0.064477779 + "connectionEstablishedSeconds": 0.196022343, + "uploadSeconds": 0.000003263, + "downloadSeconds": 0.065029693 }, { - "connectionEstablishedSeconds": 0.192045328, - "uploadSeconds": 0.000002898, - "downloadSeconds": 0.06378694 + "connectionEstablishedSeconds": 0.193764388, + "uploadSeconds": 0.000003303, + "downloadSeconds": 0.063631364 }, { - "connectionEstablishedSeconds": 0.186306984, - "uploadSeconds": 0.00000316, - "downloadSeconds": 0.061953872 + "connectionEstablishedSeconds": 0.196818543, + "uploadSeconds": 0.0000033, + "downloadSeconds": 0.064576233 }, { - "connectionEstablishedSeconds": 0.189007922, - "uploadSeconds": 0.000003043, - "downloadSeconds": 0.06281545 + "connectionEstablishedSeconds": 0.176810816, + "uploadSeconds": 0.000002908, + "downloadSeconds": 0.058414157 }, { - "connectionEstablishedSeconds": 0.189486479, - "uploadSeconds": 0.000003315, - "downloadSeconds": 0.062825987 + "connectionEstablishedSeconds": 0.192276585, + "uploadSeconds": 0.000003158, + "downloadSeconds": 0.06325269 }, { - "connectionEstablishedSeconds": 0.181094531, - "uploadSeconds": 0.000002811, - "downloadSeconds": 0.059969804 + "connectionEstablishedSeconds": 0.194074023, + "uploadSeconds": 0.000028356, + "downloadSeconds": 0.063717898 }, { - "connectionEstablishedSeconds": 0.1830718, - "uploadSeconds": 0.000002888, - "downloadSeconds": 0.060698437 + "connectionEstablishedSeconds": 0.193206952, + "uploadSeconds": 0.000003765, + "downloadSeconds": 0.0635352 }, { - "connectionEstablishedSeconds": 0.196168338, - "uploadSeconds": 0.000002509, - "downloadSeconds": 0.064624097 + "connectionEstablishedSeconds": 0.190057792, + "uploadSeconds": 0.000003348, + "downloadSeconds": 0.062436626 }, { - "connectionEstablishedSeconds": 0.186413507, - "uploadSeconds": 0.000002768, - "downloadSeconds": 0.061899526 + "connectionEstablishedSeconds": 0.18784935, + "uploadSeconds": 0.000003782, + "downloadSeconds": 0.061669523 }, { - "connectionEstablishedSeconds": 0.189171227, - "uploadSeconds": 0.000003573, - "downloadSeconds": 0.062751134 + "connectionEstablishedSeconds": 0.198006008, + "uploadSeconds": 0.000003444, + "downloadSeconds": 0.065708426 }, { - "connectionEstablishedSeconds": 0.183086619, - "uploadSeconds": 0.000003225, - "downloadSeconds": 0.060683139 + "connectionEstablishedSeconds": 0.188476641, + "uploadSeconds": 0.0000039, + "downloadSeconds": 0.062462671 }, { - "connectionEstablishedSeconds": 0.186043297, - "uploadSeconds": 0.000002928, - "downloadSeconds": 0.06177992 + "connectionEstablishedSeconds": 0.182203575, + "uploadSeconds": 0.000003323, + "downloadSeconds": 0.060250246 }, { - "connectionEstablishedSeconds": 0.183359541, - "uploadSeconds": 0.000003048, - "downloadSeconds": 0.06096878 + "connectionEstablishedSeconds": 0.19490573, + "uploadSeconds": 0.000003738, + "downloadSeconds": 0.064006097 }, { - "connectionEstablishedSeconds": 0.192546251, - "uploadSeconds": 0.000002835, - "downloadSeconds": 0.064013308 + "connectionEstablishedSeconds": 0.185335964, + "uploadSeconds": 0.000003142, + "downloadSeconds": 0.06146971 }, { - "connectionEstablishedSeconds": 0.19044114, - "uploadSeconds": 0.000007019, - "downloadSeconds": 0.06260421 + "connectionEstablishedSeconds": 0.183792864, + "uploadSeconds": 0.000003206, + "downloadSeconds": 0.060305569 }, { - "connectionEstablishedSeconds": 0.186461758, - "uploadSeconds": 0.000002779, - "downloadSeconds": 0.061927188 + "connectionEstablishedSeconds": 0.19713591, + "uploadSeconds": 0.000003169, + "downloadSeconds": 0.065241664 }, { - "connectionEstablishedSeconds": 0.18984499, - "uploadSeconds": 0.000002472, - "downloadSeconds": 0.063014002 + "connectionEstablishedSeconds": 0.184555929, + "uploadSeconds": 0.000003789, + "downloadSeconds": 0.060342486 }, { - "connectionEstablishedSeconds": 0.188092246, - "uploadSeconds": 0.000002552, - "downloadSeconds": 0.061919963 + "connectionEstablishedSeconds": 0.191511875, + "uploadSeconds": 0.000002978, + "downloadSeconds": 0.063331886 }, { - "connectionEstablishedSeconds": 0.187593099, - "uploadSeconds": 0.000003, - "downloadSeconds": 0.061569077 + "connectionEstablishedSeconds": 0.190624737, + "uploadSeconds": 0.000004287, + "downloadSeconds": 0.063210077 }, { - "connectionEstablishedSeconds": 0.186732225, - "uploadSeconds": 0.000002904, - "downloadSeconds": 0.062112132 + "connectionEstablishedSeconds": 0.194129578, + "uploadSeconds": 0.000004907, + "downloadSeconds": 0.064407992 }, { - "connectionEstablishedSeconds": 0.192047274, - "uploadSeconds": 0.000003186, - "downloadSeconds": 0.063781942 + "connectionEstablishedSeconds": 0.195752646, + "uploadSeconds": 0.000003319, + "downloadSeconds": 0.064317242 }, { - "connectionEstablishedSeconds": 0.189776468, - "uploadSeconds": 0.000002952, - "downloadSeconds": 0.062898156 + "connectionEstablishedSeconds": 0.19257992, + "uploadSeconds": 0.000003625, + "downloadSeconds": 0.063064308 }, { - "connectionEstablishedSeconds": 0.180225416, - "uploadSeconds": 0.00000254, - "downloadSeconds": 0.059805085 + "connectionEstablishedSeconds": 0.189536779, + "uploadSeconds": 0.000004356, + "downloadSeconds": 0.062742188 }, { - "connectionEstablishedSeconds": 0.185993981, - "uploadSeconds": 0.000002424, - "downloadSeconds": 0.061691175 + "connectionEstablishedSeconds": 0.188275419, + "uploadSeconds": 0.000003002, + "downloadSeconds": 0.062369722 }, { - "connectionEstablishedSeconds": 0.186086915, - "uploadSeconds": 0.000002676, - "downloadSeconds": 0.061743733 + "connectionEstablishedSeconds": 0.186185139, + "uploadSeconds": 0.000003817, + "downloadSeconds": 0.06109316 }, { - "connectionEstablishedSeconds": 0.18631141, - "uploadSeconds": 0.000003226, - "downloadSeconds": 0.061934772 + "connectionEstablishedSeconds": 0.184696604, + "uploadSeconds": 0.000003261, + "downloadSeconds": 0.060609072 }, { - "connectionEstablishedSeconds": 0.189213803, - "uploadSeconds": 0.000002852, - "downloadSeconds": 0.062746862 + "connectionEstablishedSeconds": 0.196722355, + "uploadSeconds": 0.000003351, + "downloadSeconds": 0.064479896 }, { - "connectionEstablishedSeconds": 0.191304096, - "uploadSeconds": 0.000002636, - "downloadSeconds": 0.063466588 + "connectionEstablishedSeconds": 0.191478022, + "uploadSeconds": 0.000003218, + "downloadSeconds": 0.063413269 }, { - "connectionEstablishedSeconds": 0.1907913, - "uploadSeconds": 0.000002571, - "downloadSeconds": 0.062638182 + "connectionEstablishedSeconds": 0.187673152, + "uploadSeconds": 0.000004551, + "downloadSeconds": 0.062067971 }, { - "connectionEstablishedSeconds": 0.185683906, - "uploadSeconds": 0.000003292, - "downloadSeconds": 0.061576998 + "connectionEstablishedSeconds": 0.193827421, + "uploadSeconds": 0.000003475, + "downloadSeconds": 0.06433508 }, { - "connectionEstablishedSeconds": 0.191299515, - "uploadSeconds": 0.000002781, - "downloadSeconds": 0.063443452 + "connectionEstablishedSeconds": 0.192151163, + "uploadSeconds": 0.000003606, + "downloadSeconds": 0.06354583 }, { - "connectionEstablishedSeconds": 0.18068616, - "uploadSeconds": 0.000002626, - "downloadSeconds": 0.062160196 + "connectionEstablishedSeconds": 0.191935843, + "uploadSeconds": 0.000008481, + "downloadSeconds": 0.06291483 }, { - "connectionEstablishedSeconds": 0.184940813, - "uploadSeconds": 0.000003747, - "downloadSeconds": 0.06091017 + "connectionEstablishedSeconds": 0.185985133, + "uploadSeconds": 0.00000336, + "downloadSeconds": 0.060967739 }, { - "connectionEstablishedSeconds": 0.186415256, - "uploadSeconds": 0.000002588, - "downloadSeconds": 0.061718645 + "connectionEstablishedSeconds": 0.195609673, + "uploadSeconds": 0.000003403, + "downloadSeconds": 0.064748252 }, { - "connectionEstablishedSeconds": 0.182090029, - "uploadSeconds": 0.000002676, - "downloadSeconds": 0.059760087 + "connectionEstablishedSeconds": 0.188223984, + "uploadSeconds": 0.000003478, + "downloadSeconds": 0.061775663 }, { - "connectionEstablishedSeconds": 0.183065222, - "uploadSeconds": 0.000002804, - "downloadSeconds": 0.060781091 + "connectionEstablishedSeconds": 0.194433271, + "uploadSeconds": 0.000003335, + "downloadSeconds": 0.06381819 }, { - "connectionEstablishedSeconds": 0.183411267, - "uploadSeconds": 0.000002657, - "downloadSeconds": 0.121622158 + "connectionEstablishedSeconds": 0.192984602, + "uploadSeconds": 0.000009887, + "downloadSeconds": 0.06334622 }, { - "connectionEstablishedSeconds": 0.191322892, - "uploadSeconds": 0.000003258, - "downloadSeconds": 0.063458585 + "connectionEstablishedSeconds": 0.192388961, + "uploadSeconds": 0.00000345, + "downloadSeconds": 0.063253286 }, { - "connectionEstablishedSeconds": 0.189979037, - "uploadSeconds": 0.000002479, - "downloadSeconds": 0.063328428 + "connectionEstablishedSeconds": 0.191417727, + "uploadSeconds": 0.000004113, + "downloadSeconds": 0.063491585 }, { - "connectionEstablishedSeconds": 0.189313035, - "uploadSeconds": 0.000002764, - "downloadSeconds": 0.062912406 + "connectionEstablishedSeconds": 0.189679397, + "uploadSeconds": 0.000003253, + "downloadSeconds": 0.062184388 }, { - "connectionEstablishedSeconds": 0.18401965, - "uploadSeconds": 0.000002427, - "downloadSeconds": 0.061105562 + "connectionEstablishedSeconds": 0.193117883, + "uploadSeconds": 0.000003131, + "downloadSeconds": 0.063380846 }, { - "connectionEstablishedSeconds": 0.194944818, - "uploadSeconds": 0.000002877, - "downloadSeconds": 0.064770594 + "connectionEstablishedSeconds": 0.198822172, + "uploadSeconds": 0.000003281, + "downloadSeconds": 0.06583434 }, { - "connectionEstablishedSeconds": 0.191603773, - "uploadSeconds": 0.000002514, - "downloadSeconds": 0.063544947 + "connectionEstablishedSeconds": 0.194338454, + "uploadSeconds": 0.000003423, + "downloadSeconds": 0.063830621 }, { - "connectionEstablishedSeconds": 0.193499569, - "uploadSeconds": 0.000002845, - "downloadSeconds": 0.063754359 + "connectionEstablishedSeconds": 0.183162377, + "uploadSeconds": 0.00000359, + "downloadSeconds": 0.06064044 }, { - "connectionEstablishedSeconds": 0.184530056, - "uploadSeconds": 0.000002668, - "downloadSeconds": 0.060638263 + "connectionEstablishedSeconds": 0.185396487, + "uploadSeconds": 0.000003061, + "downloadSeconds": 0.060731449 }, { - "connectionEstablishedSeconds": 0.191604207, - "uploadSeconds": 0.000002563, - "downloadSeconds": 0.0639117 + "connectionEstablishedSeconds": 0.191415236, + "uploadSeconds": 0.000003353, + "downloadSeconds": 0.063384523 }, { - "connectionEstablishedSeconds": 0.183141822, - "uploadSeconds": 0.000002596, - "downloadSeconds": 0.060763659 + "connectionEstablishedSeconds": 0.190619261, + "uploadSeconds": 0.000003132, + "downloadSeconds": 0.063068455 }, { - "connectionEstablishedSeconds": 0.187710582, - "uploadSeconds": 0.00000278, - "downloadSeconds": 0.06188513 + "connectionEstablishedSeconds": 0.194471485, + "uploadSeconds": 0.000002969, + "downloadSeconds": 0.064423235 }, { - "connectionEstablishedSeconds": 0.189822524, - "uploadSeconds": 0.00000292, - "downloadSeconds": 0.063017814 + "connectionEstablishedSeconds": 0.188817858, + "uploadSeconds": 0.000003669, + "downloadSeconds": 0.061856513 }, { - "connectionEstablishedSeconds": 0.190594829, - "uploadSeconds": 0.000002543, - "downloadSeconds": 0.062701724 + "connectionEstablishedSeconds": 0.183555378, + "uploadSeconds": 0.000005259, + "downloadSeconds": 0.060761592 }, { - "connectionEstablishedSeconds": 0.176993265, - "uploadSeconds": 0.000003009, - "downloadSeconds": 0.058829825 + "connectionEstablishedSeconds": 0.188950417, + "uploadSeconds": 0.000003292, + "downloadSeconds": 0.062089214 }, { - "connectionEstablishedSeconds": 0.182993297, - "uploadSeconds": 0.000003084, - "downloadSeconds": 0.060837199 + "connectionEstablishedSeconds": 0.186506121, + "uploadSeconds": 0.000004426, + "downloadSeconds": 0.061217405 } ], "implementation": "go-libp2p", @@ -3517,504 +3517,504 @@ { "result": [ { - "connectionEstablishedSeconds": 0.067063128, - "uploadSeconds": 0.00000255, - "downloadSeconds": 0.063204826 + "connectionEstablishedSeconds": 0.063853531, + "uploadSeconds": 0.000002147, + "downloadSeconds": 0.061903846 }, { - "connectionEstablishedSeconds": 0.066782487, - "uploadSeconds": 0.000001546, - "downloadSeconds": 0.063122863 + "connectionEstablishedSeconds": 0.064982901, + "uploadSeconds": 0.000002321, + "downloadSeconds": 0.061408073 }, { - "connectionEstablishedSeconds": 0.064945846, - "uploadSeconds": 0.000006712, - "downloadSeconds": 0.062253545 + "connectionEstablishedSeconds": 0.065961812, + "uploadSeconds": 0.000001949, + "downloadSeconds": 0.063958454 }, { - "connectionEstablishedSeconds": 0.066663141, - "uploadSeconds": 0.000001417, - "downloadSeconds": 0.064397492 + "connectionEstablishedSeconds": 0.070058086, + "uploadSeconds": 0.000002079, + "downloadSeconds": 0.067094922 }, { - "connectionEstablishedSeconds": 0.066599132, - "uploadSeconds": 0.000001655, - "downloadSeconds": 0.063094509 + "connectionEstablishedSeconds": 0.065052069, + "uploadSeconds": 0.000002384, + "downloadSeconds": 0.061295116 }, { - "connectionEstablishedSeconds": 0.068145486, - "uploadSeconds": 0.000001412, - "downloadSeconds": 0.064893153 + "connectionEstablishedSeconds": 0.065195841, + "uploadSeconds": 0.000002264, + "downloadSeconds": 0.063325662 }, { - "connectionEstablishedSeconds": 0.066373451, - "uploadSeconds": 0.000001572, - "downloadSeconds": 0.06303169 + "connectionEstablishedSeconds": 0.066803352, + "uploadSeconds": 0.000002064, + "downloadSeconds": 0.063079582 }, { - "connectionEstablishedSeconds": 0.067468608, - "uploadSeconds": 0.000001399, - "downloadSeconds": 0.064683769 + "connectionEstablishedSeconds": 0.067422036, + "uploadSeconds": 0.000002035, + "downloadSeconds": 0.0636488 }, { - "connectionEstablishedSeconds": 0.065180795, - "uploadSeconds": 0.000001387, - "downloadSeconds": 0.061834003 + "connectionEstablishedSeconds": 0.066899127, + "uploadSeconds": 0.000002832, + "downloadSeconds": 0.063135269 }, { - "connectionEstablishedSeconds": 0.06192811, - "uploadSeconds": 0.00000254, - "downloadSeconds": 0.05925899 + "connectionEstablishedSeconds": 0.065792178, + "uploadSeconds": 0.000002077, + "downloadSeconds": 0.062246279 }, { - "connectionEstablishedSeconds": 0.064732868, - "uploadSeconds": 0.000001279, - "downloadSeconds": 0.06201311 + "connectionEstablishedSeconds": 0.063350798, + "uploadSeconds": 0.000002209, + "downloadSeconds": 0.061342022 }, { - "connectionEstablishedSeconds": 0.062626418, - "uploadSeconds": 0.000001386, - "downloadSeconds": 0.061064437 + "connectionEstablishedSeconds": 0.067943277, + "uploadSeconds": 0.000001636, + "downloadSeconds": 0.064165736 }, { - "connectionEstablishedSeconds": 0.067256976, - "uploadSeconds": 0.000008145, - "downloadSeconds": 0.064041378 + "connectionEstablishedSeconds": 0.065498156, + "uploadSeconds": 0.000001983, + "downloadSeconds": 0.063615849 }, { - "connectionEstablishedSeconds": 0.064790535, - "uploadSeconds": 0.000001452, - "downloadSeconds": 0.063175101 + "connectionEstablishedSeconds": 0.063746753, + "uploadSeconds": 0.000003141, + "downloadSeconds": 0.061706192 }, { - "connectionEstablishedSeconds": 0.064155258, - "uploadSeconds": 0.000001643, - "downloadSeconds": 0.061171104 + "connectionEstablishedSeconds": 0.064723996, + "uploadSeconds": 0.00000233, + "downloadSeconds": 0.062873571 }, { - "connectionEstablishedSeconds": 0.066241903, - "uploadSeconds": 0.000001506, - "downloadSeconds": 0.063048087 + "connectionEstablishedSeconds": 0.064921098, + "uploadSeconds": 0.000020849, + "downloadSeconds": 0.063130592 }, { - "connectionEstablishedSeconds": 0.060686694, - "uploadSeconds": 0.000001991, - "downloadSeconds": 0.058990749 + "connectionEstablishedSeconds": 0.067853394, + "uploadSeconds": 0.000002141, + "downloadSeconds": 0.063972579 }, { - "connectionEstablishedSeconds": 0.065698562, - "uploadSeconds": 0.000002571, - "downloadSeconds": 0.062183892 + "connectionEstablishedSeconds": 0.063701565, + "uploadSeconds": 0.000002394, + "downloadSeconds": 0.061574609 }, { - "connectionEstablishedSeconds": 0.067436106, - "uploadSeconds": 0.000030687, - "downloadSeconds": 0.063935949 + "connectionEstablishedSeconds": 0.067492406, + "uploadSeconds": 0.000002183, + "downloadSeconds": 0.063669215 }, { - "connectionEstablishedSeconds": 0.060679764, - "uploadSeconds": 0.00000284, - "downloadSeconds": 0.059201156 + "connectionEstablishedSeconds": 0.063868952, + "uploadSeconds": 0.000002008, + "downloadSeconds": 0.062071297 }, { - "connectionEstablishedSeconds": 0.068123828, - "uploadSeconds": 0.000003051, - "downloadSeconds": 0.065147883 + "connectionEstablishedSeconds": 0.066077904, + "uploadSeconds": 0.000001883, + "downloadSeconds": 0.064159921 }, { - "connectionEstablishedSeconds": 0.064644897, - "uploadSeconds": 0.000001669, - "downloadSeconds": 0.060923287 + "connectionEstablishedSeconds": 0.065112524, + "uploadSeconds": 0.000002018, + "downloadSeconds": 0.061445425 }, { - "connectionEstablishedSeconds": 0.068240784, - "uploadSeconds": 0.000008918, - "downloadSeconds": 0.064867621 + "connectionEstablishedSeconds": 0.066551635, + "uploadSeconds": 0.000001943, + "downloadSeconds": 0.062937389 }, { - "connectionEstablishedSeconds": 0.065982936, - "uploadSeconds": 0.000001806, - "downloadSeconds": 0.063155608 + "connectionEstablishedSeconds": 0.064780169, + "uploadSeconds": 0.000001746, + "downloadSeconds": 0.061306276 }, { - "connectionEstablishedSeconds": 0.065214654, - "uploadSeconds": 0.000001796, - "downloadSeconds": 0.061895894 + "connectionEstablishedSeconds": 0.066465614, + "uploadSeconds": 0.000003093, + "downloadSeconds": 0.065517295 }, { - "connectionEstablishedSeconds": 0.064734252, - "uploadSeconds": 0.000001514, - "downloadSeconds": 0.063098793 + "connectionEstablishedSeconds": 0.063794166, + "uploadSeconds": 0.000003571, + "downloadSeconds": 0.061647819 }, { - "connectionEstablishedSeconds": 0.064420739, - "uploadSeconds": 0.000002253, - "downloadSeconds": 0.061200988 + "connectionEstablishedSeconds": 0.063356582, + "uploadSeconds": 0.000002864, + "downloadSeconds": 0.061416973 }, { - "connectionEstablishedSeconds": 0.066506755, - "uploadSeconds": 0.000001405, - "downloadSeconds": 0.063179379 + "connectionEstablishedSeconds": 0.064958744, + "uploadSeconds": 0.000008552, + "downloadSeconds": 0.061439026 }, { - "connectionEstablishedSeconds": 0.066634867, - "uploadSeconds": 0.000001589, - "downloadSeconds": 0.062411834 + "connectionEstablishedSeconds": 0.066975692, + "uploadSeconds": 0.00000256, + "downloadSeconds": 0.063151967 }, { - "connectionEstablishedSeconds": 0.064881041, - "uploadSeconds": 0.000001849, - "downloadSeconds": 0.061304873 + "connectionEstablishedSeconds": 0.066554911, + "uploadSeconds": 0.000004909, + "downloadSeconds": 0.064505998 }, { - "connectionEstablishedSeconds": 0.063458508, - "uploadSeconds": 0.000026403, - "downloadSeconds": 0.060197354 + "connectionEstablishedSeconds": 0.069351545, + "uploadSeconds": 0.000001972, + "downloadSeconds": 0.065523048 }, { - "connectionEstablishedSeconds": 0.065878712, - "uploadSeconds": 0.000001404, - "downloadSeconds": 0.063460912 + "connectionEstablishedSeconds": 0.067342819, + "uploadSeconds": 0.000002713, + "downloadSeconds": 0.063545465 }, { - "connectionEstablishedSeconds": 0.065324234, - "uploadSeconds": 0.000001527, - "downloadSeconds": 0.062049975 + "connectionEstablishedSeconds": 0.069139158, + "uploadSeconds": 0.000002075, + "downloadSeconds": 0.065241092 }, { - "connectionEstablishedSeconds": 0.063969654, - "uploadSeconds": 0.000001452, - "downloadSeconds": 0.061173038 + "connectionEstablishedSeconds": 0.064710306, + "uploadSeconds": 0.000001897, + "downloadSeconds": 0.061037498 }, { - "connectionEstablishedSeconds": 0.065682563, - "uploadSeconds": 0.000001457, - "downloadSeconds": 0.064029696 + "connectionEstablishedSeconds": 0.068369429, + "uploadSeconds": 0.000002043, + "downloadSeconds": 0.06492128 }, { - "connectionEstablishedSeconds": 0.066428582, - "uploadSeconds": 0.000001784, - "downloadSeconds": 0.064669349 + "connectionEstablishedSeconds": 0.068059504, + "uploadSeconds": 0.00000186, + "downloadSeconds": 0.064188367 }, { - "connectionEstablishedSeconds": 0.066525035, - "uploadSeconds": 0.000001243, - "downloadSeconds": 0.063145027 + "connectionEstablishedSeconds": 0.066030516, + "uploadSeconds": 0.000002005, + "downloadSeconds": 0.062195243 }, { - "connectionEstablishedSeconds": 0.065422584, - "uploadSeconds": 0.000001937, - "downloadSeconds": 0.0620699 + "connectionEstablishedSeconds": 0.062159714, + "uploadSeconds": 0.000002165, + "downloadSeconds": 0.060150927 }, { - "connectionEstablishedSeconds": 0.064957658, - "uploadSeconds": 0.000001432, - "downloadSeconds": 0.06222241 + "connectionEstablishedSeconds": 0.065208248, + "uploadSeconds": 0.000002206, + "downloadSeconds": 0.063135191 }, { - "connectionEstablishedSeconds": 0.064929012, - "uploadSeconds": 0.000001333, - "downloadSeconds": 0.06220354 + "connectionEstablishedSeconds": 0.065286705, + "uploadSeconds": 0.000002558, + "downloadSeconds": 0.063171598 }, { - "connectionEstablishedSeconds": 0.066605833, - "uploadSeconds": 0.000004619, - "downloadSeconds": 0.063113142 + "connectionEstablishedSeconds": 0.068470709, + "uploadSeconds": 0.000002386, + "downloadSeconds": 0.064698216 }, { - "connectionEstablishedSeconds": 0.064138733, - "uploadSeconds": 0.000001712, - "downloadSeconds": 0.061120111 + "connectionEstablishedSeconds": 0.063230961, + "uploadSeconds": 0.000002172, + "downloadSeconds": 0.05948708 }, { - "connectionEstablishedSeconds": 0.065978274, - "uploadSeconds": 0.000001453, - "downloadSeconds": 0.064285653 + "connectionEstablishedSeconds": 0.064312679, + "uploadSeconds": 0.00000246, + "downloadSeconds": 0.06252934 }, { - "connectionEstablishedSeconds": 0.066495768, - "uploadSeconds": 0.000001338, - "downloadSeconds": 0.063000355 + "connectionEstablishedSeconds": 0.066295193, + "uploadSeconds": 0.000002329, + "downloadSeconds": 0.062686328 }, { - "connectionEstablishedSeconds": 0.066247408, - "uploadSeconds": 0.000001987, - "downloadSeconds": 0.062975317 + "connectionEstablishedSeconds": 0.065746978, + "uploadSeconds": 0.000018708, + "downloadSeconds": 0.062202181 }, { - "connectionEstablishedSeconds": 0.064640998, - "uploadSeconds": 0.000009963, - "downloadSeconds": 0.061157452 + "connectionEstablishedSeconds": 0.065714765, + "uploadSeconds": 0.000002683, + "downloadSeconds": 0.063791958 }, { - "connectionEstablishedSeconds": 0.064912154, - "uploadSeconds": 0.000001741, - "downloadSeconds": 0.062024509 + "connectionEstablishedSeconds": 0.064226408, + "uploadSeconds": 0.000002094, + "downloadSeconds": 0.062257861 }, { - "connectionEstablishedSeconds": 0.067015567, - "uploadSeconds": 0.000001696, - "downloadSeconds": 0.063370789 + "connectionEstablishedSeconds": 0.068032673, + "uploadSeconds": 0.000003414, + "downloadSeconds": 0.064262246 }, { - "connectionEstablishedSeconds": 0.064593149, - "uploadSeconds": 0.000003034, - "downloadSeconds": 0.060949617 + "connectionEstablishedSeconds": 0.067097228, + "uploadSeconds": 0.000002003, + "downloadSeconds": 0.06329759 }, { - "connectionEstablishedSeconds": 0.068341683, - "uploadSeconds": 0.000001986, - "downloadSeconds": 0.064775692 + "connectionEstablishedSeconds": 0.06625451, + "uploadSeconds": 0.000002024, + "downloadSeconds": 0.062532233 }, { - "connectionEstablishedSeconds": 0.063558677, - "uploadSeconds": 0.000002292, - "downloadSeconds": 0.061962625 + "connectionEstablishedSeconds": 0.064510297, + "uploadSeconds": 0.000002254, + "downloadSeconds": 0.063151006 }, { - "connectionEstablishedSeconds": 0.066248762, - "uploadSeconds": 0.00000159, - "downloadSeconds": 0.064512262 + "connectionEstablishedSeconds": 0.068352644, + "uploadSeconds": 0.000008445, + "downloadSeconds": 0.064571904 }, { - "connectionEstablishedSeconds": 0.064813596, - "uploadSeconds": 0.000001574, - "downloadSeconds": 0.063435802 + "connectionEstablishedSeconds": 0.066602972, + "uploadSeconds": 0.000002182, + "downloadSeconds": 0.063109213 }, { - "connectionEstablishedSeconds": 0.063439106, - "uploadSeconds": 0.000001517, - "downloadSeconds": 0.06185303 + "connectionEstablishedSeconds": 0.067583783, + "uploadSeconds": 0.000002343, + "downloadSeconds": 0.063861056 }, { - "connectionEstablishedSeconds": 0.067423597, - "uploadSeconds": 0.000001813, - "downloadSeconds": 0.064220062 + "connectionEstablishedSeconds": 0.066546478, + "uploadSeconds": 0.000002032, + "downloadSeconds": 0.064617388 }, { - "connectionEstablishedSeconds": 0.065665107, - "uploadSeconds": 0.000001413, - "downloadSeconds": 0.062930418 + "connectionEstablishedSeconds": 0.065510554, + "uploadSeconds": 0.000003316, + "downloadSeconds": 0.061889018 }, { - "connectionEstablishedSeconds": 0.063855472, - "uploadSeconds": 0.000001335, - "downloadSeconds": 0.061216854 + "connectionEstablishedSeconds": 0.064845031, + "uploadSeconds": 0.000002076, + "downloadSeconds": 0.063807569 }, { - "connectionEstablishedSeconds": 0.066595705, - "uploadSeconds": 0.000001521, - "downloadSeconds": 0.063159029 + "connectionEstablishedSeconds": 0.0688521, + "uploadSeconds": 0.000003133, + "downloadSeconds": 0.065068437 }, { - "connectionEstablishedSeconds": 0.065480116, - "uploadSeconds": 0.00000139, - "downloadSeconds": 0.06199377 + "connectionEstablishedSeconds": 0.065013793, + "uploadSeconds": 0.000002318, + "downloadSeconds": 0.061350768 }, { - "connectionEstablishedSeconds": 0.064459859, - "uploadSeconds": 0.00000168, - "downloadSeconds": 0.060965565 + "connectionEstablishedSeconds": 0.066968385, + "uploadSeconds": 0.000002255, + "downloadSeconds": 0.063070469 }, { - "connectionEstablishedSeconds": 0.064728359, - "uploadSeconds": 0.000001544, - "downloadSeconds": 0.061107766 + "connectionEstablishedSeconds": 0.067112664, + "uploadSeconds": 0.000002597, + "downloadSeconds": 0.063252006 }, { - "connectionEstablishedSeconds": 0.064439553, - "uploadSeconds": 0.000001289, - "downloadSeconds": 0.061237578 + "connectionEstablishedSeconds": 0.064987554, + "uploadSeconds": 0.000001884, + "downloadSeconds": 0.063063868 }, { - "connectionEstablishedSeconds": 0.066672895, - "uploadSeconds": 0.000001743, - "downloadSeconds": 0.063340486 + "connectionEstablishedSeconds": 0.065967073, + "uploadSeconds": 0.000001956, + "downloadSeconds": 0.062305387 }, { - "connectionEstablishedSeconds": 0.063725006, - "uploadSeconds": 0.00000136, - "downloadSeconds": 0.062190293 + "connectionEstablishedSeconds": 0.067108387, + "uploadSeconds": 0.000001894, + "downloadSeconds": 0.063445272 }, { - "connectionEstablishedSeconds": 0.066824963, - "uploadSeconds": 0.000001885, - "downloadSeconds": 0.063799326 + "connectionEstablishedSeconds": 0.06431435, + "uploadSeconds": 0.000002059, + "downloadSeconds": 0.060717924 }, { - "connectionEstablishedSeconds": 0.067548219, - "uploadSeconds": 0.000010823, - "downloadSeconds": 0.064073635 + "connectionEstablishedSeconds": 0.064242159, + "uploadSeconds": 0.000002072, + "downloadSeconds": 0.060499344 }, { - "connectionEstablishedSeconds": 0.06171255, - "uploadSeconds": 0.00000197, - "downloadSeconds": 0.060147052 + "connectionEstablishedSeconds": 0.066464554, + "uploadSeconds": 0.000002076, + "downloadSeconds": 0.062726048 }, { - "connectionEstablishedSeconds": 0.065509045, - "uploadSeconds": 0.000001436, - "downloadSeconds": 0.062314981 + "connectionEstablishedSeconds": 0.062476705, + "uploadSeconds": 0.000001993, + "downloadSeconds": 0.060485389 }, { - "connectionEstablishedSeconds": 0.064396241, - "uploadSeconds": 0.000001692, - "downloadSeconds": 0.061174682 + "connectionEstablishedSeconds": 0.06673264, + "uploadSeconds": 0.000001825, + "downloadSeconds": 0.063061146 }, { - "connectionEstablishedSeconds": 0.068220467, - "uploadSeconds": 0.000001645, - "downloadSeconds": 0.064929086 + "connectionEstablishedSeconds": 0.064060397, + "uploadSeconds": 0.000001966, + "downloadSeconds": 0.062155527 }, { - "connectionEstablishedSeconds": 0.067596028, - "uploadSeconds": 0.00000141, - "downloadSeconds": 0.064802475 + "connectionEstablishedSeconds": 0.066088265, + "uploadSeconds": 0.000003092, + "downloadSeconds": 0.062378945 }, { - "connectionEstablishedSeconds": 0.066586389, - "uploadSeconds": 0.000001894, - "downloadSeconds": 0.063067147 + "connectionEstablishedSeconds": 0.068514481, + "uploadSeconds": 0.000002025, + "downloadSeconds": 0.0646085 }, { - "connectionEstablishedSeconds": 0.063745895, - "uploadSeconds": 0.000001717, - "downloadSeconds": 0.060124708 + "connectionEstablishedSeconds": 0.064719319, + "uploadSeconds": 0.000001894, + "downloadSeconds": 0.061031787 }, { - "connectionEstablishedSeconds": 0.061773048, - "uploadSeconds": 0.000001567, - "downloadSeconds": 0.060148058 + "connectionEstablishedSeconds": 0.06607192, + "uploadSeconds": 0.000002233, + "downloadSeconds": 0.06412077 }, { - "connectionEstablishedSeconds": 0.063710595, - "uploadSeconds": 0.000001669, - "downloadSeconds": 0.060146027 + "connectionEstablishedSeconds": 0.067629578, + "uploadSeconds": 0.000002087, + "downloadSeconds": 0.063763949 }, { - "connectionEstablishedSeconds": 0.064994514, - "uploadSeconds": 0.000001841, - "downloadSeconds": 0.061974813 + "connectionEstablishedSeconds": 0.06230917, + "uploadSeconds": 0.000002348, + "downloadSeconds": 0.058402315 }, { - "connectionEstablishedSeconds": 0.066809761, - "uploadSeconds": 0.000001323, - "downloadSeconds": 0.064053178 + "connectionEstablishedSeconds": 0.064857756, + "uploadSeconds": 0.000002011, + "downloadSeconds": 0.061142836 }, { - "connectionEstablishedSeconds": 0.062786571, - "uploadSeconds": 0.00000137, - "downloadSeconds": 0.061228092 + "connectionEstablishedSeconds": 0.065864183, + "uploadSeconds": 0.000017621, + "downloadSeconds": 0.062186145 }, { - "connectionEstablishedSeconds": 0.067906719, - "uploadSeconds": 0.000001426, - "downloadSeconds": 0.064546662 + "connectionEstablishedSeconds": 0.06481408, + "uploadSeconds": 0.000002102, + "downloadSeconds": 0.062679584 }, { - "connectionEstablishedSeconds": 0.067564066, - "uploadSeconds": 0.000001695, - "downloadSeconds": 0.064730913 + "connectionEstablishedSeconds": 0.06828223, + "uploadSeconds": 0.000002038, + "downloadSeconds": 0.064575532 }, { - "connectionEstablishedSeconds": 0.065739467, - "uploadSeconds": 0.000001789, - "downloadSeconds": 0.064036253 + "connectionEstablishedSeconds": 0.067096999, + "uploadSeconds": 0.0000099, + "downloadSeconds": 0.063291858 }, { - "connectionEstablishedSeconds": 0.063495481, - "uploadSeconds": 0.000001853, - "downloadSeconds": 0.0600389 + "connectionEstablishedSeconds": 0.065024344, + "uploadSeconds": 0.000002007, + "downloadSeconds": 0.063014329 }, { - "connectionEstablishedSeconds": 0.065297978, - "uploadSeconds": 0.000002811, - "downloadSeconds": 0.061841368 + "connectionEstablishedSeconds": 0.064771268, + "uploadSeconds": 0.000002892, + "downloadSeconds": 0.064019739 }, { - "connectionEstablishedSeconds": 0.062515855, - "uploadSeconds": 0.000001615, - "downloadSeconds": 0.059111143 + "connectionEstablishedSeconds": 0.067307082, + "uploadSeconds": 0.000002052, + "downloadSeconds": 0.063716769 }, { - "connectionEstablishedSeconds": 0.066641327, - "uploadSeconds": 0.000001318, - "downloadSeconds": 0.063044851 + "connectionEstablishedSeconds": 0.066775409, + "uploadSeconds": 0.000002107, + "downloadSeconds": 0.063349371 }, { - "connectionEstablishedSeconds": 0.068149399, - "uploadSeconds": 0.000001895, - "downloadSeconds": 0.064876682 + "connectionEstablishedSeconds": 0.066830275, + "uploadSeconds": 0.000001923, + "downloadSeconds": 0.063185873 }, { - "connectionEstablishedSeconds": 0.068750096, - "uploadSeconds": 0.00000145, - "downloadSeconds": 0.065101856 + "connectionEstablishedSeconds": 0.06780674, + "uploadSeconds": 0.00000236, + "downloadSeconds": 0.064036164 }, { - "connectionEstablishedSeconds": 0.065012807, - "uploadSeconds": 0.000001538, - "downloadSeconds": 0.062310912 + "connectionEstablishedSeconds": 0.065967916, + "uploadSeconds": 0.000002265, + "downloadSeconds": 0.062318402 }, { - "connectionEstablishedSeconds": 0.066803006, - "uploadSeconds": 0.0000014, - "downloadSeconds": 0.063200097 + "connectionEstablishedSeconds": 0.064328056, + "uploadSeconds": 0.000002262, + "downloadSeconds": 0.062424217 }, { - "connectionEstablishedSeconds": 0.066442956, - "uploadSeconds": 0.000001954, - "downloadSeconds": 0.063076622 + "connectionEstablishedSeconds": 0.066084525, + "uploadSeconds": 0.000002192, + "downloadSeconds": 0.062286294 }, { - "connectionEstablishedSeconds": 0.065595254, - "uploadSeconds": 0.000012475, - "downloadSeconds": 0.062328551 + "connectionEstablishedSeconds": 0.06599978, + "uploadSeconds": 0.000002109, + "downloadSeconds": 0.062239371 }, { - "connectionEstablishedSeconds": 0.064841089, - "uploadSeconds": 0.000001486, - "downloadSeconds": 0.06325524 + "connectionEstablishedSeconds": 0.066048454, + "uploadSeconds": 0.000001851, + "downloadSeconds": 0.062367304 }, { - "connectionEstablishedSeconds": 0.062756433, - "uploadSeconds": 0.000003627, - "downloadSeconds": 0.061104118 + "connectionEstablishedSeconds": 0.063651651, + "uploadSeconds": 0.000001993, + "downloadSeconds": 0.061675867 }, { - "connectionEstablishedSeconds": 0.066508224, - "uploadSeconds": 0.00000183, - "downloadSeconds": 0.062804197 + "connectionEstablishedSeconds": 0.06226315, + "uploadSeconds": 0.000018316, + "downloadSeconds": 0.060474821 }, { - "connectionEstablishedSeconds": 0.067617239, - "uploadSeconds": 0.000001686, - "downloadSeconds": 0.064231672 + "connectionEstablishedSeconds": 0.066654209, + "uploadSeconds": 0.000004447, + "downloadSeconds": 0.064621304 }, { - "connectionEstablishedSeconds": 0.067346421, - "uploadSeconds": 0.000010702, - "downloadSeconds": 0.064020363 + "connectionEstablishedSeconds": 0.068243264, + "uploadSeconds": 0.000001947, + "downloadSeconds": 0.066378669 }, { - "connectionEstablishedSeconds": 0.067274596, - "uploadSeconds": 0.000001407, - "downloadSeconds": 0.064489524 + "connectionEstablishedSeconds": 0.065352793, + "uploadSeconds": 0.000002016, + "downloadSeconds": 0.061528441 }, { - "connectionEstablishedSeconds": 0.065575332, - "uploadSeconds": 0.0000019, - "downloadSeconds": 0.063819503 + "connectionEstablishedSeconds": 0.065683131, + "uploadSeconds": 0.000002917, + "downloadSeconds": 0.061882983 }, { - "connectionEstablishedSeconds": 0.065237663, - "uploadSeconds": 0.000001331, - "downloadSeconds": 0.06210594 + "connectionEstablishedSeconds": 0.066137011, + "uploadSeconds": 0.000002347, + "downloadSeconds": 0.064232968 }, { - "connectionEstablishedSeconds": 0.066305401, - "uploadSeconds": 0.000007477, - "downloadSeconds": 0.062932928 + "connectionEstablishedSeconds": 0.066276528, + "uploadSeconds": 0.000002005, + "downloadSeconds": 0.064312874 } ], "implementation": "go-libp2p", @@ -4031,106 +4031,106 @@ "pings": { "unit": "s", "results": [ - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0632, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0632, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0637, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0635, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633, - 0.0633 + 0.0599, + 0.0599, + 0.0599, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0599, + 0.0598, + 0.0598, + 0.0599, + 0.0599, + 0.0598, + 0.0599, + 0.0599, + 0.0598, + 0.0598, + 0.0599, + 0.0599, + 0.0598, + 0.0599, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0599, + 0.0599, + 0.0598, + 0.0599, + 0.0598, + 0.0599, + 0.0599, + 0.0598, + 0.0599, + 0.0599, + 0.0599, + 0.0598, + 0.0599, + 0.0598, + 0.0598, + 0.0598, + 0.0599, + 0.0599, + 0.0599, + 0.0599, + 0.0599, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0599, + 0.0598, + 0.0599, + 0.06, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0599, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0599, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0598, + 0.0603, + 0.0598, + 0.0599, + 0.0599, + 0.0598 ] }, "iperf": { @@ -4138,7 +4138,66 @@ "results": [ 3240000000, 3240000000, - 3050000000 + 3230000000, + 3240000000, + 3230000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3230000000, + 3230000000, + 3230000000, + 3230000000, + 3230000000, + 3230000000, + 3240000000, + 3250000000, + 3230000000, + 3230000000, + 3240000000, + 3230000000, + 3240000000, + 3230000000, + 3210000000, + 3190000000, + 3190000000, + 3190000000, + 3190000000, + 3220000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3230000000, + 3230000000, + 3240000000, + 3230000000, + 3230000000, + 3230000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3240000000, + 3210000000, + 3190000000, + 3190000000, + 3200000000, + 3200000000, + 3230000000, + 3230000000 ] } } \ No newline at end of file diff --git a/perf/runner/src/index.ts b/perf/runner/src/index.ts index a2d5077db..48b706903 100644 --- a/perf/runner/src/index.ts +++ b/perf/runner/src/index.ts @@ -68,25 +68,21 @@ function runPing(clientPublicIP: string, serverPublicIP: string): PingResults { }) .filter((time): time is number => time !== null); // Remove any null values and ensure that array contains only numbers - console.error(`= done`) return { unit: "s", results: times } } function runIPerf(clientPublicIP: string, serverPublicIP: string): IperfResults { console.error(`= run 60 iPerf UDP from client to server`); - console.error(`== kill any existing iPerf server`) let killCMD = `ssh -o StrictHostKeyChecking=no ec2-user@${serverPublicIP} 'kill $(cat pidfile); rm pidfile; rm server.log || true'`; const killSTDOUT = execCommand(killCMD); console.error(killSTDOUT); - console.error(`== start iPerf server`) let serverCMD = `ssh -o StrictHostKeyChecking=no ec2-user@${serverPublicIP} 'nohup iperf3 -s > server.log 2>&1 & echo \$! > pidfile '`; const serverSTDOUT = execCommand(serverCMD); console.error(serverSTDOUT); - console.error(`== run iPerf client`) - let cmd = `ssh -o StrictHostKeyChecking=no ec2-user@${clientPublicIP} 'iperf3 -c ${serverPublicIP} -u -b 25g -t 1'`; + let cmd = `ssh -o StrictHostKeyChecking=no ec2-user@${clientPublicIP} 'iperf3 -c ${serverPublicIP} -u -b 25g -t 60'`; const stdout = execSync(cmd).toString(); // Extract the bitrate from each relevant line @@ -105,7 +101,6 @@ function runIPerf(clientPublicIP: string, serverPublicIP: string): IperfResults }) .filter((bitrate): bitrate is number => bitrate !== null); // Remove any null values - console.error(`= done`) return { unit: "bit/s", results: bitrates} } @@ -129,12 +124,10 @@ function runBenchmarkAcrossVersions(args: ArgsRunBenchmarkAcrossVersions): Bench console.error(`=== Starting server ${version.implementation}/${version.id}`); - console.error(`==== kill any existing server`) let killCMD = `ssh -o StrictHostKeyChecking=no ec2-user@${args.serverPublicIP} 'kill $(cat pidfile); rm pidfile; rm server.log || true'`; const killSTDOUT = execCommand(killCMD); console.error(killSTDOUT); - console.error(`==== start server`) let serverCMD = `ssh -o StrictHostKeyChecking=no ec2-user@${args.serverPublicIP} 'nohup ./impl/${version.implementation}/${version.id}/perf --run-server --server-address 0.0.0.0:4001 --secret-key-seed 0 > server.log 2>&1 & echo \$! > pidfile '`; const serverSTDOUT = execCommand(serverCMD); console.error(serverSTDOUT); From 12ba150719d45433a2274ea923e1c1f688e19960 Mon Sep 17 00:00:00 2001 From: galargh Date: Thu, 25 May 2023 14:52:21 +0200 Subject: [PATCH 14/41] fix: s3 upload, workflow instructions and timeout defaults --- .github/workflows/perf.yml | 48 +++++++++++++++++++---------- perf/terraform/common/scale-down.tf | 4 +-- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 350088a3a..8e8d4db09 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -1,13 +1,31 @@ name: libp2p perf test +# How to configure a repository for running this workflow: +# 1. Run 'make ssh-keygen' in 'perf' to generate a new SSH key pair named 'user' in 'perf/terraform/region/files' +# 2. Export AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY for the account of your choice +# 3. Run 'terraform apply' in 'perf/terraform' to create the AWS resources +# 4. Run 'terraform output' in 'perf/terraform' to get the bucket name +# 5. Go to https://console.aws.amazon.com/iamv2/home?#/users/details/perf?section=security_credentials +# 6. Click 'Create access key' to get the access key ID and secret access key +# 7. Go to https://github.com/libp2p/test-plans/settings/secrets/actions +# 8. Click 'New repository secret', set the name to 'PERF_AWS_SECRET_ACCESS_KEY', and paste the secret access key from step 6 +# 9. Click 'New repository secret', set the name to 'PERF_SSH_PRIVATE_KEY', and paste the private key from step 1 +# 10. Go to https://github.com/libp2p/test-plans/settings/variables/actions +# 11. Click 'New repository variable', set the name to 'PERF_AWS_ACCESS_KEY_ID', and paste the access key ID from step 6 +# 12. Click 'New repository variable', set the name to 'PERF_AWS_BUCKET', and paste the bucket name from step 4 + on: workflow_dispatch: - # Requires: - # - vars.PERF_AWS_ACCESS_KEY_ID to be set to the AWS access key ID of 'aws_iam_user.perf' - # - secrets.PERF_AWS_SECRET_ACCESS_KEY to be set to the AWS secret access key of 'aws_iam_user.perf' - # - vars.PERF_AWS_BUCKET to be set to the AWS bucket as output by 'output.bucket_name' - # - secrets.PERF_SSH_PRIVATE_KEY to be set to the SSH private key for 'aws_key_pair.perf' workflow_call: + # Example: + # uses: libp2p/test-plans/.github/workflows/perf.yml@master + # with: + # aws-access-key-id: ${{ vars.PERF_AWS_ACCESS_KEY_ID }} + # aws-bucket: ${{ vars.PERF_AWS_BUCKET }} + # ref: master + # secrets: + # PERF_AWS_SECRET_ACCESS_KEY: ${{ secrets.PERF_AWS_SECRET_ACCESS_KEY }} + # PERF_SSH_PRIVATE_KEY: ${{ secrets.PERF_SSH_PRIVATE_KEY }} inputs: aws-access-key-id: type: string @@ -17,11 +35,6 @@ on: type: string required: true description: The AWS bucket as output by 'output.bucket_name' - runs-on: - type: string - required: false - description: The runs-on value to use for the perf job (defaults to 'ubuntu-latest') - default: ubuntu-latest ref: type: string required: false @@ -36,13 +49,14 @@ on: jobs: perf: name: Perf - runs-on: ${{ github.event.inputs.runs-on || 'ubuntu-latest' }} + runs-on: ubuntu-latest + timeout-minutes: 40 defaults: run: shell: bash working-directory: perf env: - AWS_ACCESS_KEY_ID: ${{ github.event.inputs.aws-access-key-id || vars.PERF_AWS_ACCESS_KEY_ID }} + AWS_ACCESS_KEY_ID: ${{ inputs.aws-access-key-id || vars.PERF_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.PERF_AWS_SECRET_ACCESS_KEY }} steps: - name: Configure SSH @@ -53,7 +67,7 @@ jobs: uses: actions/checkout@v3 with: repository: galorgh/test-plans - ref: ${{ github.event.inputs.ref || github.ref }} + ref: ${{ inputs.ref || github.ref }} - id: server name: Provision server run: echo "id=$(make provision-server | tail -n 1)" >> $GITHUB_OUTPUT @@ -86,11 +100,11 @@ jobs: - id: s3 name: Upload results env: - AWS_BUCKET: ${{ github.event.inputs.aws-bucket || vars.PERF_AWS_BUCKET }} - PATH: ${{ github.repository }}/${{ github.run_id }}/${{ github.run_attempt }}/benchmark-results.json + AWS_BUCKET: ${{ inputs.aws-bucket || vars.PERF_AWS_BUCKET }} + AWS_BUCKET_PATH: ${{ github.repository }}/${{ github.run_id }}/${{ github.run_attempt }}/benchmark-results.json run: | - aws s3 cp benchmark-results.json s3://$AWS_BUCKET/$PATH --acl public-read - echo "url=https://$AWS_BUCKET.s3.amazonaws.com/$PATH" >> $GITHUB_OUTPUT + aws s3 cp benchmark-results.json s3://$AWS_BUCKET/$AWS_BUCKET_PATH --acl public-read --region us-west-2 + echo "url=https://$AWS_BUCKET.s3.amazonaws.com/$AWS_BUCKET_PATH" >> $GITHUB_OUTPUT working-directory: perf/runner - name: Set summary env: diff --git a/perf/terraform/common/scale-down.tf b/perf/terraform/common/scale-down.tf index f9eeae608..6044876d0 100644 --- a/perf/terraform/common/scale-down.tf +++ b/perf/terraform/common/scale-down.tf @@ -23,7 +23,7 @@ resource "aws_lambda_function" "scale_down" { variables = { REGIONS = jsonencode(local.regions) TAGS = jsonencode(local.tags) - MAX_AGE_MINUTES = 90 + MAX_AGE_MINUTES = 50 } } } @@ -35,7 +35,7 @@ resource "aws_cloudwatch_log_group" "scale_down" { resource "aws_cloudwatch_event_rule" "scale_down" { name = "perf-scale-down-rule" - schedule_expression = "cron(0 * * * ? *)" + schedule_expression = "cron(37 * * * ? *)" # 00:37, 01:37, 02:37, ..., 23:37 } resource "aws_cloudwatch_event_target" "scale_down" { From f5a25258021b36a1851f1c9719b54395a9733ba2 Mon Sep 17 00:00:00 2001 From: galargh Date: Thu, 25 May 2023 15:45:17 +0200 Subject: [PATCH 15/41] Revert "debug: use galorgh/test-plans" This reverts commit 516d7082f83c31c9a42b5714a19bd0979e299a03. --- .github/workflows/perf.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 8e8d4db09..0b3ededd1 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -66,7 +66,7 @@ jobs: - name: Checkout test-plans uses: actions/checkout@v3 with: - repository: galorgh/test-plans + repository: libp2p/test-plans ref: ${{ inputs.ref || github.ref }} - id: server name: Provision server From 1370d33a15a2610c13060142d035e3da6abf2447 Mon Sep 17 00:00:00 2001 From: galargh Date: Fri, 26 May 2023 08:39:05 +0200 Subject: [PATCH 16/41] chore: replace s3 bucket with direct push to github --- .github/workflows/perf.yml | 69 +++++++-------------------- perf/terraform/common/main.tf | 90 ----------------------------------- perf/terraform/region/main.tf | 4 -- perf/terraform/terraform.tf | 9 ---- 4 files changed, 17 insertions(+), 155 deletions(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 0b3ededd1..3ddc47b80 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -4,47 +4,16 @@ name: libp2p perf test # 1. Run 'make ssh-keygen' in 'perf' to generate a new SSH key pair named 'user' in 'perf/terraform/region/files' # 2. Export AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY for the account of your choice # 3. Run 'terraform apply' in 'perf/terraform' to create the AWS resources -# 4. Run 'terraform output' in 'perf/terraform' to get the bucket name -# 5. Go to https://console.aws.amazon.com/iamv2/home?#/users/details/perf?section=security_credentials -# 6. Click 'Create access key' to get the access key ID and secret access key -# 7. Go to https://github.com/libp2p/test-plans/settings/secrets/actions -# 8. Click 'New repository secret', set the name to 'PERF_AWS_SECRET_ACCESS_KEY', and paste the secret access key from step 6 -# 9. Click 'New repository secret', set the name to 'PERF_SSH_PRIVATE_KEY', and paste the private key from step 1 -# 10. Go to https://github.com/libp2p/test-plans/settings/variables/actions -# 11. Click 'New repository variable', set the name to 'PERF_AWS_ACCESS_KEY_ID', and paste the access key ID from step 6 -# 12. Click 'New repository variable', set the name to 'PERF_AWS_BUCKET', and paste the bucket name from step 4 +# 4. Go to https://console.aws.amazon.com/iamv2/home?#/users/details/perf?section=security_credentials +# 5. Click 'Create access key' to get the access key ID and secret access key +# 6. Go to https://github.com/libp2p/test-plans/settings/secrets/actions +# 7. Click 'New repository secret', set the name to 'PERF_AWS_SECRET_ACCESS_KEY', and paste the secret access key from step 6 +# 8. Click 'New repository secret', set the name to 'PERF_SSH_PRIVATE_KEY', and paste the private key from step 1 +# 9. Go to https://github.com/libp2p/test-plans/settings/variables/actions +# 10. Click 'New repository variable', set the name to 'PERF_AWS_ACCESS_KEY_ID', and paste the access key ID from step 6 on: workflow_dispatch: - workflow_call: - # Example: - # uses: libp2p/test-plans/.github/workflows/perf.yml@master - # with: - # aws-access-key-id: ${{ vars.PERF_AWS_ACCESS_KEY_ID }} - # aws-bucket: ${{ vars.PERF_AWS_BUCKET }} - # ref: master - # secrets: - # PERF_AWS_SECRET_ACCESS_KEY: ${{ secrets.PERF_AWS_SECRET_ACCESS_KEY }} - # PERF_SSH_PRIVATE_KEY: ${{ secrets.PERF_SSH_PRIVATE_KEY }} - inputs: - aws-access-key-id: - type: string - required: true - description: The AWS access key ID of 'aws_iam_user.perf' - aws-bucket: - type: string - required: true - description: The AWS bucket as output by 'output.bucket_name' - ref: - type: string - required: false - description: The ref of the test-plans repo to use (defaults to 'master') - default: master - secrets: - PERF_AWS_SECRET_ACCESS_KEY: # The AWS secret access key of 'aws_iam_user.perf' - required: true - PERF_SSH_PRIVATE_KEY: # The SSH private key for 'aws_key_pair.perf' - required: true jobs: perf: @@ -56,18 +25,22 @@ jobs: shell: bash working-directory: perf env: - AWS_ACCESS_KEY_ID: ${{ inputs.aws-access-key-id || vars.PERF_AWS_ACCESS_KEY_ID }} + AWS_ACCESS_KEY_ID: ${{ vars.PERF_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.PERF_AWS_SECRET_ACCESS_KEY }} steps: - name: Configure SSH uses: webfactory/ssh-agent@d4b9b8ff72958532804b70bbe600ad43b36d5f2e # v0.8.0 with: ssh-private-key: ${{ secrets.PERF_SSH_PRIVATE_KEY }} + - name: Configure git + run: | + git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com>" + git config --global user.name "${GITHUB_ACTOR}" - name: Checkout test-plans uses: actions/checkout@v3 with: repository: libp2p/test-plans - ref: ${{ inputs.ref || github.ref }} + ref: ${{ github.ref }} - id: server name: Provision server run: echo "id=$(make provision-server | tail -n 1)" >> $GITHUB_OUTPUT @@ -97,19 +70,11 @@ jobs: with: name: results path: perf/runner/benchmark-results.json - - id: s3 - name: Upload results - env: - AWS_BUCKET: ${{ inputs.aws-bucket || vars.PERF_AWS_BUCKET }} - AWS_BUCKET_PATH: ${{ github.repository }}/${{ github.run_id }}/${{ github.run_attempt }}/benchmark-results.json + - name: Push run: | - aws s3 cp benchmark-results.json s3://$AWS_BUCKET/$AWS_BUCKET_PATH --acl public-read --region us-west-2 - echo "url=https://$AWS_BUCKET.s3.amazonaws.com/$AWS_BUCKET_PATH" >> $GITHUB_OUTPUT - working-directory: perf/runner - - name: Set summary - env: - URL: ${{ steps.s3.outputs.url }} - run: echo "$URL" >> $GITHUB_STEP_SUMMARY + git add perf/runner/benchmark-results.json + git commit -m "perf: update benchmark results" + git push - name: Deprovision client if: always() && steps.client.outputs.id != '' env: diff --git a/perf/terraform/common/main.tf b/perf/terraform/common/main.tf index ceddadc1f..2a80d81a9 100644 --- a/perf/terraform/common/main.tf +++ b/perf/terraform/common/main.tf @@ -8,11 +8,6 @@ variable "common_tags" { description = "Common tags to apply to all resources" } -variable "bucket_name" { - type = string - description = "The name of the S3 bucket to create" -} - provider "aws" { region = var.region @@ -31,11 +26,6 @@ data "aws_iam_policy_document" "perf" { resources = ["*"] effect = "Allow" } - statement { - actions = ["iam:PassRole"] - resources = [aws_iam_role.perf_role.arn] - effect = "Allow" - } } resource "aws_iam_user_policy" "perf" { @@ -44,83 +34,3 @@ resource "aws_iam_user_policy" "perf" { policy = data.aws_iam_policy_document.perf.json } - -resource "aws_s3_bucket" "perf" { - bucket = var.bucket_name -} - -resource "aws_s3_bucket_ownership_controls" "perf" { - bucket = aws_s3_bucket.perf.id - rule { - object_ownership = "ObjectWriter" - } -} - -resource "aws_s3_bucket_acl" "perf" { - depends_on = [aws_s3_bucket_ownership_controls.perf] - - bucket = aws_s3_bucket.perf.id - acl = "private" -} - -resource "aws_s3_bucket_public_access_block" "perf" { - bucket = aws_s3_bucket.perf.id - - block_public_acls = false - block_public_policy = false - ignore_public_acls = false - restrict_public_buckets = false -} - - -data "aws_iam_policy_document" "perf_assume_role" { - statement { - sid = "" - effect = "Allow" - principals { - type = "Service" - identifiers = ["ec2.amazonaws.com"] - } - actions = ["sts:AssumeRole"] - } -} - -resource "aws_iam_role" "perf_role" { - name = "perf-node-role" - assume_role_policy = data.aws_iam_policy_document.perf_assume_role.json -} - -resource "aws_iam_instance_profile" "perf_profile" { - name = "perf-node-profile" - role = aws_iam_role.perf_role.name -} - -data "aws_iam_policy_document" "perf_bucket" { - statement { - actions = ["s3:GetObject", "s3:GetObjectAcl", "s3:PutObject", "s3:PutObjectAcl"] - resources = ["${aws_s3_bucket.perf.arn}/*"] - effect = "Allow" - } - statement { - actions = ["s3:ListBucket"] - resources = ["${aws_s3_bucket.perf.arn}"] - effect = "Allow" - } -} - -resource "aws_iam_role_policy" "perf_bucket" { - name = "perf-bucket-policy" - role = aws_iam_role.perf_role.name - policy = data.aws_iam_policy_document.perf_bucket.json -} - -output "bucket_name" { - value = aws_s3_bucket.perf.bucket -} - -resource "aws_iam_user_policy" "perf_bucket" { - name = "perf-bucket" - user = aws_iam_user.perf.name - - policy = data.aws_iam_policy_document.perf_bucket.json -} diff --git a/perf/terraform/region/main.tf b/perf/terraform/region/main.tf index 14ebf8663..c74320cd4 100644 --- a/perf/terraform/region/main.tf +++ b/perf/terraform/region/main.tf @@ -138,10 +138,6 @@ resource "aws_launch_template" "perf" { instance_initiated_shutdown_behavior = "terminate" - iam_instance_profile { - name = "perf-node-profile" - } - network_interfaces { subnet_id = aws_subnet.perf.id security_groups = [aws_security_group.restricted_inbound.id] diff --git a/perf/terraform/terraform.tf b/perf/terraform/terraform.tf index c3b20e500..411077fcc 100644 --- a/perf/terraform/terraform.tf +++ b/perf/terraform/terraform.tf @@ -13,16 +13,11 @@ locals { } } -resource "random_id" "bucket_id" { - byte_length = 4 -} - module "common" { source = "./common" region = "us-west-2" common_tags = local.tags - bucket_name = "perf-test-bucket-${random_id.bucket_id.hex}" } module "server_region" { @@ -40,7 +35,3 @@ module "client_region" { common_tags = local.tags } - -output "bucket_name" { - value = module.common.bucket_name -} From 833f994f97378a7e09688b7a309a352ab7f1764b Mon Sep 17 00:00:00 2001 From: galargh Date: Fri, 26 May 2023 09:32:54 +0200 Subject: [PATCH 17/41] feat: replace provisioning with makefile with tf --- .github/workflows/perf.yml | 48 +++++++++---------- perf/Makefile | 21 --------- perf/README.md | 28 +---------- perf/terraform/common/files/scale_down.sh | 7 +++ perf/terraform/ephemeral/main.tf | 20 ++++++++ perf/terraform/terraform.tf | 57 +++++++++++++++++++---- 6 files changed, 101 insertions(+), 80 deletions(-) create mode 100755 perf/terraform/common/files/scale_down.sh create mode 100644 perf/terraform/ephemeral/main.tf diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 3ddc47b80..4389a866a 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -27,6 +27,11 @@ jobs: env: AWS_ACCESS_KEY_ID: ${{ vars.PERF_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.PERF_AWS_SECRET_ACCESS_KEY }} + TF_IN_AUTOMATION: 1 + TF_INPUT: 0 + TF_VAR_common_enabled: false + TF_VAR_region_enabled: false + TF_VAR_ephemeral_enabled: true steps: - name: Configure SSH uses: webfactory/ssh-agent@d4b9b8ff72958532804b70bbe600ad43b36d5f2e # v0.8.0 @@ -36,33 +41,32 @@ jobs: run: | git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com>" git config --global user.name "${GITHUB_ACTOR}" + - name: Configure terraform + uses: hashicorp/setup-terraform@633666f66e0061ca3b725c73b2ec20cd13a8fdd1 # v2.0.3 - name: Checkout test-plans uses: actions/checkout@v3 with: repository: libp2p/test-plans ref: ${{ github.ref }} + - name: Init terraform + run: terraform init + working-directory: perf/terraform + - name: Apply terraform + run: terraform apply -auto-approve + working-directory: perf/terraform - id: server - name: Provision server - run: echo "id=$(make provision-server | tail -n 1)" >> $GITHUB_OUTPUT + name: Retrieve server's IP + run: echo "ip=$(terraform output -raw server_ip)" - id: client - name: Provision client - run: echo "id=$(make provision-client | tail -n 1)" >> $GITHUB_OUTPUT - - id: ip - name: Wait for client/server IP - env: - SERVER_ID: ${{ steps.server.outputs.id }} - CLIENT_ID: ${{ steps.client.outputs.id }} - run: | - read SERVER_IP CLIENT_IP <<< $(make wait SERVER_ID=$SERVER_ID CLIENT_ID=$CLIENT_ID | tail -n 1) - echo "server=$SERVER_IP" >> $GITHUB_OUTPUT - echo "client=$CLIENT_IP" >> $GITHUB_OUTPUT + name: Retrieve client's IP + run: echo "ip=$(terraform output -raw client_ip)" - name: Download dependencies run: npm ci working-directory: perf/runner - name: Run tests env: - SERVER_IP: ${{ steps.ip.outputs.server }} - CLIENT_IP: ${{ steps.ip.outputs.client }} + SERVER_IP: ${{ steps.server.outputs.ip }} + CLIENT_IP: ${{ steps.client.outputs.ip }} run: npm run start -- --client-public-ip $CLIENT_IP --server-public-ip $SERVER_IP working-directory: perf/runner - name: Archive results @@ -75,13 +79,7 @@ jobs: git add perf/runner/benchmark-results.json git commit -m "perf: update benchmark results" git push - - name: Deprovision client - if: always() && steps.client.outputs.id != '' - env: - CLIENT_ID: ${{ steps.client.outputs.id }} - run: make deprovision-client CLIENT_ID=$CLIENT_ID - - name: Deprovision server - if: always() && steps.server.outputs.id != '' - env: - SERVER_ID: ${{ steps.server.outputs.id }} - run: make deprovision-server SERVER_ID=$SERVER_ID + - name: Destroy terraform + if: always() + run: terraform destroy -auto-approve + working-directory: perf/terraform diff --git a/perf/Makefile b/perf/Makefile index 999510748..780f8cab5 100644 --- a/perf/Makefile +++ b/perf/Makefile @@ -3,24 +3,3 @@ ssh-keygen: ssh-add: ssh-add ./terraform/region/files/user - -provision-server: - aws ec2 run-instances --region=us-west-2 --launch-template LaunchTemplateName=perf-node --count 1 --query 'Instances[0].InstanceId' --output text - -provision-client: - aws ec2 run-instances --region=us-east-1 --launch-template LaunchTemplateName=perf-node --count 1 --query 'Instances[0].InstanceId' --output text - -wait: - aws ec2 wait instance-running --region us-west-2 --instance-ids "$(SERVER_ID)" - aws ec2 wait instance-running --region us-east-1 --instance-ids "$(CLIENT_ID)" - echo "$$(aws ec2 describe-instances --region us-west-2 --instance-ids "$(SERVER_ID)" --query 'Reservations[0].Instances[0].PublicIpAddress' --output text)" "$$(aws ec2 describe-instances --region us-east-1 --instance-ids "$(CLIENT_ID)" --query 'Reservations[0].Instances[0].PublicIpAddress' --output text)" - -deprovision-server: - aws ec2 terminate-instances --region=us-west-2 --instance-ids "$(SERVER_ID)" - -deprovision-client: - aws ec2 terminate-instances --region=us-east-1 --instance-ids "$(CLIENT_ID)" - -# https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html -scale-down: - sam local invoke ScaleDown --template terraform/common/files/scale_down.yml --event terraform/common/files/scale_down.json diff --git a/perf/README.md b/perf/README.md index 234a828be..ab1b71504 100644 --- a/perf/README.md +++ b/perf/README.md @@ -16,25 +16,8 @@ Benchmark results can be visualized with https://observablehq.com/@mxinden-works 2. `cd terraform` 3. `terraform init` 4. `terraform apply` - -#### [OPTIONAL] Limited AWS credentials - -If you want to limit the AWS credentials used by subsequent steps, you can create Access Keys for the `perf` user that terraform created. - -1. Go to https://console.aws.amazon.com/iamv2/home?#/users/details/perf?section=security_credentials -2. Create access key -3. Download `perf_accessKeys.csv` -4. Configure AWS CLI to use the credentials. For example: -```bash -export AWS_ACCESS_KEY_ID=$(cat perf_accessKeys.csv | tail -n 1 | cut -d, -f1) -export AWS_SECRET_ACCESS_KEY=$(cat perf_accessKeys.csv | tail -n 1 | cut -d, -f2) -``` - -### Nodes - -1. `SERVER_ID=$(make provision-server | tail -n 1)` -2. `CLIENT_ID=$(make provision-client | tail -n 1)` -3. `read SERVER_IP CLIENT_IP <<< $(make wait SERVER_ID=$SERVER_ID CLIENT_ID=$CLIENT_ID | tail -n 1)` +5. `CLIENT_IP=$(terraform output -raw client_ip)` +6. `SERVER_IP=$(terraform output -raw server_ip)` ## Build and run implementations @@ -46,13 +29,6 @@ _WARNING_: Running the perf tests might take a while. ## Deprovision infrastructure -### Nodes - -1. `make deprovision-client CLIENT_ID=$CLIENT_ID` -2. `make deprovision-server SERVER_ID=$SERVER_ID ` - -### Bootstrap - 1. `cd terraform` 2. `terraform destroy` diff --git a/perf/terraform/common/files/scale_down.sh b/perf/terraform/common/files/scale_down.sh new file mode 100755 index 000000000..09c9d36c0 --- /dev/null +++ b/perf/terraform/common/files/scale_down.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +# This script can be used to test the scale down lambda. +# It requires the AWS CLI and SAM CLI to be installed. +# You can get SAM CLI at https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html + +sam local invoke ScaleDown --template scale_down.yml --event scale_down.json diff --git a/perf/terraform/ephemeral/main.tf b/perf/terraform/ephemeral/main.tf new file mode 100644 index 000000000..704d4accf --- /dev/null +++ b/perf/terraform/ephemeral/main.tf @@ -0,0 +1,20 @@ +variable "region" { + description = "The AWS region to create resources in" +} + +variable "common_tags" { + type = map(string) + description = "Common tags to apply to all resources" +} + +provider "aws" { + region = var.region + + default_tags { + tags = var.common_tags + } +} + +resource "aws_instance" "perf" { + launch_template = "perf-node" +} diff --git a/perf/terraform/terraform.tf b/perf/terraform/terraform.tf index 411077fcc..a6d264142 100644 --- a/perf/terraform/terraform.tf +++ b/perf/terraform/terraform.tf @@ -13,25 +13,66 @@ locals { } } +variable "common_enabled" { + type = bool + description = "Whether or not to create common resources" + default = false +} + +variable "region_enabled" { + type = bool + description = "Whether or not to create regional resources" + default = true +} + +variable "ephemeral_enabled" { + type = bool + description = "Whether or not to create ephemeral resources" + default = true +} + module "common" { + for_each = [var.common_enabled ? [] : [ + { + region = "us-west-2" + } + ]] + source = "./common" - region = "us-west-2" + region = each.value.region common_tags = local.tags } -module "server_region" { +module "region" { + for_each = [var.region_enabled ? [] : [ + { + region = "us-west-2", + ami = "ami-0747e613a2a1ff483" + }, { + region = "us-east-1", + ami = "ami-06e46074ae430fba6" + } + ]] + source = "./region" - region = "us-west-2" - ami = "ami-0747e613a2a1ff483" + region = each.value.region + ami = each.value.ami common_tags = local.tags } -module "client_region" { - source = "./region" - region = "us-east-1" - ami = "ami-06e46074ae430fba6" +module "ephemeral" { + for_each = [var.ephemeral_enabled ? [] : [ + { + region = "us-west-2" + }, { + region = "us-east-1" + } + ]] + + source = "./ephemeral" + region = each.value.region common_tags = local.tags } From 967f2af26696ee53aad82593685f0f1c5694c609 Mon Sep 17 00:00:00 2001 From: galargh Date: Fri, 26 May 2023 09:52:51 +0200 Subject: [PATCH 18/41] feat: create tf config for remote state --- .github/workflows/perf.yml | 8 +++--- perf/terraform/region/main.tf | 4 +++ perf/terraform/remote/terraform.tf | 1 + perf/terraform/remote/terraform_override.tf | 29 +++++++++++++++++++++ perf/terraform/terraform.tf | 7 ++--- 5 files changed, 42 insertions(+), 7 deletions(-) create mode 120000 perf/terraform/remote/terraform.tf create mode 100644 perf/terraform/remote/terraform_override.tf diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 4389a866a..e77739f69 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -2,15 +2,15 @@ name: libp2p perf test # How to configure a repository for running this workflow: # 1. Run 'make ssh-keygen' in 'perf' to generate a new SSH key pair named 'user' in 'perf/terraform/region/files' -# 2. Export AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY for the account of your choice -# 3. Run 'terraform apply' in 'perf/terraform' to create the AWS resources +# 2. Configure auth for the AWS provider as per https://registry.terraform.io/providers/hashicorp/aws/latest/docs#authentication-and-configuration +# 3. Run 'terraform init' and 'terraform apply' in 'perf/terraform/remote' to create the long-lived AWS resources # 4. Go to https://console.aws.amazon.com/iamv2/home?#/users/details/perf?section=security_credentials # 5. Click 'Create access key' to get the access key ID and secret access key # 6. Go to https://github.com/libp2p/test-plans/settings/secrets/actions -# 7. Click 'New repository secret', set the name to 'PERF_AWS_SECRET_ACCESS_KEY', and paste the secret access key from step 6 +# 7. Click 'New repository secret', set the name to 'PERF_AWS_SECRET_ACCESS_KEY', and paste the secret access key from step 5 # 8. Click 'New repository secret', set the name to 'PERF_SSH_PRIVATE_KEY', and paste the private key from step 1 # 9. Go to https://github.com/libp2p/test-plans/settings/variables/actions -# 10. Click 'New repository variable', set the name to 'PERF_AWS_ACCESS_KEY_ID', and paste the access key ID from step 6 +# 10. Click 'New repository variable', set the name to 'PERF_AWS_ACCESS_KEY_ID', and paste the access key ID from step 5 on: workflow_dispatch: diff --git a/perf/terraform/region/main.tf b/perf/terraform/region/main.tf index c74320cd4..d505857a9 100644 --- a/perf/terraform/region/main.tf +++ b/perf/terraform/region/main.tf @@ -111,6 +111,10 @@ resource "aws_security_group" "restricted_inbound" { }) } +# If one wanted to make the key pair ephemeral, these would be the steps: +# 1. Move this resource to `perf/terraform/ephemeral/main.tf` +# 2. Add `make ssh-keygen` run step to `.github/workflows/perf.yml` +# 3. Add `aws_key_pair` cleanup to `perf/terraform/common/files/scale_down.py` resource "aws_key_pair" "perf" { key_name = "user-public-key" public_key = file("${path.module}/files/user.pub") diff --git a/perf/terraform/remote/terraform.tf b/perf/terraform/remote/terraform.tf new file mode 120000 index 000000000..fdbf0eba0 --- /dev/null +++ b/perf/terraform/remote/terraform.tf @@ -0,0 +1 @@ +../terraform.tf \ No newline at end of file diff --git a/perf/terraform/remote/terraform_override.tf b/perf/terraform/remote/terraform_override.tf new file mode 100644 index 000000000..a0cf8f1bc --- /dev/null +++ b/perf/terraform/remote/terraform_override.tf @@ -0,0 +1,29 @@ +terraform { + backend "s3" { + bucket = "terraform-tfstate" + key = "github.com/libp2p/test-plans/perf/terraform/remote/terraform.tfstate" + region = "us-west-2" + } +} + +locals { + root = ".." +} + +variable "common_enabled" { + type = bool + description = "Whether or not to create common resources" + default = true +} + +variable "region_enabled" { + type = bool + description = "Whether or not to create regional resources" + default = true +} + +variable "ephemeral_enabled" { + type = bool + description = "Whether or not to create ephemeral resources" + default = false +} diff --git a/perf/terraform/terraform.tf b/perf/terraform/terraform.tf index a6d264142..f6b056eef 100644 --- a/perf/terraform/terraform.tf +++ b/perf/terraform/terraform.tf @@ -11,6 +11,7 @@ locals { tags = { Project = "perf" } + root = "." } variable "common_enabled" { @@ -38,7 +39,7 @@ module "common" { } ]] - source = "./common" + source = "${local.root}/common" region = each.value.region common_tags = local.tags @@ -55,7 +56,7 @@ module "region" { } ]] - source = "./region" + source = "${local.root}/region" region = each.value.region ami = each.value.ami @@ -71,7 +72,7 @@ module "ephemeral" { } ]] - source = "./ephemeral" + source = "${local.root}/ephemeral" region = each.value.region common_tags = local.tags From 42f7020b24024ff6c943e093108f8807621d725e Mon Sep 17 00:00:00 2001 From: galargh Date: Fri, 26 May 2023 11:08:59 +0200 Subject: [PATCH 19/41] chore: update instructions on how to switch to ephemeral ssh keys --- perf/terraform/region/main.tf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/perf/terraform/region/main.tf b/perf/terraform/region/main.tf index d505857a9..267859542 100644 --- a/perf/terraform/region/main.tf +++ b/perf/terraform/region/main.tf @@ -115,6 +115,8 @@ resource "aws_security_group" "restricted_inbound" { # 1. Move this resource to `perf/terraform/ephemeral/main.tf` # 2. Add `make ssh-keygen` run step to `.github/workflows/perf.yml` # 3. Add `aws_key_pair` cleanup to `perf/terraform/common/files/scale_down.py` +# 4. Allow `aws_iam_user.perf` from `perf/terraform/common/main.tf` to create/delete/update key pairs +# 5. Allow `aws_iam_role.scale_down` from `perf/terraform/common/scale_down.tf` to delete key pairs resource "aws_key_pair" "perf" { key_name = "user-public-key" public_key = file("${path.module}/files/user.pub") From c6857bb3f928fab7b5dada2acc63bf2019f4419b Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 09:02:54 +0200 Subject: [PATCH 20/41] chore: rename scale down to cleanup --- perf/terraform/common/cleanup.tf | 112 ++++++++++++++++++ perf/terraform/common/files/.gitignore | 2 +- .../files/{scale_down.json => cleanup.json} | 0 .../files/{scale_down.py => cleanup.py} | 0 .../files/{scale_down.sh => cleanup.sh} | 4 +- .../files/{scale_down.yml => cleanup.yml} | 4 +- perf/terraform/common/scale-down.tf | 112 ------------------ perf/terraform/region/main.tf | 4 +- 8 files changed, 119 insertions(+), 119 deletions(-) create mode 100644 perf/terraform/common/cleanup.tf rename perf/terraform/common/files/{scale_down.json => cleanup.json} (100%) rename perf/terraform/common/files/{scale_down.py => cleanup.py} (100%) rename perf/terraform/common/files/{scale_down.sh => cleanup.sh} (61%) rename perf/terraform/common/files/{scale_down.yml => cleanup.yml} (89%) delete mode 100644 perf/terraform/common/scale-down.tf diff --git a/perf/terraform/common/cleanup.tf b/perf/terraform/common/cleanup.tf new file mode 100644 index 000000000..7436b8db6 --- /dev/null +++ b/perf/terraform/common/cleanup.tf @@ -0,0 +1,112 @@ +locals { + regions = ["us-east-1", "us-west-2"] + tags = merge(var.common_tags, { "Name" = "node" }) +} + +data "archive_file" "cleanup" { + type = "zip" + source_file = "${path.module}/files/cleanup.py" + output_path = "${path.module}/files/cleanup.zip" +} + +resource "aws_lambda_function" "cleanup" { + filename = data.archive_file.cleanup.output_path + source_code_hash = data.archive_file.cleanup.output_base64sha256 + function_name = "perf-cleanup" + role = aws_iam_role.cleanup.arn + handler = "cleanup.lambda_handler" + runtime = "python3.9" + memory_size = 128 + timeout = 30 + + environment { + variables = { + REGIONS = jsonencode(local.regions) + TAGS = jsonencode(local.tags) + MAX_AGE_MINUTES = 50 + } + } +} + +resource "aws_cloudwatch_log_group" "cleanup" { + name = "/aws/lambda/${aws_lambda_function.cleanup.function_name}" + retention_in_days = 7 +} + +resource "aws_cloudwatch_event_rule" "cleanup" { + name = "perf-cleanup-rule" + schedule_expression = "cron(37 * * * ? *)" # 00:37, 01:37, 02:37, ..., 23:37 +} + +resource "aws_cloudwatch_event_target" "cleanup" { + rule = aws_cloudwatch_event_rule.cleanup.name + arn = aws_lambda_function.cleanup.arn +} + +resource "aws_lambda_permission" "cleanup" { + statement_id = "AllowExecutionFromCloudWatch" + action = "lambda:InvokeFunction" + function_name = aws_lambda_function.cleanup.function_name + principal = "events.amazonaws.com" + source_arn = aws_cloudwatch_event_rule.cleanup.arn +} + +data "aws_iam_policy_document" "cleanup_assume_role" { + statement { + actions = ["sts:AssumeRole"] + + principals { + type = "Service" + identifiers = ["lambda.amazonaws.com"] + } + } +} + +resource "aws_iam_role" "cleanup" { + name = "perf-cleanup-lambda-role" + assume_role_policy = data.aws_iam_policy_document.cleanup_assume_role.json +} + +data "aws_iam_policy_document" "cleanup" { + statement { + actions = ["ec2:DescribeInstances", "ec2:DescribeTags"] + resources = ["*"] + effect = "Allow" + } + + statement { + actions = ["ec2:TerminateInstances"] + resources = ["*"] + effect = "Allow" + + dynamic "condition" { + for_each = local.tags + + content { + test = "StringEquals" + variable = "ec2:ResourceTag/${condition.key}" + values = [condition.value] + } + } + } +} + +resource "aws_iam_role_policy" "cleanup" { + name = "perf-cleanup-lamda-policy" + role = aws_iam_role.cleanup.name + policy = data.aws_iam_policy_document.cleanup.json +} + +data "aws_iam_policy_document" "cleanup_logging" { + statement { + actions = ["logs:CreateLogStream", "logs:PutLogEvents"] + resources = ["${aws_cloudwatch_log_group.cleanup.arn}*"] + effect = "Allow" + } +} + +resource "aws_iam_role_policy" "cleanup_logging" { + name = "perf-lambda-logging" + role = aws_iam_role.cleanup.name + policy = data.aws_iam_policy_document.cleanup_logging.json +} diff --git a/perf/terraform/common/files/.gitignore b/perf/terraform/common/files/.gitignore index 3fc577864..47066beae 100644 --- a/perf/terraform/common/files/.gitignore +++ b/perf/terraform/common/files/.gitignore @@ -1,2 +1,2 @@ # generated ZIP for AWS Lambda -scale_down.zip +cleanup.zip diff --git a/perf/terraform/common/files/scale_down.json b/perf/terraform/common/files/cleanup.json similarity index 100% rename from perf/terraform/common/files/scale_down.json rename to perf/terraform/common/files/cleanup.json diff --git a/perf/terraform/common/files/scale_down.py b/perf/terraform/common/files/cleanup.py similarity index 100% rename from perf/terraform/common/files/scale_down.py rename to perf/terraform/common/files/cleanup.py diff --git a/perf/terraform/common/files/scale_down.sh b/perf/terraform/common/files/cleanup.sh similarity index 61% rename from perf/terraform/common/files/scale_down.sh rename to perf/terraform/common/files/cleanup.sh index 09c9d36c0..e540775c2 100755 --- a/perf/terraform/common/files/scale_down.sh +++ b/perf/terraform/common/files/cleanup.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash -# This script can be used to test the scale down lambda. +# This script can be used to test the cleanup lambda. # It requires the AWS CLI and SAM CLI to be installed. # You can get SAM CLI at https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html -sam local invoke ScaleDown --template scale_down.yml --event scale_down.json +sam local invoke Cleanup --template cleanup.yml --event cleanup.json diff --git a/perf/terraform/common/files/scale_down.yml b/perf/terraform/common/files/cleanup.yml similarity index 89% rename from perf/terraform/common/files/scale_down.yml rename to perf/terraform/common/files/cleanup.yml index afafca1c7..21336ff6f 100644 --- a/perf/terraform/common/files/scale_down.yml +++ b/perf/terraform/common/files/cleanup.yml @@ -3,10 +3,10 @@ Transform: AWS::Serverless-2016-10-31 Description: An AWS Lambda application. Resources: - ScaleDown: + Cleanup: Type: AWS::Serverless::Function Properties: - Handler: scale_down.lambda_handler + Handler: cleanup.lambda_handler Runtime: python3.9 CodeUri: . Environment: diff --git a/perf/terraform/common/scale-down.tf b/perf/terraform/common/scale-down.tf deleted file mode 100644 index 6044876d0..000000000 --- a/perf/terraform/common/scale-down.tf +++ /dev/null @@ -1,112 +0,0 @@ -locals { - regions = ["us-east-1", "us-west-2"] - tags = merge(var.common_tags, { "Name" = "node" }) -} - -data "archive_file" "scale_down" { - type = "zip" - source_file = "${path.module}/files/scale_down.py" - output_path = "${path.module}/files/scale_down.zip" -} - -resource "aws_lambda_function" "scale_down" { - filename = data.archive_file.scale_down.output_path - source_code_hash = data.archive_file.scale_down.output_base64sha256 - function_name = "perf-scale-down" - role = aws_iam_role.scale_down.arn - handler = "scale_down.lambda_handler" - runtime = "python3.9" - memory_size = 128 - timeout = 30 - - environment { - variables = { - REGIONS = jsonencode(local.regions) - TAGS = jsonencode(local.tags) - MAX_AGE_MINUTES = 50 - } - } -} - -resource "aws_cloudwatch_log_group" "scale_down" { - name = "/aws/lambda/${aws_lambda_function.scale_down.function_name}" - retention_in_days = 7 -} - -resource "aws_cloudwatch_event_rule" "scale_down" { - name = "perf-scale-down-rule" - schedule_expression = "cron(37 * * * ? *)" # 00:37, 01:37, 02:37, ..., 23:37 -} - -resource "aws_cloudwatch_event_target" "scale_down" { - rule = aws_cloudwatch_event_rule.scale_down.name - arn = aws_lambda_function.scale_down.arn -} - -resource "aws_lambda_permission" "scale_down" { - statement_id = "AllowExecutionFromCloudWatch" - action = "lambda:InvokeFunction" - function_name = aws_lambda_function.scale_down.function_name - principal = "events.amazonaws.com" - source_arn = aws_cloudwatch_event_rule.scale_down.arn -} - -data "aws_iam_policy_document" "scale_down_assume_role" { - statement { - actions = ["sts:AssumeRole"] - - principals { - type = "Service" - identifiers = ["lambda.amazonaws.com"] - } - } -} - -resource "aws_iam_role" "scale_down" { - name = "perf-scale-down-lambda-role" - assume_role_policy = data.aws_iam_policy_document.scale_down_assume_role.json -} - -data "aws_iam_policy_document" "scale_down" { - statement { - actions = ["ec2:DescribeInstances", "ec2:DescribeTags"] - resources = ["*"] - effect = "Allow" - } - - statement { - actions = ["ec2:TerminateInstances"] - resources = ["*"] - effect = "Allow" - - dynamic "condition" { - for_each = local.tags - - content { - test = "StringEquals" - variable = "ec2:ResourceTag/${condition.key}" - values = [condition.value] - } - } - } -} - -resource "aws_iam_role_policy" "scale_down" { - name = "perf-scale-down-lamda-policy" - role = aws_iam_role.scale_down.name - policy = data.aws_iam_policy_document.scale_down.json -} - -data "aws_iam_policy_document" "scale_down_logging" { - statement { - actions = ["logs:CreateLogStream", "logs:PutLogEvents"] - resources = ["${aws_cloudwatch_log_group.scale_down.arn}*"] - effect = "Allow" - } -} - -resource "aws_iam_role_policy" "scale_down_logging" { - name = "perf-lambda-logging" - role = aws_iam_role.scale_down.name - policy = data.aws_iam_policy_document.scale_down_logging.json -} diff --git a/perf/terraform/region/main.tf b/perf/terraform/region/main.tf index 267859542..098522ace 100644 --- a/perf/terraform/region/main.tf +++ b/perf/terraform/region/main.tf @@ -114,9 +114,9 @@ resource "aws_security_group" "restricted_inbound" { # If one wanted to make the key pair ephemeral, these would be the steps: # 1. Move this resource to `perf/terraform/ephemeral/main.tf` # 2. Add `make ssh-keygen` run step to `.github/workflows/perf.yml` -# 3. Add `aws_key_pair` cleanup to `perf/terraform/common/files/scale_down.py` +# 3. Add `aws_key_pair` cleanup to `perf/terraform/common/files/cleanup.py` # 4. Allow `aws_iam_user.perf` from `perf/terraform/common/main.tf` to create/delete/update key pairs -# 5. Allow `aws_iam_role.scale_down` from `perf/terraform/common/scale_down.tf` to delete key pairs +# 5. Allow `aws_iam_role.cleanup` from `perf/terraform/common/cleanup.tf` to delete key pairs resource "aws_key_pair" "perf" { key_name = "user-public-key" public_key = file("${path.module}/files/user.pub") From 7db0d3672c98ff0ef00607a3ef9ddc53e2db6b95 Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 09:28:55 +0200 Subject: [PATCH 21/41] chore: give tf modules more descriptive names --- .github/workflows/perf.yml | 8 ++--- perf/terraform/{common => ci}/cleanup.tf | 0 .../terraform/{common => ci}/files/.gitignore | 0 .../{common => ci}/files/cleanup.json | 0 .../terraform/{common => ci}/files/cleanup.py | 0 .../terraform/{common => ci}/files/cleanup.sh | 0 .../{common => ci}/files/cleanup.yml | 0 perf/terraform/{common => ci}/main.tf | 0 .../{remote => ci_confg}/terraform.tf | 0 .../{region => long_lived}/files/.gitignore | 0 .../{region => long_lived}/files/user-data.sh | 0 perf/terraform/{region => long_lived}/main.tf | 10 +++---- perf/terraform/remote/terraform_override.tf | 29 ------------------ .../{ephemeral => short_lived}/main.tf | 0 perf/terraform/terraform.tf | 30 +++++++++---------- 15 files changed, 24 insertions(+), 53 deletions(-) rename perf/terraform/{common => ci}/cleanup.tf (100%) rename perf/terraform/{common => ci}/files/.gitignore (100%) rename perf/terraform/{common => ci}/files/cleanup.json (100%) rename perf/terraform/{common => ci}/files/cleanup.py (100%) rename perf/terraform/{common => ci}/files/cleanup.sh (100%) rename perf/terraform/{common => ci}/files/cleanup.yml (100%) rename perf/terraform/{common => ci}/main.tf (100%) rename perf/terraform/{remote => ci_confg}/terraform.tf (100%) rename perf/terraform/{region => long_lived}/files/.gitignore (100%) rename perf/terraform/{region => long_lived}/files/user-data.sh (100%) rename perf/terraform/{region => long_lived}/main.tf (87%) delete mode 100644 perf/terraform/remote/terraform_override.tf rename perf/terraform/{ephemeral => short_lived}/main.tf (100%) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index e77739f69..0fcf481c7 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -3,7 +3,7 @@ name: libp2p perf test # How to configure a repository for running this workflow: # 1. Run 'make ssh-keygen' in 'perf' to generate a new SSH key pair named 'user' in 'perf/terraform/region/files' # 2. Configure auth for the AWS provider as per https://registry.terraform.io/providers/hashicorp/aws/latest/docs#authentication-and-configuration -# 3. Run 'terraform init' and 'terraform apply' in 'perf/terraform/remote' to create the long-lived AWS resources +# 3. Run 'terraform init' and 'terraform apply' in 'perf/terraform/ci_config' to create the resources needed for this workflow # 4. Go to https://console.aws.amazon.com/iamv2/home?#/users/details/perf?section=security_credentials # 5. Click 'Create access key' to get the access key ID and secret access key # 6. Go to https://github.com/libp2p/test-plans/settings/secrets/actions @@ -29,9 +29,9 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{ secrets.PERF_AWS_SECRET_ACCESS_KEY }} TF_IN_AUTOMATION: 1 TF_INPUT: 0 - TF_VAR_common_enabled: false - TF_VAR_region_enabled: false - TF_VAR_ephemeral_enabled: true + TF_VAR_ci_enabled: false + TF_VAR_long_lived_enabled: false + TF_VAR_short_lived_enabled: true steps: - name: Configure SSH uses: webfactory/ssh-agent@d4b9b8ff72958532804b70bbe600ad43b36d5f2e # v0.8.0 diff --git a/perf/terraform/common/cleanup.tf b/perf/terraform/ci/cleanup.tf similarity index 100% rename from perf/terraform/common/cleanup.tf rename to perf/terraform/ci/cleanup.tf diff --git a/perf/terraform/common/files/.gitignore b/perf/terraform/ci/files/.gitignore similarity index 100% rename from perf/terraform/common/files/.gitignore rename to perf/terraform/ci/files/.gitignore diff --git a/perf/terraform/common/files/cleanup.json b/perf/terraform/ci/files/cleanup.json similarity index 100% rename from perf/terraform/common/files/cleanup.json rename to perf/terraform/ci/files/cleanup.json diff --git a/perf/terraform/common/files/cleanup.py b/perf/terraform/ci/files/cleanup.py similarity index 100% rename from perf/terraform/common/files/cleanup.py rename to perf/terraform/ci/files/cleanup.py diff --git a/perf/terraform/common/files/cleanup.sh b/perf/terraform/ci/files/cleanup.sh similarity index 100% rename from perf/terraform/common/files/cleanup.sh rename to perf/terraform/ci/files/cleanup.sh diff --git a/perf/terraform/common/files/cleanup.yml b/perf/terraform/ci/files/cleanup.yml similarity index 100% rename from perf/terraform/common/files/cleanup.yml rename to perf/terraform/ci/files/cleanup.yml diff --git a/perf/terraform/common/main.tf b/perf/terraform/ci/main.tf similarity index 100% rename from perf/terraform/common/main.tf rename to perf/terraform/ci/main.tf diff --git a/perf/terraform/remote/terraform.tf b/perf/terraform/ci_confg/terraform.tf similarity index 100% rename from perf/terraform/remote/terraform.tf rename to perf/terraform/ci_confg/terraform.tf diff --git a/perf/terraform/region/files/.gitignore b/perf/terraform/long_lived/files/.gitignore similarity index 100% rename from perf/terraform/region/files/.gitignore rename to perf/terraform/long_lived/files/.gitignore diff --git a/perf/terraform/region/files/user-data.sh b/perf/terraform/long_lived/files/user-data.sh similarity index 100% rename from perf/terraform/region/files/user-data.sh rename to perf/terraform/long_lived/files/user-data.sh diff --git a/perf/terraform/region/main.tf b/perf/terraform/long_lived/main.tf similarity index 87% rename from perf/terraform/region/main.tf rename to perf/terraform/long_lived/main.tf index 098522ace..529ca902c 100644 --- a/perf/terraform/region/main.tf +++ b/perf/terraform/long_lived/main.tf @@ -111,12 +111,12 @@ resource "aws_security_group" "restricted_inbound" { }) } -# If one wanted to make the key pair ephemeral, these would be the steps: -# 1. Move this resource to `perf/terraform/ephemeral/main.tf` +# If one wanted to make the key pair short lived, these would be the steps: +# 1. Move this resource to `perf/terraform/short_lived/main.tf` # 2. Add `make ssh-keygen` run step to `.github/workflows/perf.yml` -# 3. Add `aws_key_pair` cleanup to `perf/terraform/common/files/cleanup.py` -# 4. Allow `aws_iam_user.perf` from `perf/terraform/common/main.tf` to create/delete/update key pairs -# 5. Allow `aws_iam_role.cleanup` from `perf/terraform/common/cleanup.tf` to delete key pairs +# 3. Add `aws_key_pair` cleanup to `perf/terraform/ci/files/cleanup.py` +# 4. Allow `aws_iam_user.perf` from `perf/terraform/ci/main.tf` to create/delete/update key pairs +# 5. Allow `aws_iam_role.cleanup` from `perf/terraform/ci/cleanup.tf` to delete key pairs resource "aws_key_pair" "perf" { key_name = "user-public-key" public_key = file("${path.module}/files/user.pub") diff --git a/perf/terraform/remote/terraform_override.tf b/perf/terraform/remote/terraform_override.tf deleted file mode 100644 index a0cf8f1bc..000000000 --- a/perf/terraform/remote/terraform_override.tf +++ /dev/null @@ -1,29 +0,0 @@ -terraform { - backend "s3" { - bucket = "terraform-tfstate" - key = "github.com/libp2p/test-plans/perf/terraform/remote/terraform.tfstate" - region = "us-west-2" - } -} - -locals { - root = ".." -} - -variable "common_enabled" { - type = bool - description = "Whether or not to create common resources" - default = true -} - -variable "region_enabled" { - type = bool - description = "Whether or not to create regional resources" - default = true -} - -variable "ephemeral_enabled" { - type = bool - description = "Whether or not to create ephemeral resources" - default = false -} diff --git a/perf/terraform/ephemeral/main.tf b/perf/terraform/short_lived/main.tf similarity index 100% rename from perf/terraform/ephemeral/main.tf rename to perf/terraform/short_lived/main.tf diff --git a/perf/terraform/terraform.tf b/perf/terraform/terraform.tf index f6b056eef..624ef08bb 100644 --- a/perf/terraform/terraform.tf +++ b/perf/terraform/terraform.tf @@ -14,39 +14,39 @@ locals { root = "." } -variable "common_enabled" { +variable "ci_enabled" { type = bool - description = "Whether or not to create common resources" + description = "Whether or not to create resources required to automate the setup in CI (e.g. IAM user, cleanup Lambda)" default = false } -variable "region_enabled" { +variable "long_lived_enabled" { type = bool - description = "Whether or not to create regional resources" + description = "Whether or not to create long lived resources (in CI, used across runs; e.g. VPCs)" default = true } -variable "ephemeral_enabled" { +variable "short_lived_enabled" { type = bool - description = "Whether or not to create ephemeral resources" + description = "Whether or not to create short lived resources (in CI, specific to each run; e.g. EC2 instances)" default = true } -module "common" { - for_each = [var.common_enabled ? [] : [ +module "ci" { + for_each = [var.ci_enabled ? [] : [ { region = "us-west-2" } ]] - source = "${local.root}/common" + source = "${local.root}/ci" region = each.value.region common_tags = local.tags } -module "region" { - for_each = [var.region_enabled ? [] : [ +module "long_lived" { + for_each = [var.long_lived_enabled ? [] : [ { region = "us-west-2", ami = "ami-0747e613a2a1ff483" @@ -56,15 +56,15 @@ module "region" { } ]] - source = "${local.root}/region" + source = "${local.root}/long_lived" region = each.value.region ami = each.value.ami common_tags = local.tags } -module "ephemeral" { - for_each = [var.ephemeral_enabled ? [] : [ +module "short_lived" { + for_each = [var.short_lived_enabled ? [] : [ { region = "us-west-2" }, { @@ -72,7 +72,7 @@ module "ephemeral" { } ]] - source = "${local.root}/ephemeral" + source = "${local.root}/short_lived" region = each.value.region common_tags = local.tags From a818de99e7f9d988666425b37bff89d1afa6d459 Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 09:29:34 +0200 Subject: [PATCH 22/41] chore: remove obsolete step from the perf workflow --- .github/workflows/perf.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 0fcf481c7..d3c2e59c8 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -69,11 +69,6 @@ jobs: CLIENT_IP: ${{ steps.client.outputs.ip }} run: npm run start -- --client-public-ip $CLIENT_IP --server-public-ip $SERVER_IP working-directory: perf/runner - - name: Archive results - uses: actions/upload-artifact@v2 - with: - name: results - path: perf/runner/benchmark-results.json - name: Push run: | git add perf/runner/benchmark-results.json From eb3e5daa7ac3656927594ad6882432812e4592e1 Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 10:02:17 +0200 Subject: [PATCH 23/41] feat: generate ssh key on the fly --- .github/workflows/perf.yml | 23 ++++++++++--------- perf/Makefile | 5 ++-- perf/README.md | 2 +- perf/terraform/ci/cleanup.tf | 6 ++--- perf/terraform/ci/files/cleanup.py | 3 +++ perf/terraform/ci/main.tf | 1 + .../{ci_confg => ci_config}/terraform.tf | 0 perf/terraform/long_lived/main.tf | 13 ----------- .../files/.gitignore | 4 ++-- perf/terraform/short_lived/main.tf | 11 +++++++++ 10 files changed, 36 insertions(+), 32 deletions(-) rename perf/terraform/{ci_confg => ci_config}/terraform.tf (100%) rename perf/terraform/{long_lived => short_lived}/files/.gitignore (58%) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index d3c2e59c8..3b8938922 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -1,16 +1,14 @@ name: libp2p perf test # How to configure a repository for running this workflow: -# 1. Run 'make ssh-keygen' in 'perf' to generate a new SSH key pair named 'user' in 'perf/terraform/region/files' -# 2. Configure auth for the AWS provider as per https://registry.terraform.io/providers/hashicorp/aws/latest/docs#authentication-and-configuration -# 3. Run 'terraform init' and 'terraform apply' in 'perf/terraform/ci_config' to create the resources needed for this workflow -# 4. Go to https://console.aws.amazon.com/iamv2/home?#/users/details/perf?section=security_credentials -# 5. Click 'Create access key' to get the access key ID and secret access key -# 6. Go to https://github.com/libp2p/test-plans/settings/secrets/actions -# 7. Click 'New repository secret', set the name to 'PERF_AWS_SECRET_ACCESS_KEY', and paste the secret access key from step 5 -# 8. Click 'New repository secret', set the name to 'PERF_SSH_PRIVATE_KEY', and paste the private key from step 1 -# 9. Go to https://github.com/libp2p/test-plans/settings/variables/actions -# 10. Click 'New repository variable', set the name to 'PERF_AWS_ACCESS_KEY_ID', and paste the access key ID from step 5 +# 1. Configure auth for the AWS provider as per https://registry.terraform.io/providers/hashicorp/aws/latest/docs#authentication-and-configuration +# 2. Run 'terraform init' and 'terraform apply' in 'perf/terraform/ci_config' to create the resources needed for this workflow +# 3. Go to https://console.aws.amazon.com/iamv2/home?#/users/details/perf?section=security_credentials +# 4. Click 'Create access key' to get the access key ID and secret access key +# 5. Go to https://github.com/libp2p/test-plans/settings/secrets/actions +# 6. Click 'New repository secret', set the name to 'PERF_AWS_SECRET_ACCESS_KEY', and paste the secret access key from step 5 +# 7. Go to https://github.com/libp2p/test-plans/settings/variables/actions +# 8. Click 'New repository variable', set the name to 'PERF_AWS_ACCESS_KEY_ID', and paste the access key ID from step 5 on: workflow_dispatch: @@ -33,10 +31,13 @@ jobs: TF_VAR_long_lived_enabled: false TF_VAR_short_lived_enabled: true steps: + - id: ssh + name: Generate SSH key + run: echo "private-key=$(make ssh-keygen | tail -n 1)" >> $GITHUB_OUTPUT - name: Configure SSH uses: webfactory/ssh-agent@d4b9b8ff72958532804b70bbe600ad43b36d5f2e # v0.8.0 with: - ssh-private-key: ${{ secrets.PERF_SSH_PRIVATE_KEY }} + ssh-private-key: ${{ steps.ssh.outputs.private-key }} - name: Configure git run: | git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com>" diff --git a/perf/Makefile b/perf/Makefile index 780f8cab5..02b03581b 100644 --- a/perf/Makefile +++ b/perf/Makefile @@ -1,5 +1,6 @@ ssh-keygen: - ssh-keygen -t ed25519 -f ./terraform/region/files/user -N '' + ssh-keygen -t ed25519 -f ./terraform/short_lived/files/perf -N '' + [ -z "${CI}" ] || echo ":add-mask:$(cat ./terraform/short_lived/files/perf)" && cat ./terraform/short_lived/files/perf ssh-add: - ssh-add ./terraform/region/files/user + ssh-add ./terraform/short_lived/files/perf diff --git a/perf/README.md b/perf/README.md index ab1b71504..d055b293e 100644 --- a/perf/README.md +++ b/perf/README.md @@ -12,7 +12,7 @@ Benchmark results can be visualized with https://observablehq.com/@mxinden-works ### Bootstrap -1. Save your public SSH key as the file `./regions/files/user.pub`; or generate a new key pair with `make ssh-keygen` and add it to your SSH agent with `make ssh-add`. +1. Save your public SSH key as the file `./short_lived/files/perf.pub`; or generate a new key pair with `make ssh-keygen` and add it to your SSH agent with `make ssh-add`. 2. `cd terraform` 3. `terraform init` 4. `terraform apply` diff --git a/perf/terraform/ci/cleanup.tf b/perf/terraform/ci/cleanup.tf index 7436b8db6..b2f27290c 100644 --- a/perf/terraform/ci/cleanup.tf +++ b/perf/terraform/ci/cleanup.tf @@ -69,18 +69,18 @@ resource "aws_iam_role" "cleanup" { data "aws_iam_policy_document" "cleanup" { statement { - actions = ["ec2:DescribeInstances", "ec2:DescribeTags"] + actions = ["ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeKeyPairs"] resources = ["*"] effect = "Allow" } statement { - actions = ["ec2:TerminateInstances"] + actions = ["ec2:TerminateInstances", "ec2:DeleteKeyPair"] resources = ["*"] effect = "Allow" dynamic "condition" { - for_each = local.tags + for_each = var.common_tags content { test = "StringEquals" diff --git a/perf/terraform/ci/files/cleanup.py b/perf/terraform/ci/files/cleanup.py index e8d0f530c..4cb2f483a 100644 --- a/perf/terraform/ci/files/cleanup.py +++ b/perf/terraform/ci/files/cleanup.py @@ -7,6 +7,7 @@ tags = json.loads(os.environ['TAGS']) # Assuming this is a JSON object max_age_minutes = int(os.environ['MAX_AGE_MINUTES']) # Assuming this is an integer +# TODO: Find and delete unused key pairs def lambda_handler(event, context): # iterate over all regions for region in regions: @@ -40,3 +41,5 @@ def lambda_handler(event, context): if instances: ec2.terminate_instances(InstanceIds=instances) print(f'Terminating instances: {instances}') + + ec2.describe_ diff --git a/perf/terraform/ci/main.tf b/perf/terraform/ci/main.tf index 2a80d81a9..b3a4abf20 100644 --- a/perf/terraform/ci/main.tf +++ b/perf/terraform/ci/main.tf @@ -20,6 +20,7 @@ resource "aws_iam_user" "perf" { name = "perf" } +# TODO: Make the policy more restrictive; it needs to be able to create/destroy instances and key pairs data "aws_iam_policy_document" "perf" { statement { actions = ["ec2:*"] diff --git a/perf/terraform/ci_confg/terraform.tf b/perf/terraform/ci_config/terraform.tf similarity index 100% rename from perf/terraform/ci_confg/terraform.tf rename to perf/terraform/ci_config/terraform.tf diff --git a/perf/terraform/long_lived/main.tf b/perf/terraform/long_lived/main.tf index 529ca902c..be097a716 100644 --- a/perf/terraform/long_lived/main.tf +++ b/perf/terraform/long_lived/main.tf @@ -111,24 +111,11 @@ resource "aws_security_group" "restricted_inbound" { }) } -# If one wanted to make the key pair short lived, these would be the steps: -# 1. Move this resource to `perf/terraform/short_lived/main.tf` -# 2. Add `make ssh-keygen` run step to `.github/workflows/perf.yml` -# 3. Add `aws_key_pair` cleanup to `perf/terraform/ci/files/cleanup.py` -# 4. Allow `aws_iam_user.perf` from `perf/terraform/ci/main.tf` to create/delete/update key pairs -# 5. Allow `aws_iam_role.cleanup` from `perf/terraform/ci/cleanup.tf` to delete key pairs -resource "aws_key_pair" "perf" { - key_name = "user-public-key" - public_key = file("${path.module}/files/user.pub") -} - resource "aws_launch_template" "perf" { name = "perf-node" image_id = var.ami instance_type = "m5n.8xlarge" - key_name = aws_key_pair.perf.key_name - # Debug via: # - /var/log/cloud-init.log and # - /var/log/cloud-init-output.log diff --git a/perf/terraform/long_lived/files/.gitignore b/perf/terraform/short_lived/files/.gitignore similarity index 58% rename from perf/terraform/long_lived/files/.gitignore rename to perf/terraform/short_lived/files/.gitignore index d1ddebdff..d53e7f9d3 100644 --- a/perf/terraform/long_lived/files/.gitignore +++ b/perf/terraform/short_lived/files/.gitignore @@ -1,3 +1,3 @@ # generated SSH key -user -user.pub +perf +perf.pub diff --git a/perf/terraform/short_lived/main.tf b/perf/terraform/short_lived/main.tf index 704d4accf..0f29952db 100644 --- a/perf/terraform/short_lived/main.tf +++ b/perf/terraform/short_lived/main.tf @@ -15,6 +15,17 @@ provider "aws" { } } +resource "random_id" "perf" { + byte_length = 8 +} + +resource "aws_key_pair" "perf" { + key_name = "perf-${random_id.perf.hex}" + public_key = file("${path.module}/files/perf.pub") +} + resource "aws_instance" "perf" { launch_template = "perf-node" + + key_name = aws_key_pair.perf.key_name } From 02380c4a57feda6a8df62c7e9e22b1e056e869ab Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 11:16:51 +0200 Subject: [PATCH 24/41] fix: local setup for perf --- .github/workflows/perf.yml | 6 +- perf/Makefile | 1 - perf/terraform/.gitignore | 2 +- perf/terraform/ci/cleanup.tf | 11 +- perf/terraform/ci/main.tf | 25 ++--- .../terraform/ci_config/terraform_override.tf | 39 +++++++ perf/terraform/long_lived/main.tf | 48 ++------- perf/terraform/short_lived/main.tf | 32 +++--- perf/terraform/terraform.tf | 101 ++++++++++++------ 9 files changed, 150 insertions(+), 115 deletions(-) create mode 100644 perf/terraform/ci_config/terraform_override.tf diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 3b8938922..42d02b2cc 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -33,7 +33,11 @@ jobs: steps: - id: ssh name: Generate SSH key - run: echo "private-key=$(make ssh-keygen | tail -n 1)" >> $GITHUB_OUTPUT + run: | + make ssh-keygen + private-key="$(cat terraform/short_lived/files/perf)" + echo ":add-mask:${private-key}" + echo "private-key=${private-key}" >> $GITHUB_OUTPUT - name: Configure SSH uses: webfactory/ssh-agent@d4b9b8ff72958532804b70bbe600ad43b36d5f2e # v0.8.0 with: diff --git a/perf/Makefile b/perf/Makefile index 02b03581b..ccf481eae 100644 --- a/perf/Makefile +++ b/perf/Makefile @@ -1,6 +1,5 @@ ssh-keygen: ssh-keygen -t ed25519 -f ./terraform/short_lived/files/perf -N '' - [ -z "${CI}" ] || echo ":add-mask:$(cat ./terraform/short_lived/files/perf)" && cat ./terraform/short_lived/files/perf ssh-add: ssh-add ./terraform/short_lived/files/perf diff --git a/perf/terraform/.gitignore b/perf/terraform/.gitignore index 6304eb3c1..dca35ab74 100644 --- a/perf/terraform/.gitignore +++ b/perf/terraform/.gitignore @@ -24,7 +24,7 @@ override.tf.json *_override.tf.json # Include override files you do wish to add to version control using negated pattern -# !example_override.tf +!ci_config/terraform_override.tf # Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan # example: *tfplan* diff --git a/perf/terraform/ci/cleanup.tf b/perf/terraform/ci/cleanup.tf index b2f27290c..27e7bcedc 100644 --- a/perf/terraform/ci/cleanup.tf +++ b/perf/terraform/ci/cleanup.tf @@ -1,8 +1,3 @@ -locals { - regions = ["us-east-1", "us-west-2"] - tags = merge(var.common_tags, { "Name" = "node" }) -} - data "archive_file" "cleanup" { type = "zip" source_file = "${path.module}/files/cleanup.py" @@ -21,8 +16,8 @@ resource "aws_lambda_function" "cleanup" { environment { variables = { - REGIONS = jsonencode(local.regions) - TAGS = jsonencode(local.tags) + REGIONS = jsonencode(var.regions) + TAGS = jsonencode(var.tags) MAX_AGE_MINUTES = 50 } } @@ -80,7 +75,7 @@ data "aws_iam_policy_document" "cleanup" { effect = "Allow" dynamic "condition" { - for_each = var.common_tags + for_each = var.tags content { test = "StringEquals" diff --git a/perf/terraform/ci/main.tf b/perf/terraform/ci/main.tf index b3a4abf20..6237e3306 100644 --- a/perf/terraform/ci/main.tf +++ b/perf/terraform/ci/main.tf @@ -1,19 +1,20 @@ -variable "region" { - type = string - description = "The AWS region to create resources in" +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "4.67.0" + } + } } -variable "common_tags" { - type = map(string) - description = "Common tags to apply to all resources" +variable "tags" { + type = map(string) + description = "Tags that the perf resources are tagged with" } -provider "aws" { - region = var.region - - default_tags { - tags = var.common_tags - } +variable "regions" { + type = list(string) + description = "Regions that the perf resources are created in" } resource "aws_iam_user" "perf" { diff --git a/perf/terraform/ci_config/terraform_override.tf b/perf/terraform/ci_config/terraform_override.tf new file mode 100644 index 000000000..ccbf71fc6 --- /dev/null +++ b/perf/terraform/ci_config/terraform_override.tf @@ -0,0 +1,39 @@ +terraform { + backend "s3" { + bucket = "terraform-tfstate" + key = "github.com/libp2p/test-plans/perf/terraform/ci_config/terraform.tfstate" + region = "us-west-2" + } +} + +variable "ci_enabled" { + default = true +} + +variable "long_lived_enabled" { + default = true +} + +variable "short_lived_enabled" { + default = false +} + +module "ci" { + source = "../ci" +} + +module "long_lived_server" { + source = "../long_lived" +} + +module "long_lived_client" { + source = "../long_lived" +} + +module "short_lived_server" { + source = "../short_lived" +} + +module "short_lived_client" { + source = "../short_lived" +} diff --git a/perf/terraform/long_lived/main.tf b/perf/terraform/long_lived/main.tf index be097a716..7fbc9588b 100644 --- a/perf/terraform/long_lived/main.tf +++ b/perf/terraform/long_lived/main.tf @@ -1,30 +1,26 @@ +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "4.67.0" + } + } +} + variable "region" { - description = "The AWS region to create resources in" + description = "The AWS region of the provider" } variable "ami" { description = "The Amazon Machine Image to use" } -variable "common_tags" { - type = map(string) - description = "Common tags to apply to all resources" -} - locals { availability_zone = "${var.region}a" } -provider "aws" { - region = var.region -} - resource "aws_vpc" "perf" { cidr_block = "10.0.0.0/16" - - tags = merge(var.common_tags, { - Name = "perf" - }) } resource "aws_subnet" "perf" { @@ -32,18 +28,10 @@ resource "aws_subnet" "perf" { cidr_block = "10.0.0.0/16" availability_zone = local.availability_zone map_public_ip_on_launch = true - - tags = merge(var.common_tags, { - Name = "perf" - }) } resource "aws_internet_gateway" "perf" { vpc_id = aws_vpc.perf.id - - tags = merge(var.common_tags, { - Name = "perf-igw" - }) } resource "aws_route_table" "perf" { @@ -53,10 +41,6 @@ resource "aws_route_table" "perf" { cidr_block = "0.0.0.0/0" gateway_id = aws_internet_gateway.perf.id } - - tags = merge(var.common_tags, { - Name = "perf-route-table" - }) } resource "aws_route_table_association" "perf" { @@ -105,10 +89,6 @@ resource "aws_security_group" "restricted_inbound" { protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } - - tags = merge(var.common_tags, { - Name = "restricted_inbound_sg" - }) } resource "aws_launch_template" "perf" { @@ -121,14 +101,6 @@ resource "aws_launch_template" "perf" { # - /var/log/cloud-init-output.log user_data = filebase64("${path.module}/files/user-data.sh") - tag_specifications { - resource_type = "instance" - - tags = merge(var.common_tags, { - Name = "node" - }) - } - instance_initiated_shutdown_behavior = "terminate" network_interfaces { diff --git a/perf/terraform/short_lived/main.tf b/perf/terraform/short_lived/main.tf index 0f29952db..c7ea28dd7 100644 --- a/perf/terraform/short_lived/main.tf +++ b/perf/terraform/short_lived/main.tf @@ -1,31 +1,23 @@ -variable "region" { - description = "The AWS region to create resources in" -} - -variable "common_tags" { - type = map(string) - description = "Common tags to apply to all resources" -} - -provider "aws" { - region = var.region - - default_tags { - tags = var.common_tags +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "4.67.0" + } } } -resource "random_id" "perf" { - byte_length = 8 -} - resource "aws_key_pair" "perf" { - key_name = "perf-${random_id.perf.hex}" + key_name_prefix = "perf-" public_key = file("${path.module}/files/perf.pub") } resource "aws_instance" "perf" { - launch_template = "perf-node" + name = "perf-node" + + launch_template { + name = "perf-node" + } key_name = aws_key_pair.perf.key_name } diff --git a/perf/terraform/terraform.tf b/perf/terraform/terraform.tf index 624ef08bb..8bed8dc32 100644 --- a/perf/terraform/terraform.tf +++ b/perf/terraform/terraform.tf @@ -11,9 +11,25 @@ locals { tags = { Project = "perf" } - root = "." } +provider "aws" { + alias = "us-west-2" + region = "us-west-2" + default_tags { + tags = local.tags + } +} + +provider "aws" { + alias = "us-east-1" + region = "us-east-1" + default_tags { + tags = local.tags + } +} + + variable "ci_enabled" { type = bool description = "Whether or not to create resources required to automate the setup in CI (e.g. IAM user, cleanup Lambda)" @@ -33,47 +49,64 @@ variable "short_lived_enabled" { } module "ci" { - for_each = [var.ci_enabled ? [] : [ - { - region = "us-west-2" - } - ]] + count = var.ci_enabled ? 1 : 0 + + source = "./ci" - source = "${local.root}/ci" - region = each.value.region + regions = ["us-west-2", "us-east-1"] + tags = local.tags - common_tags = local.tags + providers = { + aws = aws.us-west-2 + } } -module "long_lived" { - for_each = [var.long_lived_enabled ? [] : [ - { - region = "us-west-2", - ami = "ami-0747e613a2a1ff483" - }, { - region = "us-east-1", - ami = "ami-06e46074ae430fba6" - } - ]] +module "long_lived_server" { + count = var.long_lived_enabled ? 1 : 0 - source = "${local.root}/long_lived" - region = each.value.region - ami = each.value.ami + source = "./long_lived" - common_tags = local.tags + region = "us-west-2" + ami = "ami-0747e613a2a1ff483" + + providers = { + aws = aws.us-west-2 + } } -module "short_lived" { - for_each = [var.short_lived_enabled ? [] : [ - { - region = "us-west-2" - }, { - region = "us-east-1" - } - ]] +module "long_lived_client" { + count = var.long_lived_enabled ? 1 : 0 - source = "${local.root}/short_lived" - region = each.value.region + source = "./long_lived" + + region = "us-east-1" + ami = "ami-06e46074ae430fba6" + + providers = { + aws = aws.us-east-1 + } +} + +module "short_lived_server" { + count = var.short_lived_enabled ? 1 : 0 + + source = "./short_lived" + + providers = { + aws = aws.us-west-2 + } + + depends_on = [module.long_lived_server] +} + +module "short_lived_client" { + count = var.short_lived_enabled ? 1 : 0 + + source = "./short_lived" + + providers = { + aws = aws.us-east-1 + } - common_tags = local.tags + depends_on = [module.long_lived_client] } From e05e7743fed67ac979f665b1c4fc88979a3e4d0b Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 11:33:09 +0200 Subject: [PATCH 25/41] fix: terraform override in ci --- .github/workflows/perf.yml | 10 ++++----- perf/Makefile | 4 ++-- perf/README.md | 4 ++-- perf/terraform/.gitignore | 2 +- perf/terraform/ci_config/terraform.tf | 1 - perf/terraform/configs/ci/terraform.tf | 1 + .../ci}/terraform_override.tf | 22 +------------------ .../{ => configs/local}/.terraform.lock.hcl | 19 ---------------- .../{ => configs/local}/terraform.tf | 10 ++++----- perf/terraform/{ => modules}/ci/cleanup.tf | 0 .../{ => modules}/ci/files/.gitignore | 0 .../{ => modules}/ci/files/cleanup.json | 0 .../{ => modules}/ci/files/cleanup.py | 0 .../{ => modules}/ci/files/cleanup.sh | 0 .../{ => modules}/ci/files/cleanup.yml | 0 perf/terraform/{ => modules}/ci/main.tf | 0 .../long_lived/files/user-data.sh | 0 .../{ => modules}/long_lived/main.tf | 0 .../short_lived/files/.gitignore | 0 .../{ => modules}/short_lived/main.tf | 4 +++- 20 files changed, 20 insertions(+), 57 deletions(-) delete mode 120000 perf/terraform/ci_config/terraform.tf create mode 120000 perf/terraform/configs/ci/terraform.tf rename perf/terraform/{ci_config => configs/ci}/terraform_override.tf (52%) rename perf/terraform/{ => configs/local}/.terraform.lock.hcl (70%) rename perf/terraform/{ => configs/local}/terraform.tf (90%) rename perf/terraform/{ => modules}/ci/cleanup.tf (100%) rename perf/terraform/{ => modules}/ci/files/.gitignore (100%) rename perf/terraform/{ => modules}/ci/files/cleanup.json (100%) rename perf/terraform/{ => modules}/ci/files/cleanup.py (100%) rename perf/terraform/{ => modules}/ci/files/cleanup.sh (100%) rename perf/terraform/{ => modules}/ci/files/cleanup.yml (100%) rename perf/terraform/{ => modules}/ci/main.tf (100%) rename perf/terraform/{ => modules}/long_lived/files/user-data.sh (100%) rename perf/terraform/{ => modules}/long_lived/main.tf (100%) rename perf/terraform/{ => modules}/short_lived/files/.gitignore (100%) rename perf/terraform/{ => modules}/short_lived/main.tf (90%) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 42d02b2cc..396968832 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -2,7 +2,7 @@ name: libp2p perf test # How to configure a repository for running this workflow: # 1. Configure auth for the AWS provider as per https://registry.terraform.io/providers/hashicorp/aws/latest/docs#authentication-and-configuration -# 2. Run 'terraform init' and 'terraform apply' in 'perf/terraform/ci_config' to create the resources needed for this workflow +# 2. Run 'terraform init' and 'terraform apply' in 'perf/terraform/configs/ci' to create the resources needed for this workflow # 3. Go to https://console.aws.amazon.com/iamv2/home?#/users/details/perf?section=security_credentials # 4. Click 'Create access key' to get the access key ID and secret access key # 5. Go to https://github.com/libp2p/test-plans/settings/secrets/actions @@ -35,7 +35,7 @@ jobs: name: Generate SSH key run: | make ssh-keygen - private-key="$(cat terraform/short_lived/files/perf)" + private-key="$(cat terraform/modules/short_lived/files/perf)" echo ":add-mask:${private-key}" echo "private-key=${private-key}" >> $GITHUB_OUTPUT - name: Configure SSH @@ -55,10 +55,10 @@ jobs: ref: ${{ github.ref }} - name: Init terraform run: terraform init - working-directory: perf/terraform + working-directory: perf/terraform/configs/ci - name: Apply terraform run: terraform apply -auto-approve - working-directory: perf/terraform + working-directory: perf/terraform/configs/ci - id: server name: Retrieve server's IP run: echo "ip=$(terraform output -raw server_ip)" @@ -82,4 +82,4 @@ jobs: - name: Destroy terraform if: always() run: terraform destroy -auto-approve - working-directory: perf/terraform + working-directory: perf/terraform/configs/ci diff --git a/perf/Makefile b/perf/Makefile index ccf481eae..1d826b01c 100644 --- a/perf/Makefile +++ b/perf/Makefile @@ -1,5 +1,5 @@ ssh-keygen: - ssh-keygen -t ed25519 -f ./terraform/short_lived/files/perf -N '' + ssh-keygen -t ed25519 -f ./terraform/modules/short_lived/files/perf -N '' ssh-add: - ssh-add ./terraform/short_lived/files/perf + ssh-add ./terraform/modules/short_lived/files/perf diff --git a/perf/README.md b/perf/README.md index d055b293e..4a2e01fc9 100644 --- a/perf/README.md +++ b/perf/README.md @@ -13,7 +13,7 @@ Benchmark results can be visualized with https://observablehq.com/@mxinden-works ### Bootstrap 1. Save your public SSH key as the file `./short_lived/files/perf.pub`; or generate a new key pair with `make ssh-keygen` and add it to your SSH agent with `make ssh-add`. -2. `cd terraform` +2. `cd terraform/configs/local` 3. `terraform init` 4. `terraform apply` 5. `CLIENT_IP=$(terraform output -raw client_ip)` @@ -29,7 +29,7 @@ _WARNING_: Running the perf tests might take a while. ## Deprovision infrastructure -1. `cd terraform` +1. `cd terraform/configs/local` 2. `terraform destroy` ## Adding a new implementation diff --git a/perf/terraform/.gitignore b/perf/terraform/.gitignore index dca35ab74..0b634c9a2 100644 --- a/perf/terraform/.gitignore +++ b/perf/terraform/.gitignore @@ -24,7 +24,7 @@ override.tf.json *_override.tf.json # Include override files you do wish to add to version control using negated pattern -!ci_config/terraform_override.tf +!configs/ci/terraform_override.tf # Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan # example: *tfplan* diff --git a/perf/terraform/ci_config/terraform.tf b/perf/terraform/ci_config/terraform.tf deleted file mode 120000 index fdbf0eba0..000000000 --- a/perf/terraform/ci_config/terraform.tf +++ /dev/null @@ -1 +0,0 @@ -../terraform.tf \ No newline at end of file diff --git a/perf/terraform/configs/ci/terraform.tf b/perf/terraform/configs/ci/terraform.tf new file mode 120000 index 000000000..e51ea571a --- /dev/null +++ b/perf/terraform/configs/ci/terraform.tf @@ -0,0 +1 @@ +../local/terraform.tf \ No newline at end of file diff --git a/perf/terraform/ci_config/terraform_override.tf b/perf/terraform/configs/ci/terraform_override.tf similarity index 52% rename from perf/terraform/ci_config/terraform_override.tf rename to perf/terraform/configs/ci/terraform_override.tf index ccbf71fc6..c7d7b92f0 100644 --- a/perf/terraform/ci_config/terraform_override.tf +++ b/perf/terraform/configs/ci/terraform_override.tf @@ -1,7 +1,7 @@ terraform { backend "s3" { bucket = "terraform-tfstate" - key = "github.com/libp2p/test-plans/perf/terraform/ci_config/terraform.tfstate" + key = "github.com/libp2p/test-plans/perf/terraform/configs/ci/terraform.tfstate" region = "us-west-2" } } @@ -17,23 +17,3 @@ variable "long_lived_enabled" { variable "short_lived_enabled" { default = false } - -module "ci" { - source = "../ci" -} - -module "long_lived_server" { - source = "../long_lived" -} - -module "long_lived_client" { - source = "../long_lived" -} - -module "short_lived_server" { - source = "../short_lived" -} - -module "short_lived_client" { - source = "../short_lived" -} diff --git a/perf/terraform/.terraform.lock.hcl b/perf/terraform/configs/local/.terraform.lock.hcl similarity index 70% rename from perf/terraform/.terraform.lock.hcl rename to perf/terraform/configs/local/.terraform.lock.hcl index 05146c6ea..e490491e1 100644 --- a/perf/terraform/.terraform.lock.hcl +++ b/perf/terraform/configs/local/.terraform.lock.hcl @@ -42,22 +42,3 @@ provider "registry.terraform.io/hashicorp/aws" { "zh:fac0d2ddeadf9ec53da87922f666e1e73a603a611c57bcbc4b86ac2821619b1d", ] } - -provider "registry.terraform.io/hashicorp/random" { - version = "3.5.1" - hashes = [ - "h1:IL9mSatmwov+e0+++YX2V6uel+dV6bn+fC/cnGDK3Ck=", - "zh:04e3fbd610cb52c1017d282531364b9c53ef72b6bc533acb2a90671957324a64", - "zh:119197103301ebaf7efb91df8f0b6e0dd31e6ff943d231af35ee1831c599188d", - "zh:4d2b219d09abf3b1bb4df93d399ed156cadd61f44ad3baf5cf2954df2fba0831", - "zh:6130bdde527587bbe2dcaa7150363e96dbc5250ea20154176d82bc69df5d4ce3", - "zh:6cc326cd4000f724d3086ee05587e7710f032f94fc9af35e96a386a1c6f2214f", - "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:b6d88e1d28cf2dfa24e9fdcc3efc77adcdc1c3c3b5c7ce503a423efbdd6de57b", - "zh:ba74c592622ecbcef9dc2a4d81ed321c4e44cddf7da799faa324da9bf52a22b2", - "zh:c7c5cde98fe4ef1143bd1b3ec5dc04baf0d4cc3ca2c5c7d40d17c0e9b2076865", - "zh:dac4bad52c940cd0dfc27893507c1e92393846b024c5a9db159a93c534a3da03", - "zh:de8febe2a2acd9ac454b844a4106ed295ae9520ef54dc8ed2faf29f12716b602", - "zh:eab0d0495e7e711cca367f7d4df6e322e6c562fc52151ec931176115b83ed014", - ] -} diff --git a/perf/terraform/terraform.tf b/perf/terraform/configs/local/terraform.tf similarity index 90% rename from perf/terraform/terraform.tf rename to perf/terraform/configs/local/terraform.tf index 8bed8dc32..92261b120 100644 --- a/perf/terraform/terraform.tf +++ b/perf/terraform/configs/local/terraform.tf @@ -51,7 +51,7 @@ variable "short_lived_enabled" { module "ci" { count = var.ci_enabled ? 1 : 0 - source = "./ci" + source = "../../modules/ci" regions = ["us-west-2", "us-east-1"] tags = local.tags @@ -64,7 +64,7 @@ module "ci" { module "long_lived_server" { count = var.long_lived_enabled ? 1 : 0 - source = "./long_lived" + source = "../../modules/long_lived" region = "us-west-2" ami = "ami-0747e613a2a1ff483" @@ -77,7 +77,7 @@ module "long_lived_server" { module "long_lived_client" { count = var.long_lived_enabled ? 1 : 0 - source = "./long_lived" + source = "../../modules/long_lived" region = "us-east-1" ami = "ami-06e46074ae430fba6" @@ -90,7 +90,7 @@ module "long_lived_client" { module "short_lived_server" { count = var.short_lived_enabled ? 1 : 0 - source = "./short_lived" + source = "../../modules/short_lived" providers = { aws = aws.us-west-2 @@ -102,7 +102,7 @@ module "short_lived_server" { module "short_lived_client" { count = var.short_lived_enabled ? 1 : 0 - source = "./short_lived" + source = "../../modules/short_lived" providers = { aws = aws.us-east-1 diff --git a/perf/terraform/ci/cleanup.tf b/perf/terraform/modules/ci/cleanup.tf similarity index 100% rename from perf/terraform/ci/cleanup.tf rename to perf/terraform/modules/ci/cleanup.tf diff --git a/perf/terraform/ci/files/.gitignore b/perf/terraform/modules/ci/files/.gitignore similarity index 100% rename from perf/terraform/ci/files/.gitignore rename to perf/terraform/modules/ci/files/.gitignore diff --git a/perf/terraform/ci/files/cleanup.json b/perf/terraform/modules/ci/files/cleanup.json similarity index 100% rename from perf/terraform/ci/files/cleanup.json rename to perf/terraform/modules/ci/files/cleanup.json diff --git a/perf/terraform/ci/files/cleanup.py b/perf/terraform/modules/ci/files/cleanup.py similarity index 100% rename from perf/terraform/ci/files/cleanup.py rename to perf/terraform/modules/ci/files/cleanup.py diff --git a/perf/terraform/ci/files/cleanup.sh b/perf/terraform/modules/ci/files/cleanup.sh similarity index 100% rename from perf/terraform/ci/files/cleanup.sh rename to perf/terraform/modules/ci/files/cleanup.sh diff --git a/perf/terraform/ci/files/cleanup.yml b/perf/terraform/modules/ci/files/cleanup.yml similarity index 100% rename from perf/terraform/ci/files/cleanup.yml rename to perf/terraform/modules/ci/files/cleanup.yml diff --git a/perf/terraform/ci/main.tf b/perf/terraform/modules/ci/main.tf similarity index 100% rename from perf/terraform/ci/main.tf rename to perf/terraform/modules/ci/main.tf diff --git a/perf/terraform/long_lived/files/user-data.sh b/perf/terraform/modules/long_lived/files/user-data.sh similarity index 100% rename from perf/terraform/long_lived/files/user-data.sh rename to perf/terraform/modules/long_lived/files/user-data.sh diff --git a/perf/terraform/long_lived/main.tf b/perf/terraform/modules/long_lived/main.tf similarity index 100% rename from perf/terraform/long_lived/main.tf rename to perf/terraform/modules/long_lived/main.tf diff --git a/perf/terraform/short_lived/files/.gitignore b/perf/terraform/modules/short_lived/files/.gitignore similarity index 100% rename from perf/terraform/short_lived/files/.gitignore rename to perf/terraform/modules/short_lived/files/.gitignore diff --git a/perf/terraform/short_lived/main.tf b/perf/terraform/modules/short_lived/main.tf similarity index 90% rename from perf/terraform/short_lived/main.tf rename to perf/terraform/modules/short_lived/main.tf index c7ea28dd7..f21c032e3 100644 --- a/perf/terraform/short_lived/main.tf +++ b/perf/terraform/modules/short_lived/main.tf @@ -13,7 +13,9 @@ resource "aws_key_pair" "perf" { } resource "aws_instance" "perf" { - name = "perf-node" + tags = { + Name = "perf-node" + } launch_template { name = "perf-node" From 112633cd3a68fd987ee7a5b9f8db793a73a874e3 Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 12:19:49 +0200 Subject: [PATCH 26/41] fix: remote terraform config --- .github/workflows/perf.yml | 8 ++-- perf/terraform/.gitignore | 2 +- perf/terraform/configs/README.md | 13 ++++++ .../configs/ci/terraform_override.tf | 19 -------- .../configs/remote/.terraform.lock.hcl | 44 +++++++++++++++++++ .../configs/{ci => remote}/terraform.tf | 0 .../configs/remote/terraform_override.tf | 19 ++++++++ 7 files changed, 81 insertions(+), 24 deletions(-) create mode 100644 perf/terraform/configs/README.md delete mode 100644 perf/terraform/configs/ci/terraform_override.tf create mode 100644 perf/terraform/configs/remote/.terraform.lock.hcl rename perf/terraform/configs/{ci => remote}/terraform.tf (100%) create mode 100644 perf/terraform/configs/remote/terraform_override.tf diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 396968832..a417e74c0 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -2,7 +2,7 @@ name: libp2p perf test # How to configure a repository for running this workflow: # 1. Configure auth for the AWS provider as per https://registry.terraform.io/providers/hashicorp/aws/latest/docs#authentication-and-configuration -# 2. Run 'terraform init' and 'terraform apply' in 'perf/terraform/configs/ci' to create the resources needed for this workflow +# 2. Run 'terraform init' and 'terraform apply' in 'perf/terraform/configs/remote' to create the resources needed for this workflow # 3. Go to https://console.aws.amazon.com/iamv2/home?#/users/details/perf?section=security_credentials # 4. Click 'Create access key' to get the access key ID and secret access key # 5. Go to https://github.com/libp2p/test-plans/settings/secrets/actions @@ -55,10 +55,10 @@ jobs: ref: ${{ github.ref }} - name: Init terraform run: terraform init - working-directory: perf/terraform/configs/ci + working-directory: perf/terraform/configs/local - name: Apply terraform run: terraform apply -auto-approve - working-directory: perf/terraform/configs/ci + working-directory: perf/terraform/configs/local - id: server name: Retrieve server's IP run: echo "ip=$(terraform output -raw server_ip)" @@ -82,4 +82,4 @@ jobs: - name: Destroy terraform if: always() run: terraform destroy -auto-approve - working-directory: perf/terraform/configs/ci + working-directory: perf/terraform/configs/local diff --git a/perf/terraform/.gitignore b/perf/terraform/.gitignore index 0b634c9a2..80795e780 100644 --- a/perf/terraform/.gitignore +++ b/perf/terraform/.gitignore @@ -24,7 +24,7 @@ override.tf.json *_override.tf.json # Include override files you do wish to add to version control using negated pattern -!configs/ci/terraform_override.tf +!configs/remote/terraform_override.tf # Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan # example: *tfplan* diff --git a/perf/terraform/configs/README.md b/perf/terraform/configs/README.md new file mode 100644 index 000000000..0e813a4b1 --- /dev/null +++ b/perf/terraform/configs/README.md @@ -0,0 +1,13 @@ +# Configs + +The terraform configs defined in this directory are used to provision the infrastructure for the libp2p perf tests. + +The configs are named after the type of backend they use. The defaults for what parts of infrastructure they provision differ between the two. + +## local + +Terraform state in this configuration will be stored locally. The defaults are configured for local development i.e. terraform apply will bring up ALL the infrastructure needed to run the perf tests. It will skip the steps required only for the CI environment. + +## remote + +Terraform state here will be stored remotely in an S3 bucket. The defaults are configured for the CI environment i.e. terraform apply will only bring up the long-lived infrastructure needed to run the perf tests in CI. It will skip launching EC2 instances because they will be brought up by the CI environment. diff --git a/perf/terraform/configs/ci/terraform_override.tf b/perf/terraform/configs/ci/terraform_override.tf deleted file mode 100644 index c7d7b92f0..000000000 --- a/perf/terraform/configs/ci/terraform_override.tf +++ /dev/null @@ -1,19 +0,0 @@ -terraform { - backend "s3" { - bucket = "terraform-tfstate" - key = "github.com/libp2p/test-plans/perf/terraform/configs/ci/terraform.tfstate" - region = "us-west-2" - } -} - -variable "ci_enabled" { - default = true -} - -variable "long_lived_enabled" { - default = true -} - -variable "short_lived_enabled" { - default = false -} diff --git a/perf/terraform/configs/remote/.terraform.lock.hcl b/perf/terraform/configs/remote/.terraform.lock.hcl new file mode 100644 index 000000000..e490491e1 --- /dev/null +++ b/perf/terraform/configs/remote/.terraform.lock.hcl @@ -0,0 +1,44 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/archive" { + version = "2.3.0" + hashes = [ + "h1:NaDbOqAcA9d8DiAS5/6+5smXwN3/+twJGb3QRiz6pNw=", + "zh:0869128d13abe12b297b0cd13b8767f10d6bf047f5afc4215615aabc39c2eb4f", + "zh:481ed837d63ba3aa45dd8736da83e911e3509dee0e7961bf5c00ed2644f807b3", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:9f08fe2977e2166849be24fb9f394e4d2697414d463f7996fd0d7beb4e19a29c", + "zh:9fe566deeafd460d27999ca0bbfd85426a5fcfcb40007b23884deb76da127b6f", + "zh:a1bd9a60925d9769e0da322e4523330ee86af9dc2e770cba1d0247a999ef29cb", + "zh:bb4094c8149f74308b22a87e1ac19bcccca76e8ef021b571074d9bccf1c0c6f0", + "zh:c8984c9def239041ce41ec8e19bbd76a49e74ed2024ff736dad60429dee89bcc", + "zh:ea4bb5ae73db1de3a586e62f39106f5e56770804a55aa5e6b4f642df973e0e75", + "zh:f44a9d596ecc3a8c5653f56ba0cd202ad93b49f76767f4608daf7260b813289e", + "zh:f5c5e6cc9f7f070020ab7d95fcc9ed8e20d5cf219978295a71236e22cbb6d508", + "zh:fd2273f51dcc8f43403bf1e425ba9db08a57c3ddcba5ad7a51742ccde21ca611", + ] +} + +provider "registry.terraform.io/hashicorp/aws" { + version = "4.67.0" + constraints = "4.67.0" + hashes = [ + "h1:5Zfo3GfRSWBaXs4TGQNOflr1XaYj6pRnVJLX5VAjFX4=", + "zh:0843017ecc24385f2b45f2c5fce79dc25b258e50d516877b3affee3bef34f060", + "zh:19876066cfa60de91834ec569a6448dab8c2518b8a71b5ca870b2444febddac6", + "zh:24995686b2ad88c1ffaa242e36eee791fc6070e6144f418048c4ce24d0ba5183", + "zh:4a002990b9f4d6d225d82cb2fb8805789ffef791999ee5d9cb1fef579aeff8f1", + "zh:559a2b5ace06b878c6de3ecf19b94fbae3512562f7a51e930674b16c2f606e29", + "zh:6a07da13b86b9753b95d4d8218f6dae874cf34699bca1470d6effbb4dee7f4b7", + "zh:768b3bfd126c3b77dc975c7c0e5db3207e4f9997cf41aa3385c63206242ba043", + "zh:7be5177e698d4b547083cc738b977742d70ed68487ce6f49ecd0c94dbf9d1362", + "zh:8b562a818915fb0d85959257095251a05c76f3467caa3ba95c583ba5fe043f9b", + "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", + "zh:9c385d03a958b54e2afd5279cd8c7cbdd2d6ca5c7d6a333e61092331f38af7cf", + "zh:b3ca45f2821a89af417787df8289cb4314b273d29555ad3b2a5ab98bb4816b3b", + "zh:da3c317f1db2469615ab40aa6baba63b5643bae7110ff855277a1fb9d8eb4f2c", + "zh:dc6430622a8dc5cdab359a8704aec81d3825ea1d305bbb3bbd032b1c6adfae0c", + "zh:fac0d2ddeadf9ec53da87922f666e1e73a603a611c57bcbc4b86ac2821619b1d", + ] +} diff --git a/perf/terraform/configs/ci/terraform.tf b/perf/terraform/configs/remote/terraform.tf similarity index 100% rename from perf/terraform/configs/ci/terraform.tf rename to perf/terraform/configs/remote/terraform.tf diff --git a/perf/terraform/configs/remote/terraform_override.tf b/perf/terraform/configs/remote/terraform_override.tf new file mode 100644 index 000000000..86cafc575 --- /dev/null +++ b/perf/terraform/configs/remote/terraform_override.tf @@ -0,0 +1,19 @@ +terraform { + # backend "s3" { + # bucket = "terraform-tfstate" + # key = "github.com/libp2p/test-plans/perf/terraform/configs/remote/terraform.tfstate" + # region = "us-west-2" + # } +} + +variable "ci_enabled" { + default = true +} + +variable "long_lived_enabled" { + default = true +} + +variable "short_lived_enabled" { + default = false +} From d20bfdbd464d604ae859f5f25a312fc48907e4ca Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 12:20:55 +0200 Subject: [PATCH 27/41] debug: galorgh --- .github/workflows/perf.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index a417e74c0..9c22bc6bb 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -51,7 +51,7 @@ jobs: - name: Checkout test-plans uses: actions/checkout@v3 with: - repository: libp2p/test-plans + repository: galorgh/test-plans ref: ${{ github.ref }} - name: Init terraform run: terraform init From 67faaa1b21363d6f1b8d2be577a49248291a3ee9 Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 12:22:29 +0200 Subject: [PATCH 28/41] fix: checkout test-plans first --- .github/workflows/perf.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 9c22bc6bb..9fba390b0 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -31,6 +31,11 @@ jobs: TF_VAR_long_lived_enabled: false TF_VAR_short_lived_enabled: true steps: + - name: Checkout test-plans + uses: actions/checkout@v3 + with: + repository: galorgh/test-plans + ref: ${{ github.ref }} - id: ssh name: Generate SSH key run: | @@ -48,11 +53,6 @@ jobs: git config --global user.name "${GITHUB_ACTOR}" - name: Configure terraform uses: hashicorp/setup-terraform@633666f66e0061ca3b725c73b2ec20cd13a8fdd1 # v2.0.3 - - name: Checkout test-plans - uses: actions/checkout@v3 - with: - repository: galorgh/test-plans - ref: ${{ github.ref }} - name: Init terraform run: terraform init working-directory: perf/terraform/configs/local From 7877d47f2bb3ab5d7b9f4221d3dca7203573b95f Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 12:25:15 +0200 Subject: [PATCH 29/41] fix: destroy only if init succeeded --- .github/workflows/perf.yml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 9fba390b0..03df075c3 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -40,13 +40,13 @@ jobs: name: Generate SSH key run: | make ssh-keygen - private-key="$(cat terraform/modules/short_lived/files/perf)" - echo ":add-mask:${private-key}" - echo "private-key=${private-key}" >> $GITHUB_OUTPUT + key="$(cat terraform/modules/short_lived/files/perf)" + echo ":add-mask:${key}" + echo "key=${key}" >> $GITHUB_OUTPUT - name: Configure SSH uses: webfactory/ssh-agent@d4b9b8ff72958532804b70bbe600ad43b36d5f2e # v0.8.0 with: - ssh-private-key: ${{ steps.ssh.outputs.private-key }} + ssh-private-key: ${{ steps.ssh.outputs.key }} - name: Configure git run: | git config --global user.email "${GITHUB_ACTOR}@users.noreply.github.com>" @@ -54,7 +54,10 @@ jobs: - name: Configure terraform uses: hashicorp/setup-terraform@633666f66e0061ca3b725c73b2ec20cd13a8fdd1 # v2.0.3 - name: Init terraform - run: terraform init + id: init + run: | + terraform init + echo "status=$?" >> $GITHUB_OUTPUT working-directory: perf/terraform/configs/local - name: Apply terraform run: terraform apply -auto-approve @@ -80,6 +83,6 @@ jobs: git commit -m "perf: update benchmark results" git push - name: Destroy terraform - if: always() + if: always() && steps.init.outputs.status == 0 run: terraform destroy -auto-approve working-directory: perf/terraform/configs/local From ecd86065652da76d9cceee512eb1249111b01887 Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 12:32:55 +0200 Subject: [PATCH 30/41] fix: ssh private key masking --- .github/workflows/perf.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 03df075c3..968b7747c 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -40,9 +40,12 @@ jobs: name: Generate SSH key run: | make ssh-keygen - key="$(cat terraform/modules/short_lived/files/perf)" - echo ":add-mask:${key}" - echo "key=${key}" >> $GITHUB_OUTPUT + echo "key<> $GITHUB_OUTPUT + while read -r line; do + echo "::add-mask::$line" + echo "$line" >> $GITHUB_OUTPUT + done < terraform/modules/short_lived/files/perf + echo "EOF" >> $GITHUB_OUTPUT - name: Configure SSH uses: webfactory/ssh-agent@d4b9b8ff72958532804b70bbe600ad43b36d5f2e # v0.8.0 with: From 9d43e9c473b8f2e685c1f51490a9c34c66abca07 Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 12:39:12 +0200 Subject: [PATCH 31/41] fix: ip publishing --- perf/terraform/configs/local/terraform.tf | 8 ++++++++ perf/terraform/modules/short_lived/main.tf | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/perf/terraform/configs/local/terraform.tf b/perf/terraform/configs/local/terraform.tf index 92261b120..af9585401 100644 --- a/perf/terraform/configs/local/terraform.tf +++ b/perf/terraform/configs/local/terraform.tf @@ -110,3 +110,11 @@ module "short_lived_client" { depends_on = [module.long_lived_client] } + +output "client_ip" { + value = var.short_lived_enabled ? module.short_lived_client[0].public_ip : null +} + +output "server_ip" { + value = var.short_lived_enabled ? module.short_lived_server[0].public_ip : null +} diff --git a/perf/terraform/modules/short_lived/main.tf b/perf/terraform/modules/short_lived/main.tf index f21c032e3..17782a51c 100644 --- a/perf/terraform/modules/short_lived/main.tf +++ b/perf/terraform/modules/short_lived/main.tf @@ -23,3 +23,7 @@ resource "aws_instance" "perf" { key_name = aws_key_pair.perf.key_name } + +output "public_ip" { + value = aws_instance.perf.public_ip +} From 68ca9eb21da14117c346940534af92069418d6b9 Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 12:43:54 +0200 Subject: [PATCH 32/41] fix: retrieval of terraform output --- .github/workflows/perf.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 968b7747c..9ea35c41c 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -68,9 +68,11 @@ jobs: - id: server name: Retrieve server's IP run: echo "ip=$(terraform output -raw server_ip)" + working-directory: perf/terraform/configs/local - id: client name: Retrieve client's IP run: echo "ip=$(terraform output -raw client_ip)" + working-directory: perf/terraform/configs/local - name: Download dependencies run: npm ci working-directory: perf/runner From 7a8c5502f828adb22c1c4e92f896b810ed8c1ef8 Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 12:46:02 +0200 Subject: [PATCH 33/41] fix: updating github outputs --- .github/workflows/perf.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 9ea35c41c..a8fad7b11 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -67,11 +67,11 @@ jobs: working-directory: perf/terraform/configs/local - id: server name: Retrieve server's IP - run: echo "ip=$(terraform output -raw server_ip)" + run: echo "ip=$(terraform output -raw server_ip)" >> $GITHUB_OUTPUT working-directory: perf/terraform/configs/local - id: client name: Retrieve client's IP - run: echo "ip=$(terraform output -raw client_ip)" + run: echo "ip=$(terraform output -raw client_ip)" >> $GITHUB_OUTPUT working-directory: perf/terraform/configs/local - name: Download dependencies run: npm ci From 22df444e930e874e3f3d73820e420a0d8cb40a46 Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 12:56:13 +0200 Subject: [PATCH 34/41] fix: usage of terraform wrapper --- .github/workflows/perf.yml | 14 ++++++-------- perf/terraform/configs/local/terraform.tf | 4 ++++ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index a8fad7b11..92ad1d9c5 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -58,28 +58,26 @@ jobs: uses: hashicorp/setup-terraform@633666f66e0061ca3b725c73b2ec20cd13a8fdd1 # v2.0.3 - name: Init terraform id: init - run: | - terraform init - echo "status=$?" >> $GITHUB_OUTPUT + run: terraform init working-directory: perf/terraform/configs/local - name: Apply terraform run: terraform apply -auto-approve working-directory: perf/terraform/configs/local - id: server name: Retrieve server's IP - run: echo "ip=$(terraform output -raw server_ip)" >> $GITHUB_OUTPUT + run: terraform output -raw server_ip working-directory: perf/terraform/configs/local - id: client name: Retrieve client's IP - run: echo "ip=$(terraform output -raw client_ip)" >> $GITHUB_OUTPUT + run: terraform output -raw client_ip working-directory: perf/terraform/configs/local - name: Download dependencies run: npm ci working-directory: perf/runner - name: Run tests env: - SERVER_IP: ${{ steps.server.outputs.ip }} - CLIENT_IP: ${{ steps.client.outputs.ip }} + SERVER_IP: ${{ steps.server.outputs.stdout }} + CLIENT_IP: ${{ steps.client.outputs.stdout }} run: npm run start -- --client-public-ip $CLIENT_IP --server-public-ip $SERVER_IP working-directory: perf/runner - name: Push @@ -88,6 +86,6 @@ jobs: git commit -m "perf: update benchmark results" git push - name: Destroy terraform - if: always() && steps.init.outputs.status == 0 + if: always() && steps.init.outputs.exitcode == 0 run: terraform destroy -auto-approve working-directory: perf/terraform/configs/local diff --git a/perf/terraform/configs/local/terraform.tf b/perf/terraform/configs/local/terraform.tf index af9585401..8f3845249 100644 --- a/perf/terraform/configs/local/terraform.tf +++ b/perf/terraform/configs/local/terraform.tf @@ -118,3 +118,7 @@ output "client_ip" { output "server_ip" { value = var.short_lived_enabled ? module.short_lived_server[0].public_ip : null } + +output "test" { + value = "hello world" +} From 4ee5312b1ea2ccab829c33013e0905dbc972826e Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 13:28:29 +0200 Subject: [PATCH 35/41] fix: push --- .github/workflows/perf.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 92ad1d9c5..ccc4a4db7 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -12,6 +12,11 @@ name: libp2p perf test on: workflow_dispatch: + inputs: + push: + description: 'Push the benchmark results to the repository' + required: false + default: 'true' jobs: perf: @@ -81,10 +86,18 @@ jobs: run: npm run start -- --client-public-ip $CLIENT_IP --server-public-ip $SERVER_IP working-directory: perf/runner - name: Push + if: github.event.inputs.push == 'true' run: | - git add perf/runner/benchmark-results.json + git add benchmark-results.json git commit -m "perf: update benchmark results" git push + working-directory: perf/runner + - name: Archive + if: github.event.intputs.push == 'false' + uses: actions/upload-artifact@v2 + with: + name: benchmark-results + path: perf/runner/benchmark-results.json - name: Destroy terraform if: always() && steps.init.outputs.exitcode == 0 run: terraform destroy -auto-approve From 08cbcee76f7a36c359f576b3b4b549b0404a7a93 Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 13:31:31 +0200 Subject: [PATCH 36/41] Revert "debug: galorgh" This reverts commit d20bfdbd464d604ae859f5f25a312fc48907e4ca. --- .github/workflows/perf.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index ccc4a4db7..328ef51b5 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -39,7 +39,7 @@ jobs: - name: Checkout test-plans uses: actions/checkout@v3 with: - repository: galorgh/test-plans + repository: ${{ github.repository }} ref: ${{ github.ref }} - id: ssh name: Generate SSH key From a7c4b505efb61c57a122f683af2605c6f3d2bc34 Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 13:33:59 +0200 Subject: [PATCH 37/41] chore: add todo in remote perf config --- perf/terraform/configs/remote/terraform_override.tf | 1 + 1 file changed, 1 insertion(+) diff --git a/perf/terraform/configs/remote/terraform_override.tf b/perf/terraform/configs/remote/terraform_override.tf index 86cafc575..383c6d23b 100644 --- a/perf/terraform/configs/remote/terraform_override.tf +++ b/perf/terraform/configs/remote/terraform_override.tf @@ -1,4 +1,5 @@ terraform { + # TODO: Uncomment to start using remote backend # backend "s3" { # bucket = "terraform-tfstate" # key = "github.com/libp2p/test-plans/perf/terraform/configs/remote/terraform.tfstate" From 707b46d6ec8366554103fe62b8e8631af8be836f Mon Sep 17 00:00:00 2001 From: galargh Date: Mon, 29 May 2023 13:36:22 +0200 Subject: [PATCH 38/41] chore: fix ssh key creation instructions --- perf/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perf/README.md b/perf/README.md index 4a2e01fc9..36c17edf4 100644 --- a/perf/README.md +++ b/perf/README.md @@ -12,7 +12,7 @@ Benchmark results can be visualized with https://observablehq.com/@mxinden-works ### Bootstrap -1. Save your public SSH key as the file `./short_lived/files/perf.pub`; or generate a new key pair with `make ssh-keygen` and add it to your SSH agent with `make ssh-add`. +1. Save your public SSH key as the file `./terraform/modules/short_lived/files/perf.pub`; or generate a new key pair with `make ssh-keygen` and add it to your SSH agent with `make ssh-add`. 2. `cd terraform/configs/local` 3. `terraform init` 4. `terraform apply` From 020d5097fecb4c6e2c271d8748bb5841fe0d9e1a Mon Sep 17 00:00:00 2001 From: Piotr Galar Date: Tue, 30 May 2023 10:08:21 +0200 Subject: [PATCH 39/41] chore: remove leftover debugging output --- perf/terraform/configs/local/terraform.tf | 3 --- 1 file changed, 3 deletions(-) diff --git a/perf/terraform/configs/local/terraform.tf b/perf/terraform/configs/local/terraform.tf index 8f3845249..1027f750d 100644 --- a/perf/terraform/configs/local/terraform.tf +++ b/perf/terraform/configs/local/terraform.tf @@ -119,6 +119,3 @@ output "server_ip" { value = var.short_lived_enabled ? module.short_lived_server[0].public_ip : null } -output "test" { - value = "hello world" -} From 4179aa67c5836d880d88b000ec254d60cfdfc38c Mon Sep 17 00:00:00 2001 From: Piotr Galar Date: Wed, 31 May 2023 13:29:10 +0200 Subject: [PATCH 40/41] chore: update perf/terraform/configs/remote/terraform_override.tf --- perf/terraform/configs/remote/terraform_override.tf | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/perf/terraform/configs/remote/terraform_override.tf b/perf/terraform/configs/remote/terraform_override.tf index 383c6d23b..e12102fb0 100644 --- a/perf/terraform/configs/remote/terraform_override.tf +++ b/perf/terraform/configs/remote/terraform_override.tf @@ -1,10 +1,9 @@ terraform { - # TODO: Uncomment to start using remote backend - # backend "s3" { - # bucket = "terraform-tfstate" - # key = "github.com/libp2p/test-plans/perf/terraform/configs/remote/terraform.tfstate" - # region = "us-west-2" - # } + backend "s3" { + bucket = "libp2p-terraform-state" + key = "github.com/libp2p/test-plans/perf/terraform/configs/remote/terraform.tfstate" + region = "us-west-2" + } } variable "ci_enabled" { From ad8ef48d97fdb0224c07b12d0551dc66e8906d02 Mon Sep 17 00:00:00 2001 From: Piotr Galar Date: Fri, 2 Jun 2023 13:56:29 +0200 Subject: [PATCH 41/41] chore: update local config defaults to assume long lived infra is up Co-authored-by: Max Inden --- .github/workflows/perf.yml | 3 --- perf/terraform/configs/README.md | 4 ++-- perf/terraform/configs/local/terraform.tf | 2 +- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 328ef51b5..9c0423502 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -32,9 +32,6 @@ jobs: AWS_SECRET_ACCESS_KEY: ${{ secrets.PERF_AWS_SECRET_ACCESS_KEY }} TF_IN_AUTOMATION: 1 TF_INPUT: 0 - TF_VAR_ci_enabled: false - TF_VAR_long_lived_enabled: false - TF_VAR_short_lived_enabled: true steps: - name: Checkout test-plans uses: actions/checkout@v3 diff --git a/perf/terraform/configs/README.md b/perf/terraform/configs/README.md index 0e813a4b1..97ce004a4 100644 --- a/perf/terraform/configs/README.md +++ b/perf/terraform/configs/README.md @@ -6,8 +6,8 @@ The configs are named after the type of backend they use. The defaults for what ## local -Terraform state in this configuration will be stored locally. The defaults are configured for local development i.e. terraform apply will bring up ALL the infrastructure needed to run the perf tests. It will skip the steps required only for the CI environment. +Terraform state in this configuration will be stored locally. The defaults are configured for a single performance benchmark run, i.e. `terraform apply` will bring up short-lived infrastructure only. It will skip long-lived infrastructure like the clean-up Lambda and the instance launch template. ## remote -Terraform state here will be stored remotely in an S3 bucket. The defaults are configured for the CI environment i.e. terraform apply will only bring up the long-lived infrastructure needed to run the perf tests in CI. It will skip launching EC2 instances because they will be brought up by the CI environment. +Terraform state here will be stored remotely in an S3 bucket. `terraform apply` will only bring up the long-lived infrastructure needed to run the performance benchmarks It will skip short-lived infrastructure like launching EC2 instances. diff --git a/perf/terraform/configs/local/terraform.tf b/perf/terraform/configs/local/terraform.tf index 1027f750d..22c745f5a 100644 --- a/perf/terraform/configs/local/terraform.tf +++ b/perf/terraform/configs/local/terraform.tf @@ -39,7 +39,7 @@ variable "ci_enabled" { variable "long_lived_enabled" { type = bool description = "Whether or not to create long lived resources (in CI, used across runs; e.g. VPCs)" - default = true + default = false } variable "short_lived_enabled" {