本文内容为读书笔记,摘自《深入浅出DPDK》。


45.网卡的读数据操作

通常来说,为了发送一个数据报文到网络上去,首先是运行在CPU上的软件分配了一段内存,然后把这段内存读取到CPU内部,更新数据,并且填充相应的报文描述符(网卡会通过读取描述符了解报文的相应信息),然后写回到内存中,通知网卡,最终网卡把数据读回到内部,并且发送到网络上去。但是,没有DDIO技术和有DDIO技术条件的处理方式是不同的,图2-12是两种环境下的处理流程图。

图2-12网卡读数据的处理流程

图2-12a是没有DDIO技术的处理流程。

  • 1)处理器更新报文和控制结构体。由于分配的缓冲区在内存中,因此会触发一次Cache不命中,处理器把内存读取到Cache中,然后更新控制结构体和报文信息。之后通知NIC来读取报文。
  • 2)NIC收到有报文需要传递到网络上的通知后,它首先需要读取控制结构体进而知道从哪里获取报文。由于之前处理器刚把该缓冲区从内存读到Cache中并且做了更新,很有可能Cache还没有来得及把更新的内容写回到内存中。因此,当NIC发起一个对内存的读请求时,很有可能这个请求会发送到Cache系统中,Cache系统会把数据写回到内存中,然后内存控制器再把数据写到PCI总线上去。因此,一个读内存的操作会产生多次内存的读写。

图2-12b是有DDIO技术的处理流程。

  • 1)处理器更新报文和控制结构体。这个步骤和没有DDIO的技术类似,但是由于DDIO的引入,处理器会开始就把内存中的缓冲区和控制结构体预取到Cache,因此减少了内存读的时间。
  • 2)NIC收到有报文需要传递到网络上的通知后,通过PCI总线把控制结构体和报文送到NIC内部。利用DDIO技术,I/O访问可以直接将Cache的内容送到PCI总线上。这样,就减少了Cache写回时等待的时间。

由此可以看出,由于DDIO技术的引入,网卡的读操作减少了访问内存的次数,因而提高了访问效率,减少了报文转发的延迟。在理想状况下,NIC和处理器无需访问内存,直接通过访问Cache就可以完成更新数据,把数据送到NIC内部,进而送到网络上的所有操作。


46.网卡的写数据操作

网卡的写数据操作和上节讲到的网卡的读数据操作是完全相反的操作,通俗意义上来讲就是有网络报文需要送到系统内部进行处理,运行的软件可以对收到的报文进行协议分析,如果有问题可以丢弃,也可以转发出去。其过程一般是NIC从网络上收到报文后,通过PCI总线把报文和相应的控制结构体送到预先分配的内存,然后通知相应的驱动程序或者软件来处理。和之前讲到的网卡的读数据操作类似,有DDIO技术和没有DDIO技术的处理也是不一样的,以下是具体处理过程。

首先还是没有DDIO技术的处理流程,如图2-13a所示。

  • 1)报文和控制结构体通过PCI总线送到指定的内存中。如果该内存恰好缓存在Cache中(有可能之前处理器有对该内存进行过读写操作),则需要等待Cache把内容先写回到内存中,然后才能把报文和控制结构体写到内存中。
  • 2)运行在处理器上的驱动程序或者软件得到通知收到新报文,去内存中读取控制结构体和相应的报文,Cache不命中。之所以Cache一定不会命中,是因为即使该内存地址在Cache中,在步骤1中也被强制写回到内存中。因此,只能从内存中读取控制结构体和报文。

图2-13 网卡写数据的处理流程

有DDIO技术的处理流程,如图2-13b所示。

  • 1)这时,报文和控制结构体通过PCI总线直接送到Cache中。这时有两种情形:
  • a)如果该内存恰好缓存在Cache中(有可能之前处理器有对该内存进行过读写操作),则直接在Cache中更新内容,覆盖原有内容。
  • b)如果该内存没有缓存在Cache中,则在最后一级Cache中分配一块区域,并相应更新Cache表,表明该内容是对应于内存中的某个地址的。
  • 2)运行在处理器上的驱动或者软件被通知到有报文到达,其产生一个内存读操作,由于该内容已经在Cache中,因此直接从Cache中读。

由此可以看出,DDIO技术在处理器和外设之间交换数据时,减少了处理器和外设访问内存的次数,也减少了Cache写回的等待,提高了系统的吞吐率和数据的交换延迟。


系列文章

《《深入浅出DPDK》读书笔记(一):基础部分知识点》

《深入浅出DPDK》读书笔记(二):网卡的读写数据操作相关推荐

  1. 推荐系统读书笔记(二)利用用户行为数据

    2.1 用户行为数据简介 显性反馈行为:用户明确表示对物品喜好的行为.评分.喜欢.不喜欢. 隐性反馈行为:不能明确反应用户喜好的行为.比如页面浏览.   显性反馈数据 隐性反馈数据 用户兴趣 明确 不 ...

  2. 深入浅出DPDK学习笔记(3)——— Cache和内存

    深入浅出DPDK学习笔记(3)--- Cache和内存 系统架构的演进 Cache系统简介 Cache的种类 TLB Cache Cache地址映射和变换 全关联型Cache 直接关联型Cache 组 ...

  3. oracle直查和call哪个更快,让oracle跑的更快1读书笔记二

    当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net  网友分享于:2013-08-23  浏览:9次 <> ...

  4. 深入浅出数据分析读书笔记

    深入浅出数据分析读书笔记 一.数据分析引言 1.数据分析的基本流程:确定--分解--评估--决策.一个完整的分析项目可能经过多轮流程 确定:客户的论点和数据 分解:将手头的资料汇总为有用的格式 评估: ...

  5. 《How Tomcat Works》读书笔记(二)

    <How Tomcat Works>读书笔记(二) 这是<How Tomcat Works>第一二章的读书笔记.第一张主要写了一个静态资源处理的web服务器,第二章加了对ser ...

  6. Node.js: 深入浅出Nodejs读书笔记

    今天终于把朴灵老师写的<深入浅出Node.js>给学习 完了, 这本书不是一本简单的Node入门书籍,它没有停留在Node介绍或者框架.库的使用层面上,而是从不同的视角来揭示Node自己内 ...

  7. 3D游戏设计读书笔记二

    3D游戏设计读书笔记二 一.简答题 • 解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系.   GameObjects是一个具体的实例,Assets是包括诸多游戏素材的资 ...

  8. 《Docker 技术入门与实践》-读书笔记二

    <Docker 技术入门与实践>-读书笔记一 <Docker 技术入门与实践>-读书笔记二 一.数据管理 用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据 ...

  9. 《Introduction To Modern Cryptography》读书笔记二

    <Introduction To Modern Cryptography>读书笔记二 本笔记纯粹个人读书习惯与相应见解,内容归纳完全出于个人需要与个人局限,如有修改意见(比如哪儿应该是值得 ...

最新文章

  1. Scrum Mastery:产品开发中如何优化产品价值?
  2. 《ZEMAX光学设计超级学习手册》一一2.6 本章小结
  3. Ecshop与Jquery冲突的完美解决方案(实践过,有效)
  4. c++ static 静态变量初始化
  5. Fiori应用里如何隐藏prospect字段
  6. 年度大片:StackOverflow 2017开发者调查报告
  7. 【CCF】201903-1小中大
  8. Sparklyr与Docker的推荐系统实战
  9. 以JTextPanel为例Swing的鼠标事件详解
  10. WINDOWS NPAPI插件小结
  11. pip:你真的熟悉怎么用了吗?
  12. sharelatex在centos 6.7 64位上的部署(1)
  13. 人人商城生成app教程_apicloud版人人商城app打包教程
  14. nyoj112指数运算
  15. base_url 是什么
  16. 前端遮罩层实现_前端制作遮罩与蒙版
  17. linux解压时的tar -zxvf是什么意思?
  18. AMD完成对ATI并购 07年推CPU/GPU集成平台
  19. CMake 基础用法,掌握 CMake 诀窍
  20. 最新手机枰测出炉 iPhone X仅仅名列第9名

热门文章

  1. eclipse中spring配置文件代码提示(全)
  2. C# EPPlus导出EXCEL,并生成Chart表
  3. 第六天 购车程序
  4. servlet和JSP页面乱码问题
  5. [C++ Primer] 第2章: 变量
  6. 提高加密程序加密强度的技巧
  7. load control template file /_controltemplates/taxonomypicker.ascx failed
  8. 为什么实施的项目会失败??
  9. 案例:实现文件下载并能正确显示中文文件名
  10. 交流信号叠加直流偏置_示波器助您更好地测量直流电源轫上的纹波噪声