8.8 虚拟内存系统实现的新特性
Solaris虚拟内存系统最初是从BSD UNIX衍生出来的。在此以后,在结构上最具意义的变化就是文件和虚拟内存的结合——提供了统一的缓存——以及把虚拟内存层次化成为模块——最大化了公共代码在多个平台上的共用。
在Solaris的发展中,很多建立在底层框架上的独特的特性被加入到虚拟内存系统里:
文件系统缓存可测量性的提高。在历史上,由于文件系统读写所造成的分页压力,文件系统缓存会对应用程序的性能有很大影响。从Solaris 8开始,文件系统缓存被降低了优先级并且被循环使用,于是文件系统读写使用有效的空闲内存并且对自己分页。
新的映射机制最小化了在文件系统输入输出时存取页面的消耗。通过使用64位地址空间(在SPARC和x64体系上),内核生成了一个永久的、包含所有从物理页到地址空间(SEGKPM)的对应信息的映射,从而消除了对每一次输入输出进行映射的需要。
使用大MMU页。按照摩尔定律,计算机系统所使用内存容量每18个月都会倍增。虚存大小也从最初设计时的1MB攀升到了今天的1TB。为了能够使性能相应提升,MMU支持了多种页面大小;并且所支持的最大的页面大小也随着物理内存容量的增加而增大。MMU在第一个SPARC处理器上的大小是4KB,而现在最大的是256MB。
如果可能的话,内核的代码段和数据段会被放在一个大的MMU页面里。从Solaris 2.6开始,某些类型的共享内存(例如Oracle和Sybase所使用的ISM)被尽可能地配置使用大页。可选择多种页面大小(MPSS)作为一个通用的框架在Solaris 9里被引入,从而允许应用程序选择使用不同大小的MMU页面。
对NUMA(Non-Uniform Memory Access)架构的支持。现在有很多高端系统同时采用了不一致内存位置组。从定义上看,在一个对称多处理器(SMP)系统里的所有处理器需要共享访问系统的内存,于是当SMP系统发展到拥有很多的处理器时,内存系统就无法避免地产生了更高的内存延迟,而这种方式就是通过降低每个单个处理器的性能作为代价来提高整个系统的吞吐量。另一种选择就是内存系统把一部分“位置”比较“接近”的处理器和内存组织成群,以便在群内实现较快的内存存取速度,而同时实现相对慢速的跨群的内存存取。而这种方法就是NUMA的基础。
从Solaris 9开始,Solaris虚拟内存系统引入把优化内存布局(Memory Placement Optimization, MPO)和位置组(Locality Group,Lgroups)的概念——允许内核分配给处理器使用“位置”较近的内存来优化内存分配。应用程序能够把希望存在的内存和线程之间的联系告诉内核,而内核可以相应地优化调度和页面分配。
动态重配置。增加了对在线添加或移除硬件组件(包括物理内存板)能力的支持。虚存系统也具有了通过自身优化来最大限度利用所有有效内存的能力。
内存可以被动态地添加,于是新的页面在被加入系统的空闲队列后就随时可以被其他应用程序使用。为了支持内存的动态移除,内核可以动态释放或者重新分配内存页——如果要被释放的页面正在有应用使用的话。内核页在有些时候是不能够被重新分配的,所以被限制在“内核保留区(Kernel Cage)”里分配,而内核保留区里的内存块至少有一块要保留在系统里。从Solaris 10开始,除了一个小组件,整个内核都被限制在内核保留区。
hook事件会把内存容量的改变提前通报给应用。这些由资源配置管理器提供的hook事件提供了一个脚本化的接口来通知相关的应用程序。在写本书的时候,Oracle 9就是这样一个应用。通过Oracle的动态SGA功能,可以配置Oracle使之根据系统内存容量变化自动增加或减少内存使用量。
先进的内存分配器。这个特性已经被集成在内核中。从Solaris 2.4开始,内存分配器被替换成为“片分配器(Slab Allocator)”。这种新的分配器能够在最少产生碎片的情况下有效分配内存对象。专门对SMP所作的优化是通过在系统里各个处理器间重新使用缓存,尽量减少了跨处理器的内存共享带来的数据流量。从Solaris 8开始,内核也开始使用一个通用的资源分配器(vmem)。这个分配器可以管理分配任意一种由整数集描述的资源。它替换了老的资源映射分配器,同时作为片分配器的后端来管理内核虚拟内存。
| 回书目 上一节 下一节 |
|
· 第六章 你能帮我吗?.. · Linux笔试面试题选摘测.. · 08年5月软考网管上午真.. · 性能测试从零开始 目录 · 08年5月软考网工上午真.. · 上周拒绝服务攻击(DDo.. |
· 08年5月各大网上书店及.. · 2008年5月24日软考试题.. · 软件设计师专家临考模.. · 上周网络管理员专家自.. · 网络工程师自测获奖名.. · 08年4月各大网上书店及.. |
|
||||
| · NAC安全访问控制 · 网络布线测试仪器 · Windows Server 2008专.. · Windows远程桌面应用 · 网络故障排除宝典 · 运营商封堵ADSL共享 中.. · 解析35岁技术人的价值.. · 世纪枭雄比尔盖茨的王.. |
· 主流品牌防火墙配置 · ASP.NET开发教程 · 超级计算机TOP500专题 · Vista SP1对决XP SP3 · SQL Server 2008/2005.. · 程序员如何成长? · C#技术开发指南 · 虚拟化技术还有点“虚” |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Windows远程桌面应用 · C#技术开发指南 · Apache技术专题 |
· Windows集群服务应用 · C#技术开发指南 · 国际文档格式标准开战 · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 |
|||