From 9973b917e1c45509e8ca2f68986cf9a845d267e2 Mon Sep 17 00:00:00 2001 From: core Date: Wed, 10 Jan 2024 09:43:14 -0500 Subject: [PATCH] stupidly optimized server builds --- .drone.yml | 20 ++++++++++---------- Cargo.lock | 21 +++++++++++++++++++++ Cargo.toml | 7 ++++++- server/Cargo.toml | 1 + server/src/main.rs | 46 ++++++++++++++++++++++++++++++++++------------ 5 files changed, 72 insertions(+), 23 deletions(-) diff --git a/.drone.yml b/.drone.yml index 73ad13cccd84e4613bb6fbfbc877f019a5966c7c..11e9e0e3dfaed4e6e4bba2d65d95eaf12ddbff02 100644 --- a/.drone.yml +++ b/.drone.yml @@ -75,7 +75,7 @@ steps: image: coresdev/stk_build_env commands: - cd server - - cargo clippy --color always + - cargo clippy --profile release-ci --color always environment: SCCACHE_REGION: us-east-1 SCCACHE_BUCKET: @@ -93,7 +93,7 @@ steps: image: coresdev/stk_build_env commands: - cd server - - cargo build --release --color always + - cargo build --profile release-ci --color always environment: SCCACHE_REGION: us-east-1 SCCACHE_BUCKET: @@ -122,7 +122,7 @@ steps: from_secret: s3_access_key secret_key: from_secret: s3_secret_key - source: target/release/starkingdoms-server + source: target/release-ci/starkingdoms-server target: builds/${DRONE_COMMIT_SHA}/starkingdoms-server path_style: true @@ -159,7 +159,7 @@ steps: image: coresdev/stk_build_env commands: - cd starkingdoms-backplane - - cargo clippy --color always + - cargo clippy --profile release-ci --color always environment: SCCACHE_REGION: us-east-1 SCCACHE_BUCKET: @@ -177,7 +177,7 @@ steps: image: coresdev/stk_build_env commands: - cd starkingdoms-backplane - - cargo build --release --color always + - cargo build --profile release-ci --color always environment: SCCACHE_REGION: us-east-1 SCCACHE_BUCKET: @@ -206,7 +206,7 @@ steps: from_secret: s3_access_key secret_key: from_secret: s3_secret_key - source: target/release/starkingdoms-backplane + source: target/release-ci/starkingdoms-backplane target: builds/${DRONE_COMMIT_SHA}/starkingdoms-backplane path_style: true @@ -263,7 +263,7 @@ steps: commands: - echo "$VAULT_PWD" > vault_password.txt - cat vault_password.txt - - ansible-playbook ansible/deploy.yml -i ansible/environments/unstable.yml --vault-password-file vault_password.txt -e "server_binary_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/starkingdoms-server/target/release/starkingdoms-server client_package_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/client.tar.xz/starkingdoms-client/dist/client.tar.xz" + - ansible-playbook ansible/deploy.yml -i ansible/environments/unstable.yml --vault-password-file vault_password.txt -e "server_binary_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/starkingdoms-server/target/release-ci/starkingdoms-server client_package_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/client.tar.xz/starkingdoms-client/dist/client.tar.xz" --- kind: pipeline @@ -289,7 +289,7 @@ steps: commands: - echo "$VAULT_PWD" > vault_password.txt - cat vault_password.txt - - ansible-playbook ansible/deploy_backplane.yml -i ansible/global/backplane.yml --vault-password-file vault_password.txt -e "backplane_binary_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/starkingdoms-backplane/target/release/starkingdoms-backplane" + - ansible-playbook ansible/deploy_backplane.yml -i ansible/global/backplane.yml --vault-password-file vault_password.txt -e "backplane_binary_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/starkingdoms-backplane/target/release-ci/starkingdoms-backplane" --- kind: pipeline type: docker @@ -314,7 +314,7 @@ steps: commands: - echo "$VAULT_PWD" > vault_password.txt - cat vault_password.txt - - ansible-playbook ansible/deploy.yml -i ansible/environments/beta.yml --vault-password-file vault_password.txt -e "server_binary_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/starkingdoms-server/target/release/starkingdoms-server client_package_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/client.tar.xz/starkingdoms-client/dist/client.tar.xz" + - ansible-playbook ansible/deploy.yml -i ansible/environments/beta.yml --vault-password-file vault_password.txt -e "server_binary_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/starkingdoms-server/target/release-ci/starkingdoms-server client_package_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/client.tar.xz/starkingdoms-client/dist/client.tar.xz" --- kind: pipeline type: docker @@ -339,5 +339,5 @@ steps: commands: - echo "$VAULT_PWD" > vault_password.txt - cat vault_password.txt - - ansible-playbook ansible/deploy.yml -i ansible/environments/stable.yml --vault-password-file vault_password.txt -e "server_binary_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/starkingdoms-server/target/release/starkingdoms-server client_package_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/client.tar.xz/starkingdoms-client/dist/client.tar.xz" + - ansible-playbook ansible/deploy.yml -i ansible/environments/stable.yml --vault-password-file vault_password.txt -e "server_binary_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/starkingdoms-server/target/release-ci/starkingdoms-server client_package_url=$MINIO_BASE/$MINIO_BUCKET/builds/${DRONE_COMMIT_SHA}/client.tar.xz/starkingdoms-client/dist/client.tar.xz" diff --git a/Cargo.lock b/Cargo.lock index 54a25d052e56fdb55e4508a4354497e5b26a9822..ce61ee047c299aca3617ab3edd0c0ec53942710f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3617,6 +3617,7 @@ dependencies = [ "serde_json", "sha2", "starkingdoms-common", + "tikv-jemallocator", "tracing-subscriber", ] @@ -3724,6 +3725,26 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tikv-jemalloc-sys" +version = "0.5.4+5.3.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "tikv-jemallocator" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965fe0c26be5c56c94e38ba547249074803efd52adfb66de62107d95aab3eaca" +dependencies = [ + "libc", + "tikv-jemalloc-sys", +] + [[package]] name = "time" version = "0.3.30" diff --git a/Cargo.toml b/Cargo.toml index a5ad54a397a686ab77eeb0d32333a298dd443c69..495b497cceb38781b4c14fe947a3f8bcef773419 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,4 +9,9 @@ members = [ resolver = "2" [profile.dev.package."*"] -opt-level = 3 \ No newline at end of file +opt-level = 3 + +[profile.release-ci] +inherits = "release" +codegen-units = 1 +lto = "fat" \ No newline at end of file diff --git a/server/Cargo.toml b/server/Cargo.toml index 5d90aa55200a7df964f3bb7e66eed92ee2dc51bc..13abbae610199a0e2214370ca216b3d5e0edc497 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -17,6 +17,7 @@ sha2 = "0.10" hmac = "0.12" hex = "0.4" bevy_tungstenite_stk = { version = "0.1", path = "../bevy_tungstenite_stk" } +tikv-jemallocator = "0.5.0" [features] default = [] diff --git a/server/src/main.rs b/server/src/main.rs index 7552f4293b4a5232c3d0a934386ecb4922208687..e4d944b428c5e86f3cc16f8d9136c9e392d602c6 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -16,15 +16,15 @@ #![allow(clippy::type_complexity)] // bevy :( #![allow(clippy::too_many_arguments)] // bevy :( #![allow(clippy::only_used_in_recursion)] // todo: remove this +#[global_allocator] +static GLOBAL: tikv_jemallocator::Jemalloc = tikv_jemallocator::Jemalloc; use std::net::IpAddr; use crate::mathutil::rot2d; -use bevy::log::Level; -use bevy::log::LogPlugin; use bevy::math::{vec2, vec3}; use bevy::{ - app::ScheduleRunnerPlugin, ecs::event::ManualEventReader, prelude::*, time::TimePlugin, + app::{ScheduleRunnerPlugin, PluginGroupBuilder}, ecs::event::ManualEventReader, prelude::*, time::TimePlugin, }; use bevy_rapier2d::prelude::*; use bevy_tungstenite_stk::{StkTungsteniteServerConfig, StkTungsteniteServerPlugin, WsEvent}; @@ -67,6 +67,36 @@ const LANDING_THRUSTER_MASS: f32 = 0.9; // maybe make this only cargo modules later const FREE_MODULE_CAP: usize = 30; +struct StkPluginGroup; + +#[cfg(debug_assertions)] +impl PluginGroup for StkPluginGroup { + fn build(self) -> PluginGroupBuilder { + PluginGroupBuilder::start::() + .add(TaskPoolPlugin::default()) + .add(TypeRegistrationPlugin) + .add(FrameCountPlugin) + .add(TimePlugin) + .add(ScheduleRunnerPlugin::run_loop(Duration::from_millis(1))) + .add(bevy::log::LogPlugin { + level: bevy::log::Level::DEBUG, + filter: "wgpu=error,bevy_render=info,bevy_ecs=trace".to_string(), + }) + } +} + +#[cfg(not(debug_assertions))] +impl PluginGroup for StkPluginGroup { + fn build(self) -> PluginGroupBuilder { + PluginGroupBuilder::start::() + .add(TaskPoolPlugin::default()) + .add(TypeRegistrationPlugin) + .add(FrameCountPlugin) + .add(TimePlugin) + .add(ScheduleRunnerPlugin::run_loop(Duration::from_millis(1))) + } +} + fn main() { // read the key in let key = std::fs::read_to_string("/etc/starkingdoms/app_key").unwrap(); @@ -79,15 +109,7 @@ fn main() { addr: IpAddr::from_str("0.0.0.0").unwrap(), port: 3000, }) - .add_plugins(TaskPoolPlugin::default()) - .add_plugins(TypeRegistrationPlugin) - .add_plugins(FrameCountPlugin) - .add_plugins(TimePlugin) - .add_plugins(ScheduleRunnerPlugin::run_loop(Duration::from_millis(1))) - .add_plugins(LogPlugin { - level: Level::DEBUG, - filter: "wgpu=error,bevy_render=info,bevy_ecs=trace".to_string(), - }) + .add_plugins(StkPluginGroup) .insert_resource(RapierConfiguration { gravity: Vect { x: 0.0, y: 0.0 }, ..Default::default()