-
Notifications
You must be signed in to change notification settings - Fork 1.2k
optimize nft add performance #2148
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
Skip the existing IP in nftable
处理一下代码格式,用vs code的格式化代码 |
vs code中使用默认的C/C++来格式化代码?这样的话,整个文件的if{}都会发生变化 |
对,参考其他文件格式,根目录有格式配置文件 |
clangformat codes
重新提交了一个commit,你看可行? |
不用重新提交的,合并时可以用压缩合并合成一个commit |
OK |
这个功能测试正常了? |
@lwb1978 等大佬测试看看有没有问题,我自己测试了好几天暂时没发现问题 |
你找错人了,我并不参与smartdns核心开发(根本不懂c语言),所以没有任何发言权。🤣 |
但是passwall你是专业的,问题也是passwall+smartdns+大陆白名单发现的 |
呵呵,pw大大小小依赖十几个,是不是每个组件的bug都让我来测试呢?更何况smartdns只是可选。开源社区里,自己要对自己pr的代码负责,而不是at第三人来帮测试,除非是他提出的bug或者功能请求。 |
附上之前测试筛选的nftset.c的debug日志,应该是没什么问题了 |
看上去这个修改只是增加了IP是否存在的判断,并没有批量处理,能做到高性能么? |
是的,观察改进前的日志,如果add的时候ip已存在,这个过程的响应时间大概是30-40ms(环境:passwall dns选用smartdns,模式大陆白名单)。比如,第一次访问淘宝或京东会十几二十秒之后才缓慢刷出网页,详见#2025。 ![]() |
我意思是这样儿套也是用smartdns,而且原本就没这个nft性能问题,你可以试试看看 |
解决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中,此时该操作的响应时间较长。