DragonOS icon indicating copy to clipboard operation
DragonOS copied to clipboard

refactor(net): 重构TCP listening backlog为动态扩展

Open Mico-rstar opened this issue 2 months ago • 6 comments

  • refactor(Listening): 使用队列维护inners

  • debug(Listening): fix inners没有正确扩展

  • refactor(poll): 多包一并notify改为单包notify

  • feat: 增加单元测试

Mico-rstar avatar Oct 09 '25 13:10 Mico-rstar

多包一并notify改为单包notify

为什么要这样做

fslongjin avatar Oct 09 '25 14:10 fslongjin

and,这个PR是为了解决什么问题?有无测试用例/问题复现案例?

fslongjin avatar Oct 09 '25 14:10 fslongjin

and,这个PR是为了解决什么问题?有无测试用例/问题复现案例?

当前tcp listening backlog的实现会在执行系统调用sys_listen后创建backlog个socket等待连接,这样即便处于空闲状态下依旧占用固定内存,且占用大小取决于用户程序指定的backlog大小。这个PR用队列来维护socket,将完成tcp三次握手的socket push到队列,调用accept从队列pop出socket,从而让队列大小随着并发连接数和客户端处理能力的变化而变化

Mico-rstar avatar Oct 09 '25 14:10 Mico-rstar

多包一并notify改为单包notify

为什么要这样做

smoltcp没有提供listen接口,不能在连接到来时自动创建新的socket,所以现在的实现是总是绑定连接数+1个smoltcp socket,单包处理就可以在update_io_event中bind新的socket供下一次连接

Mico-rstar avatar Oct 09 '25 15:10 Mico-rstar

and,这个PR是为了解决什么问题?有无测试用例/问题复现案例?

dragonos运行test_backlogc 使用外部tcp连接脚本,并发数:5,连接数:20 屏幕截图 2025-10-09 232743

Mico-rstar avatar Oct 09 '25 15:10 Mico-rstar

这个实现我初看了一下,怎么感觉容易在poll的地方卡很久?如果一直有包到来的话。

@sparkzky @Samuka007 麻烦帮忙review一下?

fslongjin avatar Oct 09 '25 15:10 fslongjin