第2章mbuf存储器缓存.PDFVIP

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章mbuf存储器缓存

下载 第2章 mbuf:存储器缓存 2.1 引言 网络协议对内核的存储器管理能力提出了很多要求。这些要求包括能方便地操作可变长 缓存,能在缓存头部和尾部添加数据 (如低层封装来自高层的数据 ) ,能从缓存中移去数据(如, 当数据分组向上经过协议栈时要去掉首部 ) ,并能尽量减少为这些操作所做的数据复制。内核 中的存储器管理调度直接关系到联网协议的性能。 在第 1章我们介绍了普遍应用于N e t / 3 内核中的存储器缓存:m b u f ,它是“memory buf f 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字节的 第 2章 mbuf :存储器缓存计计25 下载 簇。传统上用 1 0 2 4字节的原因是为了节约存储器:如果簇的大小是 2 0 4 8 ,对于以太网 分组 ( 最大 1 5 0 0字节) ,每个簇大约有四分之一没有用。在 2 7 . 5 节中我们会看到 N e t / 3 T C P发送的每个 T C P

文档评论(0)

haowendangqw + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档