fixing db error and upgrading technical documentation
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# 05 - LTO Optimizations
|
||||
|
||||
OxiCloud uses Link Time Optimization (LTO) to improve runtime performance. LTO allows the compiler to optimize across module boundaries during linking -- better inlining, dead code elimination, and more efficient binaries.
|
||||
|
||||
---
|
||||
|
||||
## Implemented Optimizations
|
||||
|
||||
### Release Profile
|
||||
```toml
|
||||
[profile.release]
|
||||
lto = "fat" # Full cross-module optimization
|
||||
codegen-units = 1 # Maximum optimization but slower compile time
|
||||
opt-level = 3 # Maximum optimization level
|
||||
panic = "abort" # Smaller binary size by removing panic unwinding
|
||||
strip = true # Removes debug symbols for smaller binary
|
||||
```
|
||||
|
||||
### Development Profile
|
||||
```toml
|
||||
[profile.dev]
|
||||
opt-level = 1 # Light optimization for faster build time
|
||||
debug = true # Keep debug information for development
|
||||
```
|
||||
|
||||
### Benchmark Profile
|
||||
```toml
|
||||
[profile.bench]
|
||||
lto = "fat" # Full optimization for benchmarks
|
||||
codegen-units = 1 # Maximum optimization
|
||||
opt-level = 3 # Maximum optimization level
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Performance Effects
|
||||
|
||||
1. **Smaller binary size** -- unused code and metadata removed
|
||||
2. **Faster execution** -- better inlining and code optimizations
|
||||
3. **Reduced memory usage** -- more efficient code layout
|
||||
|
||||
---
|
||||
|
||||
## LTO Options
|
||||
|
||||
- **fat**: Full LTO across all crate boundaries. Maximum optimization, longest compile time.
|
||||
- **thin**: Faster LTO that trades some optimization for compile speed. Good for development.
|
||||
- **off**: No cross-module optimization.
|
||||
|
||||
---
|
||||
|
||||
## Build Time Impact
|
||||
|
||||
LTO increases compilation time. The tradeoff:
|
||||
|
||||
- Development builds: minimal LTO (`opt-level = 1`) for faster iteration
|
||||
- Release builds: full LTO for maximum runtime performance
|
||||
- Benchmark builds: full LTO to measure actual optimized performance
|
||||
|
||||
---
|
||||
|
||||
## Measuring Impact
|
||||
|
||||
```bash
|
||||
# Run benchmarks with all optimizations
|
||||
cargo bench
|
||||
|
||||
# Compare with non-optimized build (remove for comparison only)
|
||||
RUSTFLAGS="-C lto=off" cargo bench
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## When to Adjust
|
||||
|
||||
Consider changing these settings if:
|
||||
|
||||
1. You need faster compile times during development
|
||||
2. You're experiencing unexpected runtime behavior
|
||||
3. You want to experiment with optimization vs. binary size tradeoffs
|
||||
|
||||
The defaults work well for most cases.
|
||||
Reference in New Issue
Block a user