Linux平台下基于Intel千兆网卡的零拷贝技术的研究与实现
Linux 中的零拷贝技术

Linux 中的零拷贝技术概述黄晓晨, 软件工程师, IBM黄晓晨,IBM system Z 自动化技术支持软件工程师。
冯瑞, 软件工程师, IBM简介:本系列由两篇文章组成,介绍了当前用于Linux 操作系统上的几种零拷贝技术,简单描述了各种零拷贝技术的实现,以及它们的特点和适用场景。
本文是本系列文章的第一部分,主要是介绍一些零拷贝技术的相关背景知识,简要概述了Linux 为什么需要零拷贝技术以及Linux 中都有哪几种零拷贝技术。
引言传统的Linux 操作系统的标准I/O 接口是基于数据拷贝操作的,即I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。
这样做最大的好处是可以减少磁盘I/O 的操作,因为如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘I/O 操作。
但是数据传输过程中的数据拷贝操作却导致了极大的CPU 开销,限制了操作系统有效进行数据传输操作的能力。
零拷贝(zero-copy )这种技术可以有效地改善数据传输的性能,在内核驱动程序(比如网络堆栈或者磁盘存储驱动程序)处理I/O 数据的时候,零拷贝技术可以在某种程度上减少甚至完全避免不必要CPU 数据拷贝操作。
现代的CPU 和存储体系结构提供了很多特征可以有效地实现零拷贝技术,但是因为存储体系结构非常复杂,而且网络协议栈有时需要对数据进行必要的处理,所以零拷贝技术有可能会产生很多负面的影响,甚至会导致零拷贝技术自身的优点完全丧失。
为什么需要零拷贝技术如今,很多网络服务器都是基于客户端- 服务器这一模型的。
在这种模型中,客户端向服务器端请求数据或者服务;服务器端则需要响应客户端发出的请求,并为客户端提供它所需要的数据。
随着网络服务的逐渐普及,video 这类应用程序发展迅速。
当今的计算机系统已经具备足够的能力去处理video 这类应用程序对客户端所造成的重负荷,但是对于服务器端来说,它应付由video 这类应用程序引起的网络通信量就显得捉襟见肘了。
Linux 中的零拷贝技术,第 2 部分

Linux 中的直接I/O如果应用程序可以直接访问网络接口存储,那么在应用程序访问数据之前存储总线就不需要被遍历,数据传输所引起的开销将会是最小的。
应用程序或者运行在用户模式下的库函数可以直接访问硬件设备的存储,操作系统内核除了进行必要的虚拟存储配置工作之外,不参与数据传输过程中的其它任何事情。
直接I/O 使得数据可以直接在应用程序和外围设备之间进行传输,完全不需要操作系统内核页缓存的支持。
关于直接I/O 技术的具体实现细节可以参看developerWorks 上的另一篇文章”Linux 中直接I/O 机制的介绍” ,本文不做过多描述。
图 1. 使用直接I/O 的数据传输针对数据传输不需要经过应用程序地址空间的零拷贝技术利用mmap()在Linux 中,减少拷贝次数的一种方法是调用mmap() 来代替调用read,比如:首先,应用程序调用了mmap() 之后,数据会先通过DMA 拷贝到操作系统内核的缓冲区中去。
接着,应用程序跟操作系统共享这个缓冲区,这样,操作系统内核和应用程序存储空间就不需要再进行任何的数据拷贝操作。
应用程序调用了write() 之后,操作系统内核将数据从原来的内核缓冲区中拷贝到与socket 相关的内核缓冲区中。
接下来,数据从内核socket 缓冲区拷贝到协议引擎中去,这是第三次数据拷贝操作。
图 2. 利用mmap() 代替read()通过使用mmap() 来代替read(), 已经可以减半操作系统需要进行数据拷贝的次数。
当大量数据需要传输的时候,这样做就会有一个比较好的效率。
但是,这种改进也是需要代价的,使用mma()p 其实是存在潜在的问题的。
当对文件进行了内存映射,然后调用write() 系统调用,如果此时其他的进程截断了这个文件,那么write() 系统调用将会被总线错误信号SIGBUS 中断,因为此时正在执行的是一个错误的存储访问。
这个信号将会导致进程被杀死,解决这个问题可以通过以下这两种方法:1.为SIGBUS 安装一个新的信号处理器,这样,write() 系统调用在它被中断之前就返回已经写入的字节数目,errno 会被设置成success。
剖析linux下的零拷贝技术

剖析linux下的零拷贝技术背景大多数的网络服务器是基于server-client模式的。
在这当中,下载是一个很常见的功能。
此时服务器端需要将主机磁盘上的文件发送到客户端上去。
传统的Linux操作系统的标准I/O接口是基于数据拷贝操作的,即I/O操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。
那么传统的I/O操作过程是咋样的呢?(下面是具体说明,以read和write为例)在执行read操作时,操作系统首先会检查,文件内容是否缓存在内核缓冲区,如果在内核缓冲区,则不用去磁盘中读取文件,而是直接将内核缓冲区的内容拷贝到用户空间缓冲区中去。
如果不是,操作系统则首先将磁盘上的数据拷贝的内核缓冲区(DMA),然后再把内核缓冲区上的内容拷贝到用户缓冲区中。
接下来,write系统调用再把用户缓冲区的内容拷贝到网络堆栈相关的内核缓冲区中,最后再往对方的sockfd中些数据。
并且在这个过程中还涉及到了四次的上下文切换。
那传统的I/O操作会带来什么问题呢?在高速网络中,大量传统的I/O操作导致的数据拷贝工作会占用CPU 时间片,同时也需要占用额外的内存带宽。
使cpu将大多数的时间用于I/O操作上,从而无法处理其他的任务,很大程度上影响了系统的性能,使服务器成为性能瓶颈。
而本身我们可以看出:很多数据复制操作并不是真正需要的。
所以可以消除一些复制操作以减少开销并提高性能。
这就引出了我们今天要介绍的“零拷贝”技术。
概念零拷贝(Zero-copy)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。
这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。
零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率。
而且,零拷贝技术减少了用户进程地址空间和内核地址空间之间因为上下文切换而带来的开销。
DMA 网卡零拷贝实现的设计与

Intel 82571 零拷贝的设计与实现本文主要阐述基于Intel网卡零拷贝的实现过程, 通常情况下网络数据包到达用户应用程序要经过如下几个过程:1.网卡的物理硬件从物理媒体(通常情况下网线)上接收到得信号(数据帧)首先放在网卡自己的一个缓冲区(网卡RAM),在这一过程中通常要进行帧校验(比如FCS), 帧过滤等。
2.如果网卡支持DMA就会启动DMA操作,把收到的数据帧通过DMA操作放到我们事先申请好的buffer中,DMA操作由硬件自动完成,当然用户要提供给DMA硬件操作必要的参数,包括DMA 地址,DMA大小等,有可能还有地址对齐等要求。
DMA的具体操作后面详细描述。
3.这一步是DMA零拷贝最重要的一个环节,就是把网卡接收到的数据帧直接映射到用户层,不需要经过内核协议栈的处理。
后面详细描述。
网卡数据从网络到Linux内核的路径简要分析:网卡的主要工作原理:发送数据时,计算机把要传输的数据并行写到网卡的缓存,网卡对要传输的数据进编码(10M以太网使用曼切斯特码,100M以太网使用差分曼切斯特码),串行发到传输介质上.接收数据时,则相反。
对于网卡而言,每块网卡都有一个唯一的网络节点地址,它是网卡生产厂家在生产时烧入ROM(只读存储芯片)中的,我们把它叫做MAC地址(物理地址),且保证绝对不会重复。
MAC为48bit,前24比特由IEEE分配,是需要钱买的,后24bit由网卡生产厂家自行分配.我们日常使用的网卡都是以太网网卡。
目前网卡按其传输速度来分可分为10M网卡、10/100M自适应网卡以及千兆(1000M)网卡。
如果只是作为一般用途,如日常办公等,比较适合使用10M网卡和10/100M 自适应网卡两种。
如果应用于服务器等产品领域,就要选择千兆级及更高级别的网卡。
本文主要讲解的是Intel 82571 千兆网卡的网卡驱动:Linux 内核目录:linux-3.4.7/drivers/net/ethernet/intel/e1000e关于这款网卡的硬件信息:更详细的信息可以通过lspci -vvv查看。
Linux环境下普适性零拷贝平台的研究与实现

关键词 :零拷 贝; 普适性;内 存映射 ; i x N P Ln ; A I u
中图分 类号 :T 3 3 P9 文 献标 志码 :A 文章编 号 :10 —65 2 1 )7 22 —4 0 139 (0 10 .6 10
d i1 . 9 9 ji n 10 -6 5 2 1 . 7 0 2 o :0 3 6 / .s .0 13 9 .0 10 .6 s
Co p e t he c mmo r prea y p afr s f z r —op m  ̄ d wi t o h n p o i tr l t m o e o c y, is p ro ma c s g t a c ran i p o e n , t plto m o t e fr n e ha o e i m r v me t he af r t
为休眠的零拷贝程序构建 了红黑树 队列 , 通过设置较 大的睡眠
时间来 唤醒零拷 贝程 序 , 以达到 避免 中 断湮 没 的 目的 。其 次 Z rP通过 函数 e00 c a—x i eo l0 一 l n r—r 网卡 的接 收 队列 进行 e q对
限等 问题 , 不能够得到普遍应用 。
பைடு நூலகம்
0 引言
作为报文捕获前端 , 数据包捕获技术普遍应 用于高性能路 由器 、 硬件防火墙 、 侵检测 系统等 领域 中。关 于数 据包捕 获 入
技术的研究 和讨论 已有很 多 , 国外 的 P — IG… 、C p ; 如 F RN n a 国 内的 U S3、 P C [ R N C 、 eo [ U C 等 。这 MP [ H P P 、 T P 【 Z r 、 P [ ] P
( ai a ii l wt i ytm E gneig& Tcn l i l e ac et , hnzo 50 2, hn ) N t n l gt ihn Ss n i r o D aS c g e e n eh oo c s r Cne Z egh u40 0 C ia gaR e h r
基于Intel千兆网卡的高速包捕获技术的研究与实现

1 Lb cp数 据 包 捕 获 机 制 ip a
1 1 Lb cp数 据 包 捕 获 机 制 分 析 . ip a
Lb cp P c e C pueLbay , ip a ( a kt atr irr) 即包 捕 获 函数 库 , 一 个 应用 程 序 级 的 A I 口 , Ln x U i 是 P接 在 iu / nx和 Widw 环境 下都 有着 广泛 的应 用 。通过 它提 供 的 c程序 接 口, 以方便 捕 获 网络数据 包 , no o r d e t e ke n li tru tr s n e a d a dr s h r b e o n e r p o td b n x i s d t e uc h r e ne r p e po s n d e st e p o l m fit ru —
 ̄ r a c c e r c s i g s se . m n e pa k tp o e sn y tm Ke y wor :i p a ds lb c p; z r — o y; NAP ; gg b tNI ;pa k tc pt e eo c p I i a i C c e a ur
资源 消耗都 远远 不 能适应 当前 的 网络应 用 。 为 了解 决存 在 的问题 , 文在 结合 零拷 贝 技 术 的基 础 上 , 计并 实现 了一种 基 于 It 千兆 网卡 的 高 本 设 ne l
速 包捕 获接 口。实验 证 明 , 使用 这 种接 口可 以大 大提 高数 据 包 的捕 获 速度 , 降低 系 统 开 销 , 网络 数据 后 为
to n i iai n Th b v wo p it r al mp o e t e p ro ma c f p c e a t r in a n h lto . e a o e t on s g e t i r v h e r n e o a k tc p u e, lg t n y f ih e t e b d n o U , whi e u i g tc n l g h e hod o h s rlv l C o be o e h g pe一 h ur e n CP l r d c n e h o o y tr s l ft e u e -e e P t c m ih- r e
零拷贝技术交流文档

本文档的Copyleft归wwwlkk所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性,严禁用于任何商业用途。
E-mail: wwwlkk@来源: /?business&aid=6&un=wwwlkk#7零拷贝技术交流文档目录:(一)linux中的分页机制 (1)(二)实现零拷贝的两个理论方案 (2)(三)为防火墙定制的零拷贝技术方案 (3)(四)参考文献 (5)前言:零拷贝技术是比较实用的技术,但是网络上很少有人介绍这种技术的实现原理,本文的目的就是详细的讲解零拷贝的实现原理,但是不讨论技术细节,因为技术细节不好表述,而且不同的需求或者不同的程序员,都会选择不同技术来实现,但是最终的实现原理是不变的。
(一)linux中的分页机制CPU要访问某块物理内存,必须要获得内存的物理地址,CPU集成有寻址硬件,会根据机器语言指令中提供的地址,执行地址转换,获得的物理地址。
CPU有两种转换模式:1.实模式2.保护模式。
实模式下的物理地址=线性地址,保护模式下的物理地址=线性地址通过分页机制转化为物理地址。
启动保护模式:把CPU控制寄存器CR0中的最高位置1。
CPU保护模式寻址方式:图1 分页机制寻址说明:CR3控制寄存器的值是物理地址。
由于寻找的是页框的物理地址,页框的物理地址是4096的整数倍,所以CR3,页目录和页表中存储的物理地址后12位都为0。
也就是这12位的空间不存储物理地址信息,而是用于存储访问控制信息(可读/可写/CPU特权级别),或者对应的页是否存在等信息。
其中访问控制信息(可读/可写/CPU特权级别)可以特别利用:例如:如果某个页框的范围控制标记是只读的,那么进程如果对这个页框进行写操作,就会产生段错误。
注意:从2.6.11版本开始,采用了四级分页模型,但基本原理是一样的。
每个进程的CR3的值是不同,进程切换时保存或者恢复CR3的值。
只要设置了CR3的值CPU 将自动进行寻址。
零拷贝方案

∙直接I/O:对于这种数据传输方式来说,应用程序可以直接访问硬件存储,操作系统内核只是辅助数据传输:这类零拷贝技术针对的是操作系统内核并不需要对数据进行直接处理的情况,数据可以在应用程序地址空间的缓冲区和磁盘之间直接进行传输,完全不需要Linux 操作系统内核提供的页缓存的支持。
∙在数据传输的过程中,避免数据在操作系统内核地址空间的缓冲区和用户应用程序地址空间的缓冲区之间进行拷贝。
有的时候,应用程序在数据进行传输的过程中不需要对数据进行访问,那么,将数据从Linux 的页缓存拷贝到用户进程的缓冲区中就可以完全避免,传输的数据在页缓存中就可以得到处理。
在某些特殊的情况下,这种零拷贝技术可以获得较好的性能。
Linux 中提供类似的系统调用主要有mmap(),sendfile() 以及splice()。
∙对数据在Linux 的页缓存和用户进程的缓冲区之间的传输过程进行优化。
该零拷贝技术侧重于灵活地处理数据在用户进程的缓冲区和操作系统的页缓存之间的拷贝操作。
这种方法延续了传统的通信方式,但是更加灵活。
在Linux 中,该方法主要利用了写时复制技术。
以标准的方式对文件进行读写利用mmap 代替read直接IO方式sendfile ()sendfile(socket, file, len);零拷贝带有DMA 收集拷贝功能的sendfile()上小节介绍的sendfile() 技术在进行数据传输仍然还需要一次多余的数据拷贝操作,通过引入一点硬件上的帮助,这仅有的一次数据拷贝操作也可以避免。
为了避免操作系统内核造成的数据副本,需要用到一个支持收集操作的网络接口,这也就是说,待传输的数据可以分散在存储的不同位置上,而不需要在连续存储中存放。
这样一来,从文件中读出的数据就根本不需要被拷贝到socket 缓冲区中去,而只是需要将缓冲区描述符传到网络协议栈中去,之后其在缓冲区中建立起数据包的相关结构,然后通过DMA 收集拷贝功能将所有的数据结合成一个网络数据包。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
表 1 接收数据表 3.2 系统环境 发包机: Lenovo 1 和 Lenove 2。
配置: P4 XEON 3.0G, 512m 内存, Intel 82541GI 千兆电 口网卡。 收包机: Dell 1
配置: P4 2.4G, 512m 内存, Intel 82541GI 千兆电口网卡。 交换机: 思科 WS- C3750- 48TS- S 千兆交换机 包机和收包机的操作系统都是 RHEL4.0, 内核版本为 2. 6.16.19。 3.3 实验数据及其分析 为了测试 Intel 千兆网卡的收发性能, 发包程序和收包程序 都是本人开发的程序。 计算带宽的时候要加上 InterframeGap, Pre&Postamble, Frame Header, Frame FCS, 所以发包流量和收包流量的计算公 式[8]:
接收缓冲环中的头索引是由硬件来控制, 每当网卡将新的 数据包拷贝到接收缓冲环, 头索引都要自动将索引后移。但是当 头索引和尾索引相等的时候, 表示接收缓冲环已经满了, 网卡就 不再拷贝数据包到内存缓冲环。如果想让设网卡不停的接收数 据包, 那就要在头索引赶上尾索引之前, 使尾索引后移, 这样就 可以达到网卡的线速。尾索引是由软件来控制, 而通过内存映射 我们可以在用户空间直接对尾索引进行操作, 进而在用户空间 直接控制网卡接收数据包。 2.1 接收控制机制
间直接控制网卡进行数据包的收发, 并且可以在用户空间访问 接收和发送缓冲环, 同时 CPU 有足够的空闲时间用来对数据包 进行处理。但是由于条件和时间限制, 还有许多工作要做, 购买 Intel 千兆光纤网卡进行数据测试, 看能否达到 Intel 宣称的理论 值 64 字节小包 1,488,095pps[8]和 1500 字节大包 81,274pps[8], 继续深入研究为上层应用程序提供一种像 libpcap 的工业标准 接口, 其他使用 libpcap 的应用程序, 可以只作简单修改甚至不 修改, 只需重新编译一下源程序就可以运行, 充分利用本零拷贝 平台的优越性。
修改的网卡驱动程序同样控制着接收缓冲环结构, 这个缓 冲环同样是在网卡初始化的时候产生, 但是在数据包的接收过 程中这个缓冲环中的内存缓冲区是固定不变的, 也就是说在网 卡初始化的时候一旦分配完成, 就不会再因为数据包的接收而 重新分配或者回收内存缓冲区, 这是因为数据包的接收过程避 开了内核的干涉。 2.3 中断的处理
2008 年第 4 期
福建电脑
5
Linux 平台下基于 Intel 千兆网卡的零拷贝技术的 研究与实现
刘峰 黄凯明 黎忠文
( 厦门大学计算机科学系 福建 厦门 361005 )
【摘 要】: 千兆网络时代的到来, 使得在通用操作系统下远达不到线速捕获和发送数据包。本文实现了一种在用户空 间直接控制网卡收发数据包的零拷贝平台, 旁路了内核, 减少了数据包在内核和用户空间传递过程中的拷贝, 缓存, 以及系统 调用等的开销, 使得采用轮询机制基本上达到了千兆网卡的线速。
Libpcap 主要缺点如下: ① 数据包的传输过程中函数调用和内存拷贝次数过多 ② revfrom 是 一 个 系 统 调 用 函 数 , 每 调 用 一 次 , 它 只 向 用 户 空间传递一个包, 而系统调用实际上是一个中断, 因此用传统的 方法进行大流量捕包时, 系统将会不断的进行中断处理和进程 切换, 那么最后导致"中断湮没"(livelock)[5], 使 CPU 无暇顾及 其 他 任 务 。。 ③ 整个包传输的过程是开中断的, 这样会造成一个包的传 输和处理过程可能被下一个包的到来发出的硬件中断所打断。 为了彻底消除数据包捕获过程中的系统额外开销, 本文特意引 入了一种新的零拷贝技术, 由用户空间控制数据包的收发, 而不 是传统的由内核控制数据包的收发, 屏蔽掉中断, 旁路了系统协 议栈, 省去了系统调用, 以及内存分配及回收, 及内存拷贝等开 销, 只是进行了一次网卡和内存缓冲区之间的 DMA 传输。 2.本 零 拷 贝 平 台 的 实 现 思 想 及 实 现 技 术 细 节 如图 1 零拷贝原理图所示: 本零拷贝平台的实现思想主要 是通过内存映射在用户空间直接对接收和发送缓冲环进行读 写, 以达到只需要一次网卡和缓冲环之间的 DMA 传输就可以实 现数据的收发, 同时通过内存映射可以在用户空间直接对网卡 上的寄存器进行操作, 从而使网卡的收发控制由内核空间转移 到了用户空间。
参考文献: 1.Lawrence Berkeley National Labs, libpcap. Network R esearch Group, http:/ / www.tcpdump.org/ . 2.The Tcpdump Group, tcpdump. http:/ / www.tcpdump.org/ . 3.G. Combs, Ethereal. http:/ / www.ethereal.com/ . 4.M. R oesch. Snort - Lightweight Intrusion Detection for Networks[j]. Proceedings of Usenix Lisa ' 99 Conference, http:/ / www.snort.org/ . 5. J. Mogul and K. R amakrisnan. Eliminating R eceive Livelock in an Interrupt- Driven Kernel, Proceedings of 1996 Usenix Technical Conference, 1996. 6.L. R izzo. Device Polling Support for FreeBSD. BSDConEurope Conference, 2001. 7.钱丽萍,高光来,李亚萍. 基于 BPF 和 LIBPCAP 库的包捕获应用系统 的设计[J]. 电脑学习 1999,(6):1113. 8.Small Packet Traffic Performance Optimization for 8255x and 8254x Ethernet Controllers. http:/ / www.Intel.com/ design/ network/ applnots/ ap453.htm. 9.PCI/ PCI- X Family of Gigabit Ethernet Controllers Software Developer' s Manual (SDM) 82540EP/ EM, 82541xx, 82544GC/ EI, 82545GM/ EM, 82546GB/ EB, and 82547xx. http:/ / www.Intel.com/ design/ network/ manuals/ 8254x_GBe_SDM.htm.
当有数据包拷贝到接收缓冲环时, 网卡要产生硬件信号通 知 CPU 有 中 断 产 生 , 当 CPU 执 行 完 成 现 在 的 指 令 就 要 处 理 中 断, 根据中断号转到相应的中断处理程序处理数据包, 中断处理 程序都是在驱动程序初始化的时候注册完成。
很显然中断的处理还是在内核, 所以为了实现在用户空间 直接控制网卡接收数据包, 必须屏蔽掉网卡的中断, 在用户空间 以轮询的方式查看数据包是否接收完成。 2.4 缓冲环的控制
Libpcap 的基本运行模式是: 首先获取可用 的 监 听 设 备 , 即 某个网络接口(eth0 或者 eth1 等),再通过系统调用 socket 创建一 个 原 始 套 接 字 , 指 明 自 己 的 监 听 端 口 为 ETH_P_ALL, 即 接 收 所 有的包, 然后不断循环调用一个读包函数读取数据包, 这个读包 函数的本质是一个 recvfrom 系统调用, 它从系统的 sk_buff 缓冲 区中每次读取一个包送给上层收包函数, 如果缓冲区空, 则阻塞 等 待 [7]。
图 1 零拷贝原理图
2.1 内存映射 ( 1) 查看/proc/iomem 取得网卡上寄存器的首地址和地址范
围; 然后通过内存映射函数 mmap 将网卡上寄存器的首地址 映 射到用户虚拟地址空间, 达到在用户空间对网卡上的寄存器进 行直接读写。
( 2) 通过网卡物理首地址和网卡上寄存器的偏移地址获得 网卡上特定寄存器的物理地址。然后将网卡上特定寄存器物理 地址映射到用户虚拟地址空间, 用户空间的程序就可以直接对 寄存器进行操作。根据图 1 接收原理图所示: 通过内存映射我们 可以对网卡接收描述符队列环结构( 接收缓冲环) 以及头尾索引 进行操作。 2.2 修改网卡驱动
图 2 测试网络拓扑图
( InterframeGap + Pre&Postamble + Frame Header + Frame FCS + IP Packet) ×pps;
其中: InterframeGap 为 12 字节, Pre&Postamble 为 8 字节, Frame Header 为 14 字节, Frame FCS 为 4 字节, pps 为 packet per second, bps 为 bit per second 就是每秒接收或发送的数据包, 这 里的数据包指 IP 数据包。 4.结 束 语 本零拷贝平台实现了一种通过内存映射技术可以在用户空
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
( 上接第 12 页)
接口, 具体界面和发布通知的界面基本相同, 在文件上传主界面 上 主 要 可 以 填 写 发 布 日 期 、发 布 人 、相 关 主 题 、内 容 和 上 传 的 附 件。 3.4.2 文件下载
采 用 轮 询 策 略[6], 就 是 不 停 地 在 用 户 空 间 对 接 收 缓 冲 环 的
基金项目: 中山市科技项目( 2006A157) ; 厦门大学院士基金(0630- E23011); 厦门大学新世纪优秀人才基金(0000- X07116)。
6
福建电脑