When launching a new Perf instance, first determine whether you are creating a Googler-only or a publicly available instance. Based on that, all resources except the GCS bucket will be created in the respective projects mentioned below.
Instance Type | GCP Project |
---|---|
Googlers-only | skia-infra-corp |
Public | skia-infra-public |
This is the bucket where Skia formatted JSONs are to be uploaded to trigger their ingestion. These buckets live in the skia-public project. To create a new bucket, update this terraform file
Determine which service account will be writing the input files into this bucket and provide that account with objectAdmins
permission.
Once created, it's recommended to create a folder specifically for ingestion e.g. gs://flutter-skia-perf-prod/ingest
.
This needs to be done from a machine on corp and also requires breakglass to the skia-infra-breakglass-policy
group,
or
grants add --wait_for_twosync --reason="b/377530262 -- <Reason for elevating>" \ skia-infra-breakglass-policy:2h
Note that there is a different connect script for each cluster.
Spanner
Note:
The gcp project to use in skia perf are listed below.
skia-infra-corp
.skia-infra-public
.Also, the instruction in spanner documentation asks to run script to breakglass again, you could ignore that step.
Navigate to the Spanner instance in the GCP project chosen above and follow the instructions in the spanner documentation to create the database.
Apply the schema to the database. The schema is located at //perf/go/sql/spanner/schema_spanner.go.
This creates the topic and subscription. Executes it from //perf folder.
Note
chrome-internal-experiment.json
.go run ./go/perf-tool config create-pubsub-topics-and-subscriptions \ --config_filename=./configs/spanner/chrome-internal-experiment.json
Create a cl to check in the config json file from step #3. Note that start_commit
field is used to define the starting point of k8s workflow.
CockroachDB Only
Port-forward the database:
$ ./kube/attach.sh skia-infra-public kubectl port-forward --namespace=perf perf-cockroachdb-0 25000:26257
From another shell on the same computer connect to the database:
cockroach sql --insecure --host=127.0.0.1:25000
Create the database:
root@perf-cockroachdb-public:26257/defaultdb> CREATE DATABASE flutter_flutter2; CREATE DATABASE Time: 24.075052ms
Use the newly created database:
root@perf-cockroachdb-public:26257/defaultdb> use flutter_flutter2;
Apply the schema to the database. The schema is found in //perf/go/sql/schema.go.
root@perf-cockroachdb-public:26257/defaultdb> CREATE TABLE ...
./backup/backup.sh
.perf-cockroachdb-backup
.Run the below cmd from the perf directory.
make push_backup
This creates the topic and subscription. Execute it from //perf folder.
Note
go run ./go/perf-tool config create-pubsub-topics-and-subscriptions \ --config_filename=./configs/angle.json
Spanner and CockroachDB
This configures the GCS bucket/directory to send PubSub events to that topic when new files arrive. Update the variable values based on the content of the json file.
For DIRECTORY, it should match with the name specified in the json file as part of the gs://<bucket name>/<DIRECTORY>
.
#/bin/bash # Creates the PubSub topic for Android Perf files and then ties it to GCS # notifications. set -e -x PROJECT_ID=skia-public TOPIC=perf-ingestion-flutter-flutter2 DIRECTORY=flutter-flutter BUCKET=gs://flutter-skia-perf-prod gsutil notification create -f json -e OBJECT_FINALIZE -t projects/${PROJECT_ID}/topics/${TOPIC} \ -p ${DIRECTORY} ${BUCKET}
Note that for buckets not owned by the Skia Infra team this command needs to be run by someone with admin rights on the bucket and also the ability to create the link to the pubsub receiver in the skia-public
project. For non-Skia Infra buckets I've found the easiest thing to do is give the requester privileges to the skia-public
project (for an hour) and have them run the above command.
Create a CL like this one to create a service account. Make sure it's in the correct project.
Give this service account read access to the bucket created in step 1 and Pub/Sub Editor role to both the topic and subscription created in step 5.
If you are creating a Googlers-only instance, the service accounts needs to be added to the auth-proxy roster so that it can access secrets in the GCP project. Create a CL like this one to do the same.
In k8s-config
repo, create a CL with a *-sa.yaml
file which points to the service account created in step 7:
apiVersion: v1 kind: ServiceAccount metadata: annotations: iam.gke.io/gcp-service-account: perf-<XXXX>@<CLUSTER>.iam.gserviceaccount.com name: perf-<XXXX>-internal namespace: perf
See this file as an example.
In k8s-config
repo, create a CL like this one, where you create a *-maintenance-*.yaml
file where you define the maintenance task for your perf instance.
In k8s-config
repo, create a CL like this one, where you create a *-sa.yaml
file which points to the service account created in step 7, and a *-ingest-*.yaml
file where you define the ingestor specs for your perf instance. In the ingest file, make sure to add the appropriate values for app
, serviceAccountName
and --config_filename
.
perf-tool ingest force-reingest --config_filename=./configs/flutter-flutter2.json
In k8s-config
repo, create a CL like this one, where you create a *-fe-*.yaml
file. Ensure to have appropriate values for app
, serviceAccountName
, name
and --config_filename
flags.
Then run skfe/generate.sh
. This will create the envoy config to route traffic to the instance.
For skia-infra-public:
For skia-infra-corp:
In k8s-config
repo, create a CL like this one. Modify perf.json
to include your instance's URL. Then run prober/generate.sh
to update allprobersk.json
file.