v2.12.3
Главное: кратное снижение потребления CPU на роутере (под нагрузкой ~14x, в простое ~5x), нативный ICMP-мониторинг без вызова внешнего ping, ускорение загрузки состояния туннелей и переход на Go 1.26.
Производительность
- Кеш SHA256 бинаря sing-box —
/api/singbox/statusбольше не хеширует ~80MB-бинарь при каждом опросе (на MIPS это съедало целое ядро при открытом UI); хеш считается один раз и инвалидируется при обновлении бинаря (PR #351). - TCP-пробинг в матрице мониторинга — вместо HTTPS HEAD: метрика и так была TCP RTT, а отбрасываемый TLS-handshake стоил секунды CPU на каждую ячейку (до 76% потребления в простое).
- Состояние туннелей через batch-POST RCI — FetchSummary и NativeWG-state переведены с прямых GET (~115ms) на batch-POST (~12-18ms, ~10x), плюс кеш состояния TTL 2s с single-flight для read-путей.
- Модель CPU роутера определяется один раз за процесс (раньше — regexp-скан системной библиотеки при каждом обновлении сведений).
- Итог на живом mipsel: открытый UI 91–107% ядра → 7%, простой 11.4% → 2.1%.
Мониторинг
- Нативный ICMP (
x/net/icmp) вместо exec/opt/bin/ping— pingcheck и матрица мониторинга шлют echo напрямую с привязкой к интерфейсу туннеля (PR #348 в составе #351). - Устойчивый DNS-резолв проверок — checkURL резолвится через DNS туннеля с кешем и fallback-цепочкой (tunnel-DNS → stale-кеш → системный).
Сборка
- Go 1.26.4 для всех архитектур — снят пин Go 1.23 для MIPS (EOL); цена — бинарь mipsel больше на ~3.2MB, замерено и принято осознанно.
- Зависимости: x/net v0.55.0, protobuf v1.36.11.