Fu4ng
V2EX  ›  问与答

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

  •  
  •   Fu4ng · Jul 18, 2021 · 1423 views
    This topic created in 1774 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

    如果我理解的不对,请麻烦你指正下!十分感谢
    Srar
        6
    Srar  
       Jul 18, 2021
    @Fu4ng 是的,当然这还要看应用场景。例如使用用户态接管网卡的应用大部分是作为数据包转发(NFV 场景),就没上下文切换啥事情了。如果是用作均衡负载、重小包场景(例如游戏服务器),就可以省去上下文切换这个步骤了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4965 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 325ms · UTC 09:40 · PVG 17:40 · LAX 02:40 · JFK 05:40
    ♥ Do have faith in what you're doing.