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

    参考文献

  • 相关阅读:
    MYsql 之单标查询.
    MYSQL社区版安装手册
    爬虫框架学习
    celery_消息队列
    rabbitMQ消息队列
    Django分页设置
    Mysql-基础+安装指南
    super函数的用法
    hashlib 和loggin模块
    Python的魔法方法
  • 原文地址:https://www.cnblogs.com/zhcpku/p/14581143.html
Copyright © 2011-2022 走看看