-
Notifications
You must be signed in to change notification settings - Fork 4.6k
Build: Use more aggressive inlining for higher efficiency #5026
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Windows 64 和 Linux 64 上的二进制会大多少? |
|
非常激进的话 x86-64 架构的大个 13% 左右吧
|
依稀记得当初没要的acme是膨胀6% |
这个是用空间换时间,core 的整体运行效率都会高很多 |
|
|
|
|
|
This comment was marked as outdated.
This comment was marked as outdated.
依赖也是 l=1 |
|
|
|
看起来就只是 xrayl0 和 xrayl1 的体积反过来了,根据 xrayl4 能看出应该是用了 |
xrayl0 就是默认情况,只是 Go 那边这个参数在小于等于 1 的时候会做反转处理 |
代码里面的注释是0禁用 1默认 看起来的gcflag里是10倒转了 1禁用0启用 不过我测的时候是直接比的没有gcflag和l=4 那只是聊天的时候稍微混乱了一点点 结论没变 |
|
针对 VLESS encryption 的 |
|
我觉得 Golang 不对 AST 节点数超过 80 的函数内联应该是觉得太大的函数内联优化占比有限 但像 DecodeHeader() 这种最多的 |
|
|
|
话说可以给 Golang PR 个 |
实际情况 |
|
|
哎 AI幻觉 |
对吧,你 Google 搜索,置顶的 AI 也是一本正经地告诉你有, 但这也不太属于 AI 幻觉,属于是互联网上错误资料太多, |
leaf 函数的问题,Golang 应该是认为如果一个函数里面有其它函数调用,则这个函数是复杂的,但如果里面只是有个报错呢
|
大概是因为 Xray 本体代码里的独立函数太少,函数大都附着在结构体上的,所以这个 PR 是内联了依赖里大量 80- 的 leaf 函数 |
@Fangliding 话说文档现在就可以把 |
2d023b0 DNS 出站 |
文档可以标注一下 |
*ray 性能瓶颈的话目前:
|
因为 16384 那个最符合 TLS 的特征,但是如果包个传输层再包个 TLS 呃,需要一大一小两个 data record 才能把数据发出去 |
This comment was marked as resolved.
This comment was marked as resolved.
|
默认内联给调用函数的定的配额是占用 57 个 AST 节点,除了 panic 之类的 |
有点不太信邪,编译的时候在 可以确认的是,不在 加上
如果是 windows/amd64 的话变化也是轻微波动但是差不多,只是默认内联和无内联的大小变化差异不到 2KB 因为某些原因没被其它处理抹平。 就是默认 SDK 下面单纯的激进内联效用不是特别明显,尤其是对 AST 对象多的完全无法内联的情况要考虑进去 附注: |
|
高低加一个GOAMD64=v2也能提升一定的性能啊 或者GOAMD64=v3,GOAMD64=v4都加上,用户自己根据自己的cpu选 |
有 然后不要高估用户选架构的能力 最后印象中是有说过出来效果差异不大的 |
再加上加密库在写的时候大概是有针对性优化运行时判断的,加了这个几乎效用不明显 |
老早就有人说过这几个v1v2v3v4了 我也测过 结果是没有肉眼可见区别 |
XTLS#4952 (comment) (cherry picked from commit 2485f48)
#4952 (comment)
主要参数说明来源于
https://github.com/golang/go/blob/6e676ab2b809d46623acb5988248d95d1eb7939c/src/cmd/compile/internal/gc/main.go#L133-L141
https://github.com/golang/go/blob/6e676ab2b809d46623acb5988248d95d1eb7939c/src/cmd/compile/internal/inline/inl.go#L9-L18
https://github.com/golang/go/blob/6e676ab2b809d46623acb5988248d95d1eb7939c/src/cmd/compile/internal/inline/inl.go#L47-L62
-gcflags="-l=4"
目前应该是在不改动环境变量不添加 GOEXPERIMENT 下的比默认情况下激进的内联了(连带 non leaf functions),不过不改变内联节点限制,所以主线 common.go 也有不能内联的内容。all=-l=4
连带依赖外部包一起处理(32 位 MIPS 无缘,最多只能 -l=4,不然直接不出货)