Skip to content

Latest commit

 

History

87 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

azurelocal-loadtools

Azure Local Load Testing Framework

Azure Local

Documentation: azurelocal.cloud | Solutions: Azure Local Solutions

Automated performance and load testing for Azure Local clusters — storage, network, database, and system stress — with standardised reporting.

Status: pre-release (0.1.0), not proven on a live cluster. The scripts are implemented and unit-tested with mocks and fixtures. None of the tools has been run end to end on a real Azure Local cluster yet. Expect breaking changes and prove each tool on a non-production cluster before you rely on it. The single truth table is Implementation status.


Repository Structure

azurelocal-loadtools/
├── common/                  # Shared PowerShell modules, helpers, Ansible role, Bicep
│   └── modules/             #   ConfigManager, Logger, StateManager, CredentialManager,
│                            #   MonitoringManager, ReportGenerator, ResultAnalysis, FaultInjection
├── config/                  # Central variable reference (variables.example.yml, JSON schema)
├── tools/                   # One folder per test tool (scripts, config/profiles, monitoring, reports, tests)
│   ├── vmfleet/             #   Storage IOPS / throughput / latency (DiskSpd)
│   ├── fio/                 #   Fine-grained storage I/O benchmarking
│   ├── iperf/               #   Network bandwidth, jitter, packet loss (TCP/UDP, not RDMA)
│   ├── hammerdb/            #   SQL Server OLTP / OLAP benchmarking
│   └── stress-ng/           #   CPU, memory, and system stress testing
├── docs/                    # Documentation (VitePress source)
├── tests/                   # Pester tests for the common modules, CI check script, fixtures
├── repo-management/         # How the repository is configured
└── .github/workflows/       # ci.yml, release-please.yml, deploy-docs.yml

Monitoring collectors and report templates live inside each tool (tools/<tool>/monitoring, tools/<tool>/reports/templates). Generated reports go to reports/<run-id> at run time and are not committed.


Quick Start

# 1. Clone and configure
git clone https://github.com/AzureLocal/azurelocal-loadtools
cd azurelocal-loadtools
Copy-Item config\variables\variables.example.yml config\variables\variables.yml
# Edit config\variables\variables.yml with your cluster details (example values only in the repo)

# 2. Run a VMFleet storage benchmark with the General profile
.\tools\vmfleet\Invoke-VMFleetPipeline.ps1 `
    -ClusterConfigPath "config\clusters\my-cluster.yml" `
    -ProfilePath "tools\vmfleet\config\profiles\general.yml" `
    -FleetAdminCredential (Get-Credential -Message "Fleet VM admin")

The parameter names above come from the script param blocks. See the documentation site for the rest.


Tools and status

Every tool follows the same pattern: Install → Run Test → Collect Results.

Tool What It Tests Target OS Implemented Unit-tested Proven on hardware
VMFleet Storage IOPS, throughput, latency via DiskSpd VM fleet Windows (HCI host) Yes Yes No
fio Fine-grained storage I/O benchmarking Linux VMs Yes Yes No
iPerf3 Network bandwidth, jitter, packet loss (not RDMA) Linux / Windows Yes Yes No
HammerDB SQL Server OLTP / OLAP benchmarking Windows VMs Yes Yes No
stress-ng CPU, memory, and system stress testing Linux VMs Yes Yes No

"Unit-tested" means Pester tests with mocks and fixtures, no cluster. Details, test counts and known gaps: Implementation status. The roadmap agrees with this table.


What is in this release

  • Storage tests that account for the CSV cache. Learn warns that DiskSpd and VMFleet "may produce worse results with the CSV in-memory read cache enabled than without it". The VMFleet profile guide explains how to record and compare results.
  • Opt-in failure injection. Measure storage under one paused node or one drive out, as the Azure Well-Architected Framework guidance for Azure Local recommends. Never a default, needs -AllowFault and a confirmation, prints the undo command first, refuses when the cluster is unhealthy: Failure injection.
  • Offline reports and a regression gate. HTML and CSV from a result file, baseline comparison with exit code 0 / 1 / 2, trend: Reports and regression gate.
  • Day-2 smoke. A 15-minute General run with an exit code and a JSON result for a readiness gate: Day-2 smoke.
  • CI. Analyzer, Pester per suite and a link check on every pull request: CI/CD.

Documentation


Prerequisites

  • Azure Local cluster registered with Azure Arc (the docs target 12.2609 (latest))
  • Azure subscription with appropriate RBAC
  • PowerShell 7.2+
  • See tool-specific requirements in the documentation

Contributing

See Contributing Guide for coding standards, branch strategy, and PR guidelines. Run pwsh -File tests/Invoke-CiChecks.ps1 -Check All before you open a pull request.

Releases

Packages

Contributors

Languages