Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[perf] Add pipeline template and storage pipelines #24894

Merged
merged 52 commits into from
Jun 27, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
543f359
Add sdk/storage/perf.yml
mikeharder Oct 12, 2021
0e644e6
Checkout perf-automation branch
mikeharder Oct 12, 2021
d1e1f91
fetchDepth: 1
mikeharder Oct 12, 2021
9170731
revert fetchDepth
mikeharder Oct 12, 2021
91c130d
Create config.yml, run real tests
mikeharder Oct 14, 2021
79e7456
Use python3.7
mikeharder Oct 26, 2021
1d2128a
Debug logging
mikeharder Oct 27, 2021
1f444a2
Fix build path
mikeharder Oct 27, 2021
c7dde69
Publish results.json
mikeharder Oct 27, 2021
720a89a
Run 5 iterations of real-world tests
mikeharder Oct 27, 2021
ce7371a
Run GA packages to compare to main
mikeharder Oct 28, 2021
b741789
Add ResourceType parameter to TestResources.ps1 scripts
mikeharder Nov 2, 2021
a63b537
Add perf-resources.json
mikeharder Nov 2, 2021
edae583
Add ResourceType parameter
mikeharder Nov 9, 2021
d8c25ba
output env vars
mikeharder Nov 9, 2021
0a04086
Deploy test resources
mikeharder Nov 9, 2021
33571ee
Fix template path
mikeharder Nov 9, 2021
94c6591
Fix template path
mikeharder Nov 9, 2021
2541cdb
Fix parameter list
mikeharder Nov 9, 2021
9653fad
Fix yaml parameter definitions
mikeharder Nov 11, 2021
686ca75
Fix path to PSModule-Helpers.ps1
mikeharder Nov 11, 2021
b94d4d3
Revert path change
mikeharder Nov 11, 2021
82d348c
Change checkout paths
mikeharder Nov 11, 2021
7829eac
Run tests and remove test resources
mikeharder Nov 11, 2021
02ba340
Use dedicated perf agent pool
mikeharder Nov 13, 2021
92edf2f
Revert System.Debug
mikeharder Dec 7, 2021
9104fdd
Print results
mikeharder Dec 7, 2021
8ad36a2
Merge branch 'main' into feature/perf-automation
mikeharder May 25, 2022
cd6230d
Update eng/common
mikeharder May 25, 2022
6bb810c
Remove JSON resources
mikeharder May 25, 2022
4666592
Add perf template
mikeharder May 25, 2022
6456b02
Add pipeline for storage-blob
mikeharder May 25, 2022
6e34f4a
Set PythonVersion to 3.7
mikeharder May 26, 2022
9d7fc0c
Fix indentation
mikeharder May 26, 2022
077a9a4
Add pipeline for file-share
mikeharder May 26, 2022
f1a01cc
Remove old perf pipeline
mikeharder May 26, 2022
f5dba20
Add pipeline for datalake
mikeharder May 26, 2022
0c80401
Merge branch 'main' into feature/perf-automation
mikeharder Jun 7, 2022
8623511
Update default package versions
mikeharder Jun 7, 2022
103f48e
Merge branch 'main' into feature/perf-automation
mikeharder Jun 7, 2022
7607709
Merge branch 'main' into feature/perf-automation
mikeharder Jun 8, 2022
79f0695
Merge branch 'main' into feature/perf-automation
mikeharder Jun 13, 2022
df2b4b2
Print results.csv and results.json separately
mikeharder Jun 13, 2022
5a8851c
Merge branch 'main' into feature/perf-automation
mikeharder Jun 16, 2022
91cc8bc
Add EndpointSuffix to connection string
mikeharder Jun 16, 2022
1c202d4
Merge branch 'main' into feature/perf-automation
mikeharder Jun 17, 2022
f14da8c
Use main branch of azure-sdk-tools
mikeharder Jun 17, 2022
1911d8a
Restore sdk/storage/test-resources.json
mikeharder Jun 17, 2022
3c32e8b
Merge branch 'main' into feature/perf-automation
mikeharder Jun 18, 2022
50ea1c6
Merge branch 'main' into feature/perf-automation
mikeharder Jun 20, 2022
2a4dd37
Merge branch 'main' into feature/perf-automation
mikeharder Jun 24, 2022
26c0909
Import globals.yml, use absolute paths
mikeharder Jun 25, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 111 additions & 0 deletions eng/pipelines/templates/jobs/perf.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
parameters:
- name: serviceDirectory
type: string
default: ''
- name: services
type: string
default: ''
- name: packageVersions
type: string
default: '.*'
- name: tests
type: string
default: ''
- name: arguments
type: string
default: ''
- name: iterations
type: number
default: '5'
- name: envVars
type: object
default: {}
- name: additionalArguments
type: string
default: ''

variables:
- template: /eng/pipelines/templates/variables/globals.yml
- name: Pool
value: 'azsdk-pool-mms-ubuntu-2004-perf'
- name: OSVmImage
value: 'MMSUbuntu20.04'
- name: PythonVersion
value: '3.7'

resources:
repositories:
- repository: azure-sdk-tools
type: github
endpoint: Azure
name: Azure/azure-sdk-tools

jobs:
- job: Perf
timeoutInMinutes: 360
pool:
name: $(Pool)
vmImage: $(OSVmImage)
steps:
- checkout: self
path: s

- checkout: azure-sdk-tools
path: s/azure-sdk-tools

- template: /eng/common/pipelines/templates/steps/verify-agent-os.yml
parameters:
AgentImage: $(OSVmImage)

- task: UsePythonVersion@0
displayName: "Use Python $(PythonVersion)"
inputs:
versionSpec: $(PythonVersion)

- template: /eng/common/TestResources/deploy-test-resources.yml
parameters:
ServiceDirectory: ${{ parameters.serviceDirectory }}
Location: westus
ResourceType: perf

- pwsh: |
set-content -path config.yml -value "WorkingDirectories:"
add-content -path config.yml -value " Python: $(Agent.BuildDirectory)/s"
workingDirectory: azure-sdk-tools/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation
displayName: Create config.yml

- script: >-
dotnet run -- run
--no-sync
--languages python
--services "${{ parameters.services }}"
--package-versions "${{ parameters.packageVersions }}"
--tests "${{ parameters.tests }}"
--arguments "${{ parameters.arguments }}"
--iterations ${{ parameters.iterations }}
${{ parameters.additionalArguments }}
workingDirectory: azure-sdk-tools/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation
env:
${{ each var in parameters.EnvVars }}:
${{ var.key }}: ${{ var.value }}
displayName: Run perf tests

- pwsh: |
get-content results.csv
workingDirectory: azure-sdk-tools/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/results
displayName: Print results.csv

- pwsh: |
get-content results.json
workingDirectory: azure-sdk-tools/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/results
displayName: Print results.json

- template: /eng/common/TestResources/remove-test-resources.yml
parameters:
ServiceDirectory: ${{ parameters.serviceDirectory }}
ResourceType: perf

- task: PublishPipelineArtifact@1
inputs:
targetPath: azure-sdk-tools/tools/perf-automation/Azure.Sdk.Tools.PerfAutomation/results
artifactName: results
21 changes: 21 additions & 0 deletions sdk/storage/azure-storage-blob/perf-resources.bicep
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
param baseName string = resourceGroup().name
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: '${baseName}blob'
location: location
kind: 'BlockBlobStorage'
sku: {
name: 'Premium_LRS'
}
}

var name = storageAccount.name
var key = storageAccount.listKeys().keys[0].value
var connectionString = 'DefaultEndpointsProtocol=https;AccountName=${name};AccountKey=${key}'

output AZURE_STORAGE_ACCOUNT_NAME string = name
output AZURE_STORAGE_ACCOUNT_KEY string = key
output AZURE_STORAGE_CONNECTION_STRING string = connectionString
output STANDARD_STORAGE_CONNECTION_STRING string = connectionString
output STORAGE_CONNECTION_STRING string = connectionString
32 changes: 32 additions & 0 deletions sdk/storage/azure-storage-blob/perf.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
parameters:
- name: packageVersions
displayName: PackageVersions (regex of package versions to run)
type: string
default: '12|source'
- name: tests
displayName: Tests (regex of tests to run)
type: string
default: '^(download|upload|list-blobs)$'
- name: arguments
displayName: Arguments (regex of arguments to run)
type: string
default: '(10240)|(10485760)|(1073741824)|(5 )|(500 )|(50000 )'
- name: iterations
displayName: Iterations (times to run each test)
type: number
default: '5'
- name: additionalArguments
displayName: AdditionalArguments (passed to PerfAutomation)
type: string
default: ' '

extends:
template: /eng/pipelines/templates/jobs/perf.yml
parameters:
serviceDirectory: storage/azure-storage-blob
services: "^storage-blob$"
packageVersions: ${{ parameters.packageVersions }}
tests: ${{ parameters.tests }}
arguments: ${{ parameters.arguments }}
iterations: ${{ parameters.iterations }}
additionalArguments: ${{ parameters.additionalArguments }}
30 changes: 30 additions & 0 deletions sdk/storage/azure-storage-file-datalake/perf-resources.bicep
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
param baseName string = resourceGroup().name
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: '${baseName}dlake'
location: location
kind: 'BlockBlobStorage'
sku: {
name: 'Premium_LRS'
}
properties: {
isHnsEnabled: true
}
}

var name = storageAccount.name
var key = storageAccount.listKeys().keys[0].value

// EndpointSuffix is required by azure-storage-file-datalake 12.7.0 and earlier (fixed in #24779)
var connectionString = 'DefaultEndpointsProtocol=https;AccountName=${name};AccountKey=${key};EndpointSuffix=core.windows.net'

// .NET
output DATALAKE_STORAGE_ACCOUNT_NAME string = name
output DATALAKE_STORAGE_ACCOUNT_KEY string = key

// Java, JS
output STORAGE_CONNECTION_STRING string = connectionString

// Python
output AZURE_STORAGE_CONNECTION_STRING string = connectionString
32 changes: 32 additions & 0 deletions sdk/storage/azure-storage-file-datalake/perf.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
parameters:
- name: packageVersions
displayName: PackageVersions (regex of package versions to run)
type: string
default: '12|source'
- name: tests
displayName: Tests (regex of tests to run)
type: string
default: '^(download|upload)$'
- name: arguments
displayName: Arguments (regex of arguments to run)
type: string
default: '(10240)|(10485760)|(1073741824)'
- name: iterations
displayName: Iterations (times to run each test)
type: number
default: '5'
- name: additionalArguments
displayName: AdditionalArguments (passed to PerfAutomation)
type: string
default: ' '

extends:
template: /eng/pipelines/templates/jobs/perf.yml
parameters:
serviceDirectory: storage/azure-storage-file-datalake
services: "^storage-file-datalake$"
packageVersions: ${{ parameters.packageVersions }}
tests: ${{ parameters.tests }}
arguments: ${{ parameters.arguments }}
iterations: ${{ parameters.iterations }}
additionalArguments: ${{ parameters.additionalArguments }}
30 changes: 30 additions & 0 deletions sdk/storage/azure-storage-file-share/perf-resources.bicep
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
param baseName string = resourceGroup().name
param location string = resourceGroup().location

resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' = {
name: '${baseName}files'
location: location
kind: 'FileStorage'
sku: {
name: 'Premium_LRS'
}

resource service 'fileServices' = {
name: 'default'
properties: {
shareDeleteRetentionPolicy: {
enabled: false
}
}
}
}

var name = storageAccount.name
var key = storageAccount.listKeys().keys[0].value
var connectionString = 'DefaultEndpointsProtocol=https;AccountName=${name};AccountKey=${key}'

output AZURE_STORAGE_ACCOUNT_NAME string = name
output AZURE_STORAGE_ACCOUNT_KEY string = key
output AZURE_STORAGE_CONNECTION_STRING string = connectionString
output STANDARD_STORAGE_CONNECTION_STRING string = connectionString
output STORAGE_CONNECTION_STRING string = connectionString
32 changes: 32 additions & 0 deletions sdk/storage/azure-storage-file-share/perf.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
parameters:
- name: packageVersions
displayName: PackageVersions (regex of package versions to run)
type: string
default: '12|source'
- name: tests
displayName: Tests (regex of tests to run)
type: string
default: '^(download|upload)$'
- name: arguments
displayName: Arguments (regex of arguments to run)
type: string
default: '(10240)|(10485760)|(1073741824)'
- name: iterations
displayName: Iterations (times to run each test)
type: number
default: '5'
- name: additionalArguments
displayName: AdditionalArguments (passed to PerfAutomation)
type: string
default: ' '

extends:
template: /eng/pipelines/templates/jobs/perf.yml
parameters:
serviceDirectory: storage/azure-storage-file-share
services: "^storage-file-share$"
packageVersions: ${{ parameters.packageVersions }}
tests: ${{ parameters.tests }}
arguments: ${{ parameters.arguments }}
iterations: ${{ parameters.iterations }}
additionalArguments: ${{ parameters.additionalArguments }}