ITADN

perf: file-cache для get_xray_transparent_inbounds

#43Pull Requestoviron 创建于 2026-04-30
O
ovironcommented
Поковырял `xkeen -restart` на тему ускорения, нашёл несколько независимых моментов, оформил как серию атомарных PR. Каждый можно мерджить отдельно. - #41 active-probe вместо sleep в proxy_start и proxy_stop - #42 параллельная загрузка load_ipset через фоновые задания - #44 раскрытие переменных в шелле вместо вызова sed в inject_var - #45 батчинг iptables-restore вместо ~150 серийных вызовов - #46 active-probe вместо sleep 5 в холодном старте netfilter hook - #47 параллельная загрузка геофайлов в install_geo* --- `get_xray_port_by_mode` и `get_xray_network_by_mode` зовутся в `proxy_start` 4 раза подряд (`redirect`/`tproxy` × `port`/`network`). Каждый внутри через дочерний шелл вызывает `get_xray_transparent_inbounds`, которая форкает `strip_json_comments | jq` на каждый файл в `$directory_xray_config`. На 6 json'ах это 8 jq-форков на каждый restart за одними и теми же данными. Кэш в shell-переменной не работает: caller'ы зовут функцию через `port=$(get_xray_port_by_mode redirect)`, переменные в родительский шелл не пробрасываются. Сделал файловый кэш в `/tmp/xkeen-inbounds-cache` с инвалидацией по mtime через `find -newer`, атомарный `mv` через `.tmp.$$`. Сбрасывается через `_invalidate_inbounds_cache` в начале `proxy_start` для случая когда файл переписан тем же содержимым (mtime не меняется). KN-3812: ``` before (patches 1+2): 5.64s avg after (+ кэш): 5.01s avg ``` `time` user-component упал с 1.30s до 1.06s.
合并状态:未合并 关闭于 2026-05-01 1 条评论