perf: file-cache для get_xray_transparent_inbounds#43
Merged
Conversation
Helper'ы get_xray_port_by_mode и get_xray_network_by_mode зовутся в proxy_start 4 раза подряд (redirect/tproxy × port/network). Каждый из них через subshell вызывает get_xray_transparent_inbounds, который форкает jq+strip_json_comments на каждый файл в $directory_xray_config. На 2 inbound-файлах это 8 форков jq просто чтобы получить одни и те же данные. Shell-variable cache не работает из-за subshell scope (предыдущая parked попытка perf/xray-inbounds-memoize в этом и упёрлась). File-cache в /tmp/xkeen-inbounds-cache с invalidation через find -newer по mtime json-файлов решает проблему: persist между subshell-ами. Cache явно сбрасывается в начале proxy_start через _invalidate_inbounds_cache, чтобы поймать изменения которые не bump'нут mtime (touch'нули файл с тем же содержимым). Atomic mv через .tmp.$$ предотвращает partial-cache reads. Замер на конфиге Hybrid поверх patches 1+2+3: before: 5.64s avg after: 5.01s avg save: ~0.6s Cumulative с patches 1-3 от 8.05s baseline: -3.04s (38%).
This was referenced Apr 30, 2026
Owner
|
Спасибо за доработки. Вы, как всегда, творчески подходите к решению тривиальных задач. Отдельная благодарность за подробное описание объекта доработки до и после, а так же за тесты по итогам. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Поковырял
xkeen -restartна тему ускорения, нашёл несколько независимых моментов, оформил как серию атомарных PR. Каждый можно мерджить отдельно.get_xray_port_by_modeиget_xray_network_by_modeзовутся вproxy_start4 раза подряд (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:
timeuser-component упал с 1.30s до 1.06s.