V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Fu4ng
V2EX  ›  问与答

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

  •  
  •   Fu4ng · 2021-07-18 14:20:10 +08:00 · 649 次点击
    这是一个创建于 984 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    如果我理解的不对,请麻烦你指正下!十分感谢
    Srar
        6
    Srar  
       2021-07-18 23:48:35 +08:00
    @Fu4ng 是的,当然这还要看应用场景。例如使用用户态接管网卡的应用大部分是作为数据包转发(NFV 场景),就没上下文切换啥事情了。如果是用作均衡负载、重小包场景(例如游戏服务器),就可以省去上下文切换这个步骤了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1236 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 18:01 · PVG 02:01 · LAX 11:01 · JFK 14:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.