zoukankan      html  css  js  c++  java
  • 用户态IO:DPDK

    用户态IO:DPDK

    在讲多路复用的时候,我们提到:多路复用本身仍然是同步I/O,数据从内核空间到用户空间仍然存在一次拷贝,影响效率。其实对于大容量网络通信(如交换机)而言,不仅数据拷贝的开销不可接受,系统调用频繁的上下文切换也是难以忽视的开销。
    Intel DPDK(Data Plane Development Kit) 采用绕过Linux kernel、将报文收发工作放到用户空间的方式,同时做到了避免数据拷贝和上下文切换,是目前高性能网络通信最成熟的解决方案。

    传统I/O过程

    传统的I/O方式使用的是中断机制,数据包到来时会产生一个硬件中断,CPU接收到中断信号之后会切换进入内核态获取报文,然后切换回用户空间,并从内核空间中拷贝消息。
    当数据量比较大的时候,频繁的中断和上下文切换不仅会降低I/O效率,还会影响多核CPU上其他程序的运行。

    DPDK I/O过程

    DPDK 通过kernel里的 uio driver 直接屏蔽硬件中断,用户空间的 PMD(Poll Mode Driver) 采用轮询方式进行收发。
    为了减少cache miss和TLB miss,DPDK使用大页内存、NUMA和CPU亲和性绑定机制。
    为了避免没有报文时空转,提出 Interrupt DPDK,当没有报文收发时转入中断机制,有消息到来被唤醒,进入轮询。

    // TBD

    参考文献

  • 相关阅读:
    NPOI导出excel表格应用
    通过用户密码获取共享文件
    sql之left join、right join、inner join的区别
    C#日志编写
    C#预编译指令
    匿名类型(C# 编程指南)
    反射
    SQL通用查询
    Lambda 表达式(C# 编程指南)
    自定义用户控件编写——(文件夹目录选择)
  • 原文地址:https://www.cnblogs.com/zhcpku/p/14581143.html
Copyright © 2011-2022 走看看