- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PowerPC Linux 内存管理优化设想
作者:harvey wang
邮箱:harvey.perfect@
新浪博客地址:/harveyperfect ,有关于减肥和学习英语相关的博文,欢迎交流
1、总体概述
我们都知道在PowerPC处理器e500系列内核MMU单元分为两级结构,L1和L2。L1 包括I-L1VSP、I-L1TLB4K、D-L1VSP、D-L1TLB4K(前缀I指示指令,D指示数据。后缀VSP指示可以变大小页,TLB4K指示固定大小页,4Kbyte大小)。即在L1中指令和数据的页转换模块是独立的。L2中包括TLB1和TLB0,其中TLB1为可变大小的页,TLB0为固定大小的页(4Kbyte)。指令和数据共用L2的MMU模块。L1的页转换模块是L2页转换模块的cache。具体说L1 的I-L1VSP和D-L1VSP 是L2的TLB1的cache;L1的I-L1TLB4K和D-L1TLB4K是L2 TLB0的cache。如下图所示
图1 e500mc MMU
L2的TLB1和TLB0是用户可操作的,而L1模块是由硬件维护的,对用户透明。
2、Linux基于e500V1 内存管理
在PowerPC e500 V1 MMU中有16个L2 TLB1 条目,页大小可以设置为4K、16K、64K、256K… … 256M。有256个TLB0 条目,每个固定4K大小。
L2 TLB1和TLB0是实现相同功能,在虚实地址转换时只要在其中之一找到对应的映射关系即可。它们之间的区别仅在于一次映射的区域大小的不同。Linux PowerPC 使用TLB1 进行虚拟地址的段式映射,采用段式映射可以直接使用硬件提供的TLB1查找表,可以一次映射较大区域(可达256MB),从而减少缺页故障次数,其虚实地址转换效率高。
但在e500V1 TLB1中的条目有限,仅16个,Linux PowerPC不可能使用TLB1完成所有的虚实转换。Linux PowerPC 使用的内核空间的虚实地址转换是由段式映射完成的,即32位系统中4G空间的高端1G,0xc000-0000—0xffff-ffff。
而32位系统中4G空间的低3G(0x000-0000—0xbfff-ffff)空间是采用页式映射。TLB0中一共有256个entry,每个4Kbyte,只能映射1Mbyte的空间。即使已经给某进程的虚拟空间分配了实际的物理页面,也会经常产生TLB miss 异常。尤其是操作系统中进程调度频繁,每次调度进程都要无效掉整个TLB0,产生很多的TLB miss。这样应该会比较影响系统的性能。
3、e500mc MMU介绍
Freescale 的多核处理,如P4080采用的内核是e500mc的内核,其MMU的架构和e500V1相同。在e500mc MMU中TLB1的条目增加到了64个,单个条目最大支持到4GB。TLB0条目增加到512个,同一时刻可以映射2MB空间。如图1所示。
4、基于e500mc MMU 的Linux 内存管理优化设想
在e500mc内核中,TLB1的条目增加到了64个。是否可以把其中的8个或4个划分给用户空间使用,在进程创建或要被调度运行时,把分配给进程的代码空间、数据空间等物理地址连续的较大空间的映射关系填充到TLB1的entity中。当然,能使用段式映射的需要满足物理空间连续,且地址边界段对齐,如要映射1MB的空间,其虚拟地址和物理地址至少都要1MB边界对齐。
如果进程的虚拟地址2M边界对齐,而实际分配的物理地址空间是1MB地址对齐,此时只能使用1MB映射区域,当然可以使用多个1MB的映射区。以此类推。
这种设想方式可能导致一个进程的代码段会同时使用段式映射和页式映射。大段的地址边界整齐(虚拟地址和物理地址都要边界对齐)的部分采用段式映射,其他区域采用页式映射。
如果内核中创建进程部分内核代码模块能考虑到这种优化的话,在给进程分配大段的虚拟空间和物理空间时尽量做到一定的边界对齐的话。这种内存管理优化的方式应该能提高不少的性能。
这可能需要对内核代码有不少的改动。请各位高手评价一下这种设想的方式是否可行?
参考文档:
1、Linux PowerPC 详解—核心篇 作者王齐 机械工业出版社
2、e500mc_RM_RevF.pdf freescale manual
3、linux内核之内存管理.doc
文档评论(0)