**Payload Performance Test:** - Add job cleanup after each iteration using DeleteJob() - Ensure isolated memory measurements between test runs **All Benchmark Tests:** - General improvements and maintenance updates
174 lines
4.2 KiB
Go
174 lines
4.2 KiB
Go
package benchmarks
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
// Sample server config YAML for benchmarking
|
|
const sampleServerConfig = `
|
|
base_path: /api/v1
|
|
data_dir: /data/fetchml
|
|
auth:
|
|
type: jwt
|
|
secret: "super-secret-key-for-benchmarking-only"
|
|
token_ttl: 3600
|
|
server:
|
|
address: :8080
|
|
tls:
|
|
enabled: true
|
|
cert_file: /etc/ssl/certs/server.crt
|
|
key_file: /etc/ssl/private/server.key
|
|
security:
|
|
max_request_size: 1048576
|
|
rate_limit: 100
|
|
cors_origins:
|
|
- https://app.fetchml.com
|
|
- https://admin.fetchml.com
|
|
queue:
|
|
backend: redis
|
|
sqlite_path: /data/queue.db
|
|
filesystem_path: /data/queue
|
|
fallback_to_filesystem: true
|
|
redis:
|
|
addr: localhost:6379
|
|
password: ""
|
|
db: 0
|
|
pool_size: 50
|
|
database:
|
|
driver: postgres
|
|
dsn: postgres://user:pass@localhost/fetchml?sslmode=disable
|
|
max_connections: 100
|
|
logging:
|
|
level: info
|
|
format: json
|
|
output: stdout
|
|
resources:
|
|
max_cpu_per_task: 8
|
|
max_memory_per_task: 32
|
|
max_gpu_per_task: 1
|
|
monitoring:
|
|
enabled: true
|
|
prometheus_port: 9090
|
|
`
|
|
|
|
type BenchmarkServerConfig struct {
|
|
BasePath string `yaml:"base_path"`
|
|
DataDir string `yaml:"data_dir"`
|
|
Auth BenchmarkAuthConfig `yaml:"auth"`
|
|
Server BenchmarkServerSection `yaml:"server"`
|
|
Security BenchmarkSecurityConfig `yaml:"security"`
|
|
Queue BenchmarkQueueConfig `yaml:"queue"`
|
|
Redis BenchmarkRedisConfig `yaml:"redis"`
|
|
Database BenchmarkDatabaseConfig `yaml:"database"`
|
|
Logging BenchmarkLoggingConfig `yaml:"logging"`
|
|
Resources BenchmarkResourceConfig `yaml:"resources"`
|
|
Monitoring BenchmarkMonitoringConfig `yaml:"monitoring"`
|
|
}
|
|
|
|
type BenchmarkAuthConfig struct {
|
|
Type string `yaml:"type"`
|
|
Secret string `yaml:"secret"`
|
|
TokenTTL int `yaml:"token_ttl"`
|
|
}
|
|
|
|
type BenchmarkServerSection struct {
|
|
Address string `yaml:"address"`
|
|
TLS BenchmarkTLSConfig `yaml:"tls"`
|
|
}
|
|
|
|
type BenchmarkTLSConfig struct {
|
|
Enabled bool `yaml:"enabled"`
|
|
CertFile string `yaml:"cert_file"`
|
|
KeyFile string `yaml:"key_file"`
|
|
}
|
|
|
|
type BenchmarkSecurityConfig struct {
|
|
MaxRequestSize int `yaml:"max_request_size"`
|
|
RateLimit int `yaml:"rate_limit"`
|
|
CORSOrigins []string `yaml:"cors_origins"`
|
|
}
|
|
|
|
type BenchmarkQueueConfig struct {
|
|
Backend string `yaml:"backend"`
|
|
SQLitePath string `yaml:"sqlite_path"`
|
|
FilesystemPath string `yaml:"filesystem_path"`
|
|
FallbackToFilesystem bool `yaml:"fallback_to_filesystem"`
|
|
}
|
|
|
|
type BenchmarkRedisConfig struct {
|
|
Addr string `yaml:"addr"`
|
|
Password string `yaml:"password"`
|
|
DB int `yaml:"db"`
|
|
PoolSize int `yaml:"pool_size"`
|
|
}
|
|
|
|
type BenchmarkDatabaseConfig struct {
|
|
Driver string `yaml:"driver"`
|
|
DSN string `yaml:"dsn"`
|
|
MaxConnections int `yaml:"max_connections"`
|
|
}
|
|
|
|
type BenchmarkLoggingConfig struct {
|
|
Level string `yaml:"level"`
|
|
Format string `yaml:"format"`
|
|
Output string `yaml:"output"`
|
|
}
|
|
|
|
type BenchmarkResourceConfig struct {
|
|
MaxCPUPerTask int `yaml:"max_cpu_per_task"`
|
|
MaxMemoryPerTask int `yaml:"max_memory_per_task"`
|
|
MaxGPUPerTask int `yaml:"max_gpu_per_task"`
|
|
}
|
|
|
|
type BenchmarkMonitoringConfig struct {
|
|
Enabled bool `yaml:"enabled"`
|
|
PrometheusPort int `yaml:"prometheus_port"`
|
|
}
|
|
|
|
// BenchmarkConfigYAMLUnmarshal profiles YAML config parsing
|
|
// Tier 3 C++ candidate: Fast binary config format
|
|
func BenchmarkConfigYAMLUnmarshal(b *testing.B) {
|
|
data := []byte(sampleServerConfig)
|
|
|
|
b.ReportAllocs()
|
|
|
|
for b.Loop() {
|
|
var cfg BenchmarkServerConfig
|
|
err := yaml.Unmarshal(data, &cfg)
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
// BenchmarkConfigYAMLUnmarshalLarge profiles large config parsing
|
|
func BenchmarkConfigYAMLUnmarshalLarge(b *testing.B) {
|
|
// Create larger config with more nested data
|
|
largeConfig := sampleServerConfig + `
|
|
extra_section:
|
|
items:
|
|
- id: item1
|
|
name: "First Item"
|
|
value: 100
|
|
- id: item2
|
|
name: "Second Item"
|
|
value: 200
|
|
- id: item3
|
|
name: "Third Item"
|
|
value: 300
|
|
`
|
|
data := []byte(largeConfig)
|
|
|
|
b.ResetTimer()
|
|
b.ReportAllocs()
|
|
|
|
for i := 0; i < b.N; i++ {
|
|
var cfg BenchmarkServerConfig
|
|
err := yaml.Unmarshal(data, &cfg)
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
}
|
|
}
|