Skip to content

Conversation

chazikai24
Copy link
Contributor

解决nftable add性能问题 #2025
主要逻辑:nft_add之前发送netlink消息,如果nfttable已经存在则跳过。

跟踪debug日志,对一些特殊情况进行了处理
1.error=-2,即table/set/ip不存在,进行add操作。
2.error=11,偶发性错误,比如IO错误,通信堵塞等,跳过不执行add。

经过几天的测试,passwall模式采用大陆白名单,结果令人满意。
#2025反馈的问题,经过分析来源于add过程中,ip已经存在于nftable中,此时该操作的响应时间较长。
image

Skip the existing IP in nftable
@chazikai24
Copy link
Contributor Author

chazikai24 commented Sep 26, 2025

已打包,可以测试:https://github.com/chazikai24/smartdns/releases
@lwb1978 @pymumu

@pymumu
Copy link
Owner

pymumu commented Sep 26, 2025

处理一下代码格式,用vs code的格式化代码

@chazikai24
Copy link
Contributor Author

chazikai24 commented Sep 26, 2025

vs code中使用默认的C/C++来格式化代码?这样的话,整个文件的if{}都会发生变化

@pymumu
Copy link
Owner

pymumu commented Sep 26, 2025

对,参考其他文件格式,根目录有格式配置文件

clangformat codes
@chazikai24
Copy link
Contributor Author

重新提交了一个commit,你看可行?
还是我关闭这个pull requests,做成一个commit重新pull requests?

@lwb1978
Copy link
Contributor

lwb1978 commented Sep 27, 2025

不用重新提交的,合并时可以用压缩合并合成一个commit

@chazikai24
Copy link
Contributor Author

OK

@pymumu
Copy link
Owner

pymumu commented Sep 27, 2025

这个功能测试正常了?

@chazikai24
Copy link
Contributor Author

@lwb1978 等大佬测试看看有没有问题,我自己测试了好几天暂时没发现问题

@lwb1978
Copy link
Contributor

lwb1978 commented Sep 27, 2025

你找错人了,我并不参与smartdns核心开发(根本不懂c语言),所以没有任何发言权。🤣

@chazikai24
Copy link
Contributor Author

你找错人了,我并不参与smartdns核心开发(根本不懂c语言),所以没有任何发言权。🤣

但是passwall你是专业的,问题也是passwall+smartdns+大陆白名单发现的

@lwb1978
Copy link
Contributor

lwb1978 commented Sep 27, 2025

呵呵,pw大大小小依赖十几个,是不是每个组件的bug都让我来测试呢?更何况smartdns只是可选。开源社区里,自己要对自己pr的代码负责,而不是at第三人来帮测试,除非是他提出的bug或者功能请求。

@chazikai24
Copy link
Contributor Author

附上之前测试筛选的nftset.c的debug日志,应该是没什么问题了
smartdns.zip

@pymumu
Copy link
Owner

pymumu commented Sep 28, 2025

看上去这个修改只是增加了IP是否存在的判断,并没有批量处理,能做到高性能么?

@chazikai24
Copy link
Contributor Author

chazikai24 commented Sep 28, 2025

看上去这个修改只是增加了IP是否存在的判断,并没有批量处理,能做到高性能么?

是的,观察改进前的日志,如果add的时候ip已存在,这个过程的响应时间大概是30-40ms(环境:passwall dns选用smartdns,模式大陆白名单)。比如,第一次访问淘宝或京东会十几二十秒之后才缓慢刷出网页,详见#2025
改进后的代码,观察debug日志,已经没有这个问题了,1ms可以处理多次add操作,无论是skip或者是add success。详见上面的日志。
下图为运行一天之后的webui截图,平均响应时间正常,如阿里dns的udp平均响应时间是十几毫秒。改进之前阿里DNS的平均响应时间为70多毫秒,且随着时间的增加平均响应时间会增长。

screenshot_2025-09-28_21-14-12

@pymumu pymumu merged commit 38b5a30 into pymumu:master Sep 28, 2025
2 checks passed
@qwerttvv
Copy link

我也用passwall和smartdns

image image image

@chazikai24
Copy link
Contributor Author

我也用passwall和smartdns

image image image

不一样,你这是passwall+chinadns-ng

@qwerttvv
Copy link

qwerttvv commented Oct 2, 2025

我意思是这样儿套也是用smartdns,而且原本就没这个nft性能问题,你可以试试看看

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants