mirror of
https://github.com/Runnin4ik/dpi-detector.git
synced 2026-10-19 09:23:17 +00:00
perf(build): switch to tokio current_thread and strip unwind tables on linux targets
This commit is contained in:
parent
02d55e9735
commit
2597cc259f
6 changed files with 19 additions and 8 deletions
4
.github/workflows/release.yml
vendored
4
.github/workflows/release.yml
vendored
|
|
@ -98,7 +98,7 @@ jobs:
|
|||
- name: Build with cross (MIPS & Cross targets)
|
||||
if: matrix.use_cross
|
||||
env:
|
||||
RUSTFLAGS: "--cfg rustix_use_libc"
|
||||
RUSTFLAGS: "--cfg rustix_use_libc -C force-unwind-tables=no"
|
||||
run: cross build --release --target ${{ matrix.target }}
|
||||
|
||||
- name: Build with cargo (Windows 7 legacy)
|
||||
|
|
@ -115,6 +115,8 @@ jobs:
|
|||
|
||||
- name: Build with cargo (Native Unix & macOS)
|
||||
if: "!matrix.use_cross && runner.os != 'Windows'"
|
||||
env:
|
||||
RUSTFLAGS: "${{ matrix.target == 'x86_64-unknown-linux-musl' && '-C force-unwind-tables=no' || '' }}"
|
||||
run: cargo build --release --target ${{ matrix.target }}
|
||||
|
||||
- name: Prepare binary artifact (Windows)
|
||||
|
|
|
|||
1
Cargo.lock
generated
1
Cargo.lock
generated
|
|
@ -451,7 +451,6 @@ dependencies = [
|
|||
"rustix 0.38.44",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_yaml",
|
||||
"tokio",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ authors = ["runnin"]
|
|||
license = "MIT"
|
||||
|
||||
[workspace.dependencies]
|
||||
tokio = { version = "1.40", default-features = false, features = ["rt-multi-thread", "net", "time", "macros", "io-util", "sync", "process"] }
|
||||
tokio = { version = "1.40", default-features = false, features = ["rt", "net", "time", "macros", "io-util", "sync", "process"] }
|
||||
rustls = { version = "0.23", default-features = false, features = ["std", "tls12"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["tls12"] }
|
||||
rustls-rustcrypto = "0.0.2-alpha"
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ tokio = { workspace = true }
|
|||
clap = { workspace = true }
|
||||
serde = { workspace = true }
|
||||
serde_json = { workspace = true }
|
||||
serde_yaml = { workspace = true }
|
||||
comfy-table = { workspace = true }
|
||||
crossterm = { workspace = true }
|
||||
unicode-width = { workspace = true }
|
||||
|
|
|
|||
|
|
@ -227,7 +227,7 @@ enum MenuAction {
|
|||
Quit,
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
#[tokio::main(flavor = "current_thread")]
|
||||
async fn main() {
|
||||
// Panic hook: write crash details to file and pause so console does not instantly vanish.
|
||||
std::panic::set_hook(Box::new(|info| {
|
||||
|
|
|
|||
|
|
@ -48,9 +48,20 @@
|
|||
* **Механика:** Отключены тяжелые алгоритмы нечеткого поиска опечаток (таблицы расстояния Левенштейна в `suggestions`), контекстное форматирование ошибок и макросы версионирования.
|
||||
* **Результат:** Экономия **~35 КБ** в машинном коде `clap_builder`.
|
||||
|
||||
### 2.5. Кроссплатформенная независимость от внешних линкеров
|
||||
* Все ключевые оптимизации (`opt-level = "z"`, `lto = true`, `codegen-units = 1`, `panic = "abort"`, `strip = true`) реализованы **на уровне LLVM и компилятора `rustc`**.
|
||||
* Это исключает зависимость от специфических флагов линкеров разных ОС (GNU `ld` на Linux, Apple `ld64` на macOS, `lld-link` на Windows, `musl-cross ld` для MIPS/ARM) и гарантирует надежную сборку на всех архитектурах без поломки кросс-компиляции.
|
||||
### 2.5. Однопоточный рантайм Tokio (`current_thread`)
|
||||
* **Файлы:** `Cargo.toml`, `crates/dpi-detector/src/main.rs`
|
||||
* **Механика:** Заменен многопоточный планировщик `rt-multi-thread` на легковесный однопоточный `current_thread` (`features = ["rt"]`). Для сетевого I/O на epoll/IOCP один поток эффективно обслуживает десятки одновременных сокетов.
|
||||
* **Результат:**
|
||||
* Срезает **~50–120 КБ** машинного кода (удален work-stealing шедулер, потоковый пул и межпоточные очереди).
|
||||
* Значительно снижает потребление оперативной памяти (RSS) на 1–2 ядерных роутерах (каждому потоку ОС не выделяется отдельный стек 1–2 МБ).
|
||||
|
||||
### 2.6. Вырезание таблиц раскрутки стека на Linux (`-C force-unwind-tables=no`)
|
||||
* **Файл:** `.github/workflows/release.yml`
|
||||
* **Механика:** При `panic = "abort"` таблицы раскрутки стека (`.eh_frame` и `.eh_frame_hdr`) не используются во время работы программы. Флаг полностью отключает их генерацию для всех Linux/MIPS/ARM таргетов.
|
||||
* **Результат:** Экономия **~300 КБ** в ELF-бинарниках для MIPS и ARM.
|
||||
|
||||
### 2.7. Сохранение формата `config.yml` (YAML)
|
||||
* Формат YAML сознательно сохранен ради удобства пользователя: поддержка комментариев (`#`), отсутствие жестких ограничений на завершающие запятые, а также 100% совместимость с существующими файлами конфигурации от Python-версии.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue