使用 netmap 后如何在用户态空间处理 raw data

2021-07-18 14:20:10 +08:00
 Fu4ng

周末看了 netmap framework 的介绍后,了解到使用它能够让用户态的应用程序能跳过协议栈直接访问网卡的数据。

但是我有个疑问,如果不经过内核空间协议栈的处理,用户态的应用程序要如何处理经过网络传输的原始数据吗?

难道要自己再解析处理一次吗?那这样的话和不使用 netmap 又有什么性能提升呢?

ps:最近在恶补计算机网络方面的知识(特别是云网络,网络虚拟化方面),恳求大佬们推荐下书籍。 十分感谢!!!

671 次点击
所在节点    问与答
6 条回复
Jirajine
2021-07-18 16:59:47 +08:00
如果用户态实现是 zero copy 的,不久可以减少内存复制了么。
Srar
2021-07-18 19:58:29 +08:00
是的,需要自己解析,还需要顺便处理整个网络栈。其实网络瓶颈一般在内核内的流程处理,解析带来的成本可以忽略。
Fu4ng
2021-07-18 22:03:23 +08:00
@Jirajine

@Srar
大佬说的“网络瓶颈”是指“数据副本”的拷贝吗?
Srar
2021-07-18 23:09:04 +08:00
@Fu4ng 数据包被多次复制只是性能受影响的其中之一,还有别的因素也会影响例如上下文切换、处理流程造成的 Cache Miss 等
Fu4ng
2021-07-18 23:35:22 +08:00
@Srar thansk for your reply.

我不确定我理解的是否正确,所以想再请教一下。
您说的“上下文切换”是指,使用 netmap 之后,是用成本小的用户态上下文切换代替了成本高的内核态的上下文切换吗?

如果我理解的不对,请麻烦你指正下!十分感谢
Srar
2021-07-18 23:48:35 +08:00
@Fu4ng 是的,当然这还要看应用场景。例如使用用户态接管网卡的应用大部分是作为数据包转发(NFV 场景),就没上下文切换啥事情了。如果是用作均衡负载、重小包场景(例如游戏服务器),就可以省去上下文切换这个步骤了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/790193

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX