文档章节

SylixOS 网络零拷贝技术

SeanWoo
 SeanWoo
发布于 2017/09/11 10:53
字数 984
阅读 12
收藏 0

SylixOS 网络零拷贝技术


1. 网络零拷贝介绍

网络零拷贝技术指的是在数据报文从网络设备到用户程序传递的过程中,一种减少数据拷贝次数,减少系统调用,实现CPU的零参与,从而减轻 CPU负载的技术。

1.1 SylixOS网络现状

SylixOS网络使用的是Lwip协议栈,其数据报文从网络设备到用户程序只需要一次拷贝即可实现。产生这次拷贝的原因是数据报文从网络设备往协议栈传输时,数据格式不一样。网络协议栈需要专门的数据结构(pbuf)来管理报文,而设备层只会将数据本身存放在一块内存缓冲区中。

1.2 SylixOS零拷贝技术使用前提

SylixOS目前版本已经支持网络零拷贝,但这只适用于x86架构的CPU。主要原因是使用零拷贝技术后,网络协议栈对报文数据的管理并不会使用cache。这种方式在ARM等架构上使用时,协议栈需要对报文不停的访问,但由于没有cache,因此访问效率反而会降低。

2. 网络零拷贝技术实现

2.1 不使用零拷贝的报文接收流程

  不使用零拷贝的数据接收流程如图 2‑1 所示。

这里写图片描述

                  图 2‑1 不使用零拷贝接收

不使用零拷贝时,报文从网络设备到用户应用程序,只会进行一次拷贝操作,这一次拷贝操作位于网卡驱动中,即网络设备在接收到DMA搬运的数据报文时,会将报文的内容拷贝到协议栈支持的数据管理结构(pbuf)中。如图 2‑1 ,拷贝后的报文位于Lwip协议栈管理的内存区内。

拷贝完成后,协议栈会对pbuf管理的报文做各种分析,最后,通过IPC(进程通信方式)与用户程序进行交互。使用IPC就可以不进行数据拷贝,应用程序通过信号量、消息邮箱等机制去通知协议栈,让协议栈进行对应的处理。

2.2 使用零拷贝的报文接收流程

   使用零拷贝接收流程如图 2‑2 所示。

这里写图片描述

                  图 2‑2 使用零拷贝接收

SylixOS里零拷贝是将报文从驱动往协议栈传送的一次拷贝也省去。实现的思路是让协议栈可以直接使用驱动收到的网络数据。因此,驱动代码需要将用于接收网络报文的数据结构换成协议栈数据管理的结构,即换成pbuf类型。实现的方式是将原本驱动中描述符指向的buf地址换成pbuf结构里payload指针指向的内容即可。

主要实现流程如下:

  • 驱动需要创建一块大的零拷贝pbuf内存池(zc_pool),后续的报文接收的pbuf都从零拷贝pbuf池子里分配;

  • 驱动初始化描述符时,不调用DMAmalloc去分配一块物理地址,而是从上一步分配的零拷贝池子里获取一个零拷贝的pbuf,然后将pbuf所指向的内存地址赋值给DMA接收描述符;

  • 此后,网卡接收处理函数不需要再做拷贝,而是直接将收到报文的描述符对应的pbuf传到协议栈,同时按照上一步的方法,给这个完成接收的描述符分配一个新的零拷贝pbuf。

    由于上述申请的零拷贝pbuf类型是custom_pbuf类型,因此经过上述操作后,协议栈对接收到的pbuf进行释放操作时,会调用零拷贝对应的释放函数。

© 著作权归作者所有

共有 人打赏支持
上一篇: 链接脚本分析
下一篇: Lwip IP包分片重组
SeanWoo
粉丝 1
博文 13
码字总数 15838
作品 0
南京
私信 提问
SylixOS-IgH系统平台搭建

1.参考手册 下面7个文件存放在本地服务器“\10.9.1.113.研发部9.ExchangeFolder郑磊”路径下 《RealEvo-IDE使用手册》 《SylixOS应用开发手册》 《SylixOSshell用户手册》 《SylixOS-IgH使用...

zhengleich
2018/05/15
0
0
SylixOS上EtherCAT实现

1 EtherCAT开源协议栈介绍 目前常见开源的主站代码为RT-LAB开发的SOEM(Simple OpenSource EtherCAT Master)和EtherLab的the IgH EtherCAT® Master,SylixOS对两者都支持。其中IgH作为常用的...

Jackstraw瑞
2017/11/01
0
0
SylixOS 支持多核 RISC-V 处理器

2018年3月31日,SiFive 发布全球首款多核全功能 RISC-V 处理器:FU540,此款处理器也是全球第一颗有能力运行标准 Linux 的 CPU。 22天后,SylixOS 成功在 FU540 真机上运行起来,成为全球第一...

翼辉信息
2018/04/22
0
0
SylixOS调试方法详解——性能分析

1. SylixOS调试方法介绍 SylixOS实现了一个功能强大的调试stub(桩),可在设备或模拟器上在线调试应用程序,RealEvo-IDE也提供配套的调试插件。目前RealEvo-IDE既支持自动推送调试、也支持传...

Esc120
2018/06/26
0
0
VxWorks驱动移植至SylixOS总结

本文档描述了将VxWorks中的驱动源码快速移植至SylixOS中的方法,使用时需要结合SylixOS中的VxWorks兼容层实现。 1. 驱动注册与初始化 1.1 VxWorks中驱动注册与初始化 1.1.1 初始化函数 VxWo...

zhywxyy
2018/08/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

独家解密:阿里超大规模数据中心性能分析

郭健美,阿里巴巴高级技术专家,目前主要从事数据中心的性能分析和软硬件结合的性能优化。CCF 系统软件专委和软件工程专委的委员。曾主持国家自然科学基金面上项目、入选上海市浦江人才计划A...

阿里云云栖社区
8分钟前
0
0
独家解密:阿里大规模数据中心性能分析

郭健美,阿里巴巴高级技术专家,目前主要从事数据中心的性能分析和软硬件结合的性能优化。CCF 系统软件专委和软件工程专委的委员。曾主持国家自然科学基金面上项目、入选上海市浦江人才计划A...

zhaowei121
12分钟前
0
0
mongodb系列~配置文件的优化与处理

mongodb系列~配置文件的优化与处理 一 简介:讲讲如何优化mongo配置文件 二 常规参数 port= //端口 fork=true//守护进程方式启动mongo logpath=shard.log //mongo日志存放路径 journal= tru...

linjin200
14分钟前
0
0
同一台 windows10 设备,安装两个不同版本的mysql

两个mysql 的my.ini文件需要 配置不同的端口。 [mysqld]# 设置3307端口port=3307# 设置mysql的安装目录basedir=F:\\mysql-5.7.24-winx64 # 切记此处一定要用双斜杠\\,单斜杠我这里...

无敌小学僧
14分钟前
0
0
条码插件TBarCode Office系列教程一(Word Add-In篇)

TBarCode Office是一款适用于Microsoft Word 2007、2010和2013的条码插件,通过此插件可以轻松的在您的文档中嵌入代码。此系列教程旨在介绍TBarCode Office的常见问题及解答,帮助大家学习使...

ymy_666666
15分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部