文档章节

SylixOS 网络零拷贝技术

SeanWoo
 SeanWoo
发布于 2017/09/11 10:53
字数 984
阅读 6
收藏 0
点赞 0
评论 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进行释放操作时,会调用零拷贝对应的释放函数。

© 著作权归作者所有

共有 人打赏支持
SeanWoo
粉丝 1
博文 12
码字总数 14695
作品 0
南京
SylixOS-IgH系统平台搭建

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

zhengleich
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 真机上运行起来,成为全球第一...

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

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

Esc120
06/26
0
0
SylixOS线程堆栈大小浅析

目录 1. SylixOS线程、线程栈介绍 1 1.1 线程的介绍 1 1.2 线程栈的介绍 1 2. SylixOS线程栈大小的分配 1 2.1 线程、线程栈相关属性的设置 2 2.2 线程栈大小 2 2.3 线程堆栈警戒区 3 3. 总结...

Esc120
06/26
0
0
SylixOS调试方法详解——综合案例分析

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

Esc120
06/26
0
0
SylixOS线程创建的流程分析

概述 本文档的主要内容是分析SylixOS线程创建的流程,详细介绍了SylixOS的线程创建函数API_ThreadCreate。 环境和参数检查 在SylixOS中,线程的创建函数不能在中断中调用。且在线程的创建时,...

wangyu123
2017/10/24
0
0
SylixOS调试方法详解——综合案例分析

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

Esc130
2017/10/25
0
0
SylixOS下IIS驱动编程

目录 1. IIS简介 1 2. 数字声音简介 1 2.1 采样频率 1 2.2 量化位数 1 2.3 声道数 1 3. WAV音频文件格式简介 2 3.1 文件格式 2 3.2 原始声音数据的组织方式 2 4. Mini2440声卡的连接方式 3 ...

深山野老
06/26
0
0
SylixOS 在 t_main 中使用硬浮点方法

1. 问题描述 在某些使用场景中,应用程序不使用动态加载的方式执行,而是跟随BSP在 t_main 线程中启动,此时应用代码是跟随 BSP 进行编译的。由于 BSP 默认使用软浮点,所以会导致应用代码中...

zhywxyy
06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周一乱弹 —— 你的朋友圈有点生锈了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @Devoes :分享Trademark的单曲《Only Love (电视剧《妙手仁心 II》插曲)》: 《Only Love (电视剧《妙手仁心 II》插曲)》- Trademark 手机党少...

小小编辑
52分钟前
54
5
【面试题】盲人坐飞机

有100位乘客乘坐飞机,其中有一位是盲人,每位乘客都按自己的座位号就坐。由于盲人看不见自己的座位号,所以他可能会坐错位置,而自己的座位被占的乘客会随便找个座位就坐。问所有乘客都坐对...

garkey
今天
1
0
谈谈神秘的ES6——(二)ES6的变量

谈谈神秘的ES6——(二)ES6的变量 我们在《零基础入门JavaScript》的时候就说过,在ES5里,变量是有弊端的,我们先来回顾一下。 首先,在ES5中,我们所有的变量都是通过关键字var来定义的。...

JandenMa
今天
1
0
arts-week1

Algorithm 594. Longest Harmonious Subsequence - LeetCode 274. H-Index - LeetCode 219. Contains Duplicate II - LeetCode 217. Contains Duplicate - LeetCode 438. Find All Anagrams ......

yysue
今天
1
0
NNS拍卖合约

前言 关于NNS的介绍,这里就不多做描述,相关的信息可以查看NNS的白皮书http://doc.neons.name/zh_CN/latest/nns_background.html。 首先nns中使用的竞价货币是sgas,关于sgas介绍可以戳htt...

红烧飞鱼
今天
1
0
Java IO类库之管道流PipeInputStream与PipeOutputStream

一、java管道流介绍 在java多线程通信中管道通信是一种重要的通信方式,在java中我们通过配套使用管道输出流PipedOutputStream和管道输入流PipedInputStream完成线程间通信。多线程管道通信的...

老韭菜
今天
0
0
用Python绘制红楼梦词云图,竟然发现了这个!

Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦,绘制小...

猫咪编程
今天
1
0
Java中 发出请求获取别人的数据(阿里云 查询IP归属地)

1.效果 调用阿里云的接口 去定位IP地址 2. 代码 /** * 1. Java中远程调用方法 * http://localhost:8080/mavenssm20180519/invokingUrl.action * @Title: invokingUrl * @Description: * @ret......

Lucky_Me
今天
1
0
protobuf学习笔记

相关文档 Protocol buffers(protobuf)入门简介及性能分析 Protobuf学习 - 入门

OSC_fly
昨天
0
0
Mybaties入门介绍

Mybaties和Hibernate是我们在Java开发中应用的比较多的两个ORM框架。当然,目前Mybaties正在慢慢取代Hibernate,这是因为相比较Hibernate而言Mybaties性能更好,响应更快,更加灵活。我们在开...

王子城
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部