Cross-layer utility-based system optimization