Configuration Guide
This guide covers comprehensive configuration of the Wasmtime engine for optimal performance and debugging.
Basic Configuration
Default Configuration
using WasmtimeRuntime
# Default configuration
config = WasmConfig()
engine = WasmEngine(config)
Keyword Constructor
config = WasmConfig(
debug_info = true,
optimization_level = Speed,
profiling_strategy = NoProfilingStrategy,
consume_fuel = false,
epoch_interruption = false,
max_wasm_stack = 1024 * 1024 # 1MB
)
Configuration Options
Debug Information
Enable debug information for better error messages and debugging:
config = WasmConfig()
debug_info!(config, true)
Debug info includes:
- Source line mappings
- Function names
- Local variable information
Optimization Levels
Control compilation optimization:
# No optimization (fastest compilation)
optimization_level!(config, None)
# Speed optimization (balanced)
optimization_level!(config, Speed)
# Size and speed optimization (slowest compilation)
optimization_level!(config, SpeedAndSize)
Optimization Level Trade-offs:
None
: Fast compilation, slower executionSpeed
: Balanced compilation and execution speedSpeedAndSize
: Slower compilation, fastest execution
Profiling
Enable profiling for performance analysis:
# No profiling (default)
profiler!(config, NoProfilingStrategy)
# JIT dump profiling (Linux perf)
profiler!(config, JitdumpProfilingStrategy)
# VTune profiling (Intel VTune)
profiler!(config, VTuneProfilingStrategy)
# Performance map profiling
profiler!(config, PerfMapProfilingStrategy)
Resource Limits
Fuel Consumption
Limit execution time by tracking "fuel":
# Enable fuel consumption
consume_fuel!(config, true)
engine = WasmEngine(config)
store = Store(engine)
# Add fuel
add_fuel!(store, 10000)
# Check consumed fuel
consumed = fuel_consumed(store)
Stack Limits
Control WebAssembly stack size:
# Set maximum stack size (1MB)
max_wasm_stack!(config, 1024 * 1024)
Epoch Interruption
Enable epoch-based interruption for long-running computations:
# Enable epoch interruption
epoch_interruption!(config, true)
engine = WasmEngine(config)
store = Store(engine)
# Set epoch deadline
set_epoch_deadline!(store, 1000) # 1000 ticks
Method Chaining
Configuration methods return the config object for chaining:
config = WasmConfig()
|> c -> debug_info!(c, true)
|> c -> optimization_level!(c, Speed)
|> c -> consume_fuel!(c, true)
|> c -> max_wasm_stack!(c, 2 * 1024 * 1024)
engine = WasmEngine(config)
Common Configuration Patterns
Development Configuration
Optimal for development and debugging:
dev_config = Config(
debug_info = true,
optimization_level = None, # Fast compilation
consume_fuel = true, # Prevent infinite loops
max_wasm_stack = 512 * 1024
)
Production Configuration
Optimal for production performance:
prod_config = Config(
debug_info = false,
optimization_level = SpeedAndSize,
consume_fuel = false,
epoch_interruption = true, # For long-running tasks
max_wasm_stack = 4 * 1024 * 1024
)
Profiling Configuration
For performance analysis:
profile_config = Config(
debug_info = true,
optimization_level = Speed,
profiling_strategy = VTuneProfilingStrategy,
consume_fuel = true
)
Configuration Validation
Configurations are validated when creating engines:
config = WasmConfig()
config.ptr = C_NULL # Invalid configuration
try
engine = WasmEngine(config) # Throws WasmtimeError
catch e::WasmtimeError
println("Invalid configuration: $(e.message)")
end
Environment-Specific Settings
Resource-Constrained Environments
minimal_config = Config(
debug_info = false,
optimization_level = None,
consume_fuel = true,
max_wasm_stack = 128 * 1024 # 128KB
)
High-Performance Computing
hpc_config = Config(
debug_info = false,
optimization_level = SpeedAndSize,
consume_fuel = false,
max_wasm_stack = 16 * 1024 * 1024 # 16MB
)
Configuration Lifecycle
Configurations are consumed when creating engines:
config = WasmConfig()
debug_info!(config, true)
engine = WasmEngine(config)
# config is now consumed and cannot be reused
# This would throw an error:
# engine2 = WasmEngine(config) # Error: config already consumed
Best Practices
- Create configurations once per application lifecycle
- Share engines across multiple stores when possible
- Enable fuel consumption during development to catch infinite loops
- Use appropriate optimization levels based on deployment needs
- Set reasonable stack limits to prevent memory exhaustion
- Enable debug info only when needed (impacts performance)
Troubleshooting
Common Configuration Errors
# Invalid configuration usage
config = WasmConfig()
engine1 = WasmEngine(config)
# engine2 = WasmEngine(config) # Error: consumed config
# Solution: Create new config
config2 = WasmConfig()
engine2 = Engine(config2)
Performance Issues
If WebAssembly execution is slow:
- Check optimization level (use
SpeedAndSize
for production) - Disable debug info in production
- Verify fuel consumption isn't enabled unnecessarily
- Increase stack size if needed
Memory Issues
If running out of memory:
- Reduce
max_wasm_stack
size - Enable fuel consumption to limit execution
- Use epoch interruption for long-running tasks
- Monitor store lifetime and cleanup