网站大量收购独家精品文档,联系QQ:2885784924

mbuf:存储器缓存.docx

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
mbuf:存储器缓存

mbuf:存储器缓存2.1 引言网络协议对内核的存储器管理能力提出了很多要求。这些要求包括能方便地操作可变长缓存,能在缓存头部和尾部添加数据(如低层封装来自高层的数据),能从缓存中移去数据(如,当数据分组向上经过协议栈时要去掉首部),并能尽量减少为这些操作所做的数据复制。内核中的存储器管理调度直接关系到联网协议的性能。在第1章我们介绍了普遍应用于N e t / 3内核中的存储器缓存: m b u f,它是“memory buff e r”的缩写。在本章,我们要查看m b u f和内核中用于操作它们的函数的更多的细节,在本书中几乎每一页我们都会遇到m b u f。要理解本书的其他部分必须先要理解m b u f。m b u f的主要用途是保存在进程和网络接口间互相传递的用户数据。但m b u f也用于保存其他各种数据:源与目标地址、插口选项等等。图2 - 1显示了我们要遇到的四种不同类型的m b u f,它们依据在成员m f l a g s中填写的不同标志M P K T H D R和M E X T而不同。图2 - 1中四个m b u f的区别从左到右罗列如下:1) 如果m f l a g s等于0,m b u f只包含数据。在m b u f中有1 0 8字节的数据空间(m d a t数组)。指针m d a t a指向这1 0 8字节缓存中的某个位置。我们所示的m d a t a指向缓存的起始,但它能指向缓存中的任意位置。成员m l e n指示了从m d a t a开始的数据的字节数。图1 - 6是这类m b u f的一个例子。在图2 - 1中,结构m h d r中有六个成员,它的总长是2 0字节。当我们查看此结构的C语言定义时,会看见前四个成员每个占用4字节而后两个成员每个占用2字节。在图2 - 1中我们没有区分4字节成员和2字节成员。2) 第二类m b u f的m f l a g s值是M P K T H D R,它指示这是一个分组首部,描述一个分组数据的第一个m b u f。数据仍然保存在这个m b u f中,但是由于分组首部占用了8字节,只有1 0 0字节的数据可存储在这个m b u f中(在m p k t d a t数组中)。图1 - 1 0是这种m b u f的一个例子。成员m p k t h d r . l e n的值是这个分组的m b u f链表中所有数据的总长度:即所有通过m _ n e x t指针链接的m b u f的m _ l e n值的和,如图1 - 8所示。输出分组没有使用成员m p k t h d r . r c v i f,但对于接收的分组,它包含一个指向接收接口i f n e t结构(图3 -6 )的指针。3) 下一种m b u f不包含分组首部(没有设置K P K T H D R),但包含超过2 0 8字节的数据,这时用到一个叫“簇”的外部缓存(设置M E X T)。在此m b u f中仍然为分组首部结构分配了空间,但没有用—在图2 - 1中,我们用阴影显示出来。N e t / 3分配一个大小为1 0 2 4或2 0 4 8字节的簇,而不是使用多个m b u f来保存数据(第一个带有1 0 0字节数据,其余的每个带有1 0 8字节数据)。在这个m b u f中,指针m d a t a指向这个簇中的某个位置。N e t / 3版本支持七种不同的结构。定义了四种1 0 2 4字节的簇(惯例值),三种2 0 4 8字节的簇。传统上用1 0 2 4字节的原因是为了节约存储器:如果簇的大小是2 0 4 8,对于以太网分组(最大1 5 0 0字节),每个簇大约有四分之一没有用。在2 7 . 5节中我们会看到N e t / 3T C P发送的每个T C P报文段从来不超过一簇大小,因为当簇的大小为1 0 2 4时,每个1 5 0 0字节的以太网帧几乎三分之一未用。但是[Mogul 1993,图1 5 - 1 5 ]显示了当在以太网中发送最大帧而不是1 0 2 4字节的帧时能明显提高以太网的性能。这就是一种性能/存储器互换。老的系统使用1 0 2 4字节簇来节约存储器,而拥有廉价存储器的新系统用2 0 4 8字节的簇来提高性能。在本书中我们假定一簇的大小是2 0 4 8字节。图2-1 根据不同m _ f l a g s 值的四种不同类型的m b u f不幸的是,我们所说的“簇( c l u s t e r )”用过不同的名字。常量M C L B Y T E S是这些缓存( 1 0 2 4或2 0 4 8 )的大小,操作这些缓存的宏的名字是M C L G E T、M C L A L L O C 和M C L F R E E。这就是为什么称它们为“簇”的原因。但我们还看到m b u f的标志是M E X T,它代表“外

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档