- 1、本文档共71页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二部分端节点算法学
ILP面临的问题 问题一: 不同操作需要的信息一般来自不同的层次,将不同层次的代码整合在一起而不牺牲模块化特性是极其困难的。 问题二: 不同操作可能需要在不同长度的数据块上以及数据包的不同部位进行。 ILP面临的问题(续) 问题三: 有些操作可能是相互依赖的。比如,如果数据包的TCP检查和验证失败,就不应当对包进行解密操作。 问题四: 过分提高整合度可能降低代码的局部性,增大指令cache的miss率,反而产生不良的后果。 ILP的前景 ILP很难实现,且超过一定数量的操作整合在一起可能会降低性能。 特别是,如果包数据被使用几次,它可能驻留在d-cache中,使得整合操作完全没有必要。 因此,除了整合拷贝-检查和计算之外,在整合其它操作方面,学术界和工业界一直没有跟进。 5.8 扩展到数据操作之外 消除数据拷贝和整合数据操作,其技术共同点都是避免冗余的读/写操作,以减少对内存总线(以及I/O总线)的压力。 还有哪些因素会影响内存总线的使用呢? Cache的使用效率 DMA或PIO的选择 5.8.1 有效使用 I-cache 处理器有一个或多个数据cache,以及一个或多个指令cache。 包数据几乎不能从 d-cache 获得好处 处理数据包的程序代码可以从 I-cache 获益 处理数据包需要的状态可以从d-cache 获益 代码和状态都可能竞争内存带宽,其中代码对内存带宽的竞争更严重: 处理一个包需要的状态一般较小(但减小状态仍是必要的) 协议栈处理的代码大得多 (1)代码布局 代码在内存中的布局是一个可以利用的自由度(P13)。 代码布局的主要思想: 通过安排代码在内存中的位置优化常见情形(P11),使得最常使用的代码驻留在I-cache中 I-Cache的实现特点(1) 大多数处理器使用直接映射的I-cache: 内存地址的低位比特用来检索I-cache条目; 如果高位比特匹配,直接从I-cache返回内容; 若不匹配,进行一个主存访问,用新的数据替换原来的条目。 问题: 被映射到I-cache同一位置的代码会被轮流替换出去,即使它们都是经常使用的代码。 I-Cache的实现特点(2) 每条I-cache包含多条指令: 当取一条指令时,同一个代码块中的全部指令都会被读入。(基于空间局部性假设而优化) 问题: 不常用的代码会被读入I-cache,如果它与常用代码在一个块中。 举例 许多网络代码包含错误检查,比如: if error E do X, else do Z 虽然 Z 几乎从不被执行,但是编译器通常会将 Z 的代码紧跟在 X 的后面。 如果 X 和 Z 位于同一个指令块中,取经常使用的代码 X,会把不经常使用的代码 Z 也取进来,浪费了内存带宽和cache空间。 重新组织代码 解决方案: 重新组织代码,将经常使用的代码连续放置。 比如,将Z的代码放置到远离X的地方。 这里运用了两条原则: 代码在内存中的位置是一个可以利用的自由度(P13) 优化常见情形(P11) (2)局部性驱动的协议层处理 基本思想: 每个协议层一次处理多个包,分摊装载 I-cache的开销 每一批处理的包数量越多,I-cache的使用越高效 具体实现时,应能动态调整批处理的大小 (3)软件工程方面的考虑 代码重新组织可以让编译器来做: 程序员对不常使用的代码分支进行标注,由编译器为I-cache重新组织代码。 局部性驱动的协议层处理需修改层间通信方法: 如果协议代码使用一个过程调用将数据包传递给上(下)一层,则代码修改为将数据包加入上(下)一层的一个包队列中。 当一个协议层被调用时,从自己的读队列中取数据包,直至队列取空。 5.8.2 DMA还是PIO PIO需要CPU参与,内存-外设的数据传输需要使用两次内存总线,但易于整合其它功能 DMA不需要CPU参与,内存-外设的数据传输仅使用内存总线一次,但不易于整合其它功能 PIO 和 DMA 都存在 d-Cache 的失效问题: 当使用 PIO 或 DMA 时,数据都会进入 d-cache。 如果数据马上被处理,cache的使用很高效。 如果数据到来很久后才被使用,则是对d-cache的一种浪费,并且会降低cache命中率。 使用DMA还是PIO没有定论,最好视具体情况而定。 5.9 小结 本章以web应用为例介绍了优化内存和总线带宽使用的技术,主要包括: 使用适配器内存消除 copy 4 使用fbufs消除copy 3 使用mmap消除copy 2 使用IO-Lite、sendfile消除 copy2 和copy 3 整合拷贝和检查和计算到一个循环中 通过代码重新布局、局部性驱动的协议层处理优化I-cache的使用 本章使用的技术以及主要的原则
文档评论(0)