- 浏览: 482338 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
alvin198761:
renzhengzhi 写道我参与过12306余票查询系统的开 ...
别给12306 辩解了 -
renzhengzhi:
我参与过12306余票查询系统的开发,用户请求被前面3层缓存拦 ...
别给12306 辩解了 -
renzhengzhi:
写的很好。
JAVA线程dump的分析 -
liyonghui160com:
说好的附件呢
分布式服务框架 Zookeeper -- 管理分布式环境中的数据 -
ghpaas:
orbeon作为xforms标准的实现,不论其设计器还是运行时 ...
XForms 1.1 中文翻译—第1章 关于XForms标准
随着 Linux 内核的发展和成熟,更多的用户期待着 Linux 可以运行非常大的系统来处理科学分析应用程序或者甚至海量数据库。这些企业级的应用程序通常需要大量的内存才能好好运行。2.4 Linux 内核有识别相当大数量的内存的功能,但是 2.5 内核发生了很多改变,使其有能力以更有效的方式处理更大量的内存。 在 Linux 内存管理器中,页表保持对进程使用的内存物理页的追踪,它们将虚拟页映射到物理页。这些页中有一些可能不是长时间使用,它们应该被交换出去。不过,在它们可以被交换出去之前,必须找到映射那个页的每一个进程,这样那些进程中相应页的页表条目才可以被更新。在 Linux 2.4 内核中,这是一项令人生畏的任务,因为为了确定某个页是否被某个进程映射,必须遍历每个进程的页表。随着在系统中运行的进程数量的增加,将这些页交换出去的工作量也会增加。 反向映射,或者说是 RMAP,就是为解决此问题而在 2.5 内核中实现的。反向映射提供了一个发现哪些进程正在使用给定的内存物理页的机制。不再是遍历每个进程的页表,内存管理器现在为每一个物理页建立了一个链表,包含了指向当前映射那个页的每一个进程的页表条目(page-table entries, PTE)的指针。这个链表叫做 PTE 链。PTE 链极大地提高了找到那些映射某个页的进程的速度,如图 1 所示。 当然,没有什么是免费的:用反向映射获得性能提高也要付出代价。反向映射最重要、明显的代价是,它带来了一些内存开销。不得不用一些内存来保持对所有那些反向映射的追踪。PTE 链的每一个条目使用 4 个字节来存储指向页表条目的指针,用另外 4 个字节来存储指向链的下一个条目的指针。这些内存必须使用低端内存,而这在 32 位硬件上有点不够用。有时这可以优化到只使用一个条目而不使用链表。这种方法叫做 p页直接方法(page-direct approach)。如果只有一个到这个页的映射,那么可以用一个叫做“direct”的指针来代替链表。只有在某个页只是由一个惟一的进程映射时才可以进行这种优化。如果稍后这个页被另一个进程所映射,它将不得不再去使用 PTE 链。一个标记设置用来告诉内存管理器什么时候这种优化对一个给定的页有效。 反向映射还带来了一些其他的复杂性。当页被一个进程映射时,必须为所有那些页建立反向映射。同样,当一个进程释放对页的映射时,相应的映射也必须都删除掉。这在退出时尤其常见。所有这些操作都必须在锁定情况下进行。对那些执行很多派生和退出的应用程序来说,这可能会非常浪费并且增加很多开销。 尽管有一些折衷,但可以证明反向映射是对 Linux 内存管理器的一个颇有价值的修改。通过这一途径,查找定位映射某个页的进程这一严重瓶颈被最小化为只需要一个简单的操作。当大型应用程序向内核请求大量内存和多个进程共享内存时,反向映射帮助系统继续有效地运行和扩展。当前还有更多对反向映射的改进正在研究中,可能会出现在未来的 Linux 内核版本中。 典型地,内存管理器在 x86 系统上处理的内存页为 4 KB。实际的页大小是与体系结构相关的。对大部分用途来说,内存管理器以这样大小的页来管理内存是最有效的。不过,有一些应用程序要使用特别多的内存。大型数据库就是其中一个常见的例子。由于每个页都要由每个进程映射,必须创建页表条目来将虚拟地址映射到物理地址。如果您的一个进程要使用 4KB 的页来映射 1 GB 内存,这将用到 262,144 个页表条目来保持对那些页的追踪。如果每个页表条目消耗 8 个字节,那些每映射 1 GB 内存需要 2 MB 的开销。这本身就已经是非常可观的开销了,不过,如果有多个进程共享那些内存时,问题会变得更严重。在这种情况下,每个映射到同一块 1 GB 内存的进程将为页表条目付出自己 2 MB 的代价。如果有足够多的进程,内存在开销上的浪费可能会超过应用程序请求使用的内存数量。 解决这一问题的一个方法是使用更大的页。大部分新的处理器都支持至少一个小的和一个大的内存页大小。在 x86 上,大内存页的大小是 4 MB,或者,在物理地址扩展(PAE)打开的系统上是 2 MB。假定在前面的中使用页大小为 4 MB 的大内存页,同样 1 GB 内存只用 256 个页表条目就可以映射,而不需要 262,144 个。这样开销从 2 MB 变为 2,048 个字节。 大内存页的使用还可以通过减少 变换索引缓冲(translation lookaside buffer, TLB)的失败次数来提高性能。TLB 是一种页表的高速缓存,让那些在表中列出的页可以更快地进行虚拟地址到物理地址的转换。大内存页可以用更少的实际页来提供更多的内存,相当于较小的页大小,使用的大内存页越多,就有越多的内存可以通过 TLB 引用。 在 32 位机器上页表通常只可以存储在低端内存中。低端内存只限于物理内存的前 896 MB,同时还要满足内核其余的大部分要求。在应用程序使用了大量进程并映射了大量内存的情况下,低端内存可能很快就不够用了。 现在,在 2.6 内核中有一个配置选项叫做 Highmem PTE,让页表条目可以存放在高端内存中,释放出更多的低端内存区域给那些必须放在这里的其他内核数据结构。作为代价,使用这些页表条目的进程会稍微慢一些。不过,对于那些在大量进程在运行的系统来说,将页表存储到高端内存中可以在低端内存区域挤出更多的内存。 更好的稳定性是 2.6 内存管理器的另一个重要改进。当 2.4 内核发布时,用户几乎马上就开始遇到内存管理相关的稳定性问题。从内存管理对整个系统的影响来看,稳定性是至关重要的。问题大部分已经解决,但是解决方案必须从根本上推翻原来的内存管理器并重写一个简单的多的管理器来取代它。这为 Linux 的发行者改进自己特定发行版本的 Linux 的内存管理器留下了很大的空间。不过,那些改进的另一方面是,在 2.4 中的内存管理部件由于使用的发行版本不同而很不相同。为避免再发生这样的事情,内存管理成为 2.6 中内核开发的最细致的一部分。从很低端的桌面系统到大型的、企业级的、多处理器的系统,新的内存管理代码已经在它们上面都已经进行了测试和优化。 Linux 2.6 内核中内存管理的改进远远不只本文中提到的这些特性。很多变化是细微的,却相当重要。这些变化一起促生了 2.6 内核中的内存管理器,它的设计目标是更高的性能、效率和稳定性。有一些变化,比如 Highmem PTE 和大内存页,目的是减少内存管理带来的开销。其他变化,比如反向映射,提高了某些关键领域的性能。之所以选择这些特别的例子,是因为它们举例说明了 Linux 2.6 内核得到了怎样的调整和增强,以便更好地处理企业级的硬件和应用程序。 Paul Larson 为 IBM Linux Technology Center 的 Linux Test 团队工作。过去一年中,他从事的项目包括 Linux 测试项目、2.5/2.6 内核稳定性以及内核代码复盖分析。可以通过 pl@us.ibm.com 与他联系。
图 1. 2.6 中的反向映射
回页首
回页首
图 2. 内存区域
回页首
回页首
发表评论
-
使用 RPM 打包软件,第 1 部分: 构建和分发包
2012-03-26 10:31 1272顾名思义,开源软件 ... -
用 RPM 打包软件,第 3 部分
2012-03-26 10:30 1162安装和卸载脚本的工作原理 安装和卸载脚本看起来很简单, ... -
用 RPM 打包软件,第 2 部分
2012-03-26 10:28 1166不作为 root 用户来构建 RPM 包 正如您在第 1 ... -
用 RPM 打包软件,第 1 部分
2012-03-26 10:23 981RPM(Red Hat Package Manager)是用于 ... -
Memory usage analysis
2010-09-03 23:33 1215Memory usage analysis Syste ... -
Linux: How to measure actual memory usage of an application or process?
2010-09-03 23:31 1278http://stackoverflow.com/questi ... -
HowTo: Profile Memory in a Linux System
2010-09-03 22:56 1183HOWTO: Profile Memory in a Li ... -
Linux内存管理机制
2010-09-03 22:48 2098内存是Linux内核所管理的最重要的资源之一,内存管理 ... -
linux内存管理概述
2010-09-03 22:44 2457Linux中的地址空间(一)有这么一系列的问题,是否在困扰 ... -
linux上buffer和cache的区别
2010-09-03 15:14 1524free free 命令相对于top 提供了更简洁的查看系统 ... -
linux下top命令参数解释
2010-09-03 14:56 884top命令是Linux下常用的性能分析工具,能够实时显示系统中 ... -
smem memory reporting tool
2010-08-25 15:41 974smem is a tool that can give ... -
Linux进程虚拟内存和物理内存
2010-08-25 15:39 5071先介绍几个基本概念: SIZE: 进程使用的 ... -
Memory: VSS/RSS/PSS/USS
2010-08-25 13:54 1540Terms VSS - Virtual Set ... -
Linux 内核的文件 Cache 管理机制介绍
2010-08-18 18:21 10621 前言 自从诞生以来,Linux 就被不断完善和普及 ... -
运行时: 块内存复制,第 2 部分
2010-08-06 12:33 1251我的 前一专栏专注于 ... -
RunTime: 块内存复制
2010-08-06 12:32 1183内存复制 在计算机中,内存复制经常而普遍。它们出现在联网 ... -
内存详解
2010-08-06 11:34 956文档选项 ... -
Linux slab 分配器剖析
2010-08-06 11:32 1328良好的操作系统性能部分依赖于操作系统有效管理资源的能力。在 ... -
降低 Linux 内存开销
2010-08-06 11:30 1101Linux 广受追捧的一个优点是它比 Microsoft® ...
相关推荐
2.6内核的内存管理器增强了系统的稳定性,特别是在处理多进程共享内存和大内存需求时。反向映射和大内存页等改进确保了系统在面对高负载和大内存使用时仍能保持良好的运行状态。 这些改进展示了Linux内核如何逐步...
在深入探讨Linux 2.6内核源代码中的存储技术原理之前,首先需要理解操作系统内核是如何管理和控制存储资源的。Linux内核是操作系统的核心,它负责管理硬件资源,包括内存和磁盘存储,以提供高效、可靠的系统服务。...
Linux 2.6内核相对于之前的版本,在存储管理上进行了许多优化和改进: 1. **多路径支持**:2.6内核增强了对多路径的支持,允许数据同时通过多个物理路径传输,提高了系统的可靠性和性能。 2. **增强的缓存机制**:...
Linux 2.6内核是一个重要的里程碑,它引入了许多改进和新特性,对驱动程序的编写方式产生了显著影响。以下是针对Linux 2.6内核驱动移植的一些关键知识点: 1. **入口函数改变**: 在旧版本中,驱动的初始化和退出...
- 中断处理:在Linux2.6内核中,中断管理机制得到改进,驱动程序需注册中断处理函数,处理设备产生的中断事件。 - 内存管理:2.6内核提供了更高效的内存分配和管理策略,驱动程序需合理申请和释放内存,确保系统...
9. **内存分配**:2.6内核将内存分配函数移到`<linux/slab.h>`,而2.4内核中使用`<linux/malloc.h>`。 10. **结构体初始化**:2.6内核支持ANSI C的结构体初始化语法,而2.4内核使用非标准的初始化形式。 11. **...
这是因为内核升级过程中可能需要管理员权限来完成某些操作。 2. **检查当前内核版本** 在终端中输入 `uname -r` 来查看当前的内核版本。如果显示的结果已经是 2.6.x 或更高版本,则无需继续后续步骤。反之,则...
- **资源管理改进**:2.6内核优化了对内存资源的管理,使得Initrd能够在有限的内存空间中运行更多必要的服务。 #### 3. Linux2.6内核的Initrd处理流程 - **加载与解压**:Bootloader将Initrd文件加载到内存后,...
这个版本的内核包含了大量用于驱动硬件、管理内存、调度进程、网络协议栈等方面的代码,这些代码都是以C语言编写的,并包含了一些汇编语言模块。以下是关于Linux内核源码的一些关键知识点: 1. **目录结构**:Linux...
Linux 2.6内核中的内存管理包括页缓存、交换机制、内存分配策略等,这些都是影响系统性能的关键因素。 5. **RAID技术**:RAID(冗余磁盘阵列)提供了数据冗余和性能提升的方法。书中可能涵盖了RAID级别的概念,如...
2.6内核通过XFRM结构提供了更为统一和灵活的IPsec处理机制,使得配置和管理更加便捷,同时提升了性能和安全性。 总的来说,IPsec在Linux内核中的实现是随着网络技术的发展而不断完善的。从2.4到2.6的进化,反映了...
Linux 2.6内核是Linux发展的一个重要里程碑,引入了许多性能优化和新特性。当面临特定场景或设备时,可能需要对内核进行裁剪,以减小内核体积,提高效率,或者针对特定硬件进行优化。以下是基于Linux 2.6内核裁剪...
1. **性能提升**:2.6内核引入了更好的内存管理机制,如伙伴系统和slab分配器,使得内存分配更加高效。同时,预读取和I/O调度器的改进提升了磁盘操作的性能。 2. **多处理器支持**:2.6内核增强了对多处理器系统的...
9. 内存分配头文件变更:在Linux2.6内核中,所有的内存分配函数包含在头文件中,老版本内存分配函数包含在头文件中。 10. 结构体的初始化:在Linux2.6内核中,结构体的初始化采用ANSI C的struct结构体初始化形式,...
内核升级是一个重要的任务,尤其是从旧版本如2.4内核升级到2.6内核,这通常涉及到系统的稳定性、安全性和性能提升。在RED-HAT环境下进行这个过程需要谨慎操作,确保不会破坏现有系统。 首先,备份是至关重要的。在...
9. **内存管理**:内核2.6.29.1可能改进了内存分配策略,减少了内存碎片,提升了系统运行效率。 10. **实时性**:对于需要低延迟的应用,如工业控制系统,此内核版本可能增强了实时性能,以满足苛刻的时间约束。 ...
2.6系列是Linux内核的一个稳定分支,2.6.22是在2007年发布,带来了许多性能优化和新特性,如内存管理改进、块I/O调度算法的更新等,对于JZ2440这样的嵌入式设备而言,是一个可靠的版本选择。 JZ2440开发平台采用的...
【Linux2.6内核实时性分析与改进方案】 ...综上所述,Linux2.6内核的实时性改进是一个持续的过程,通过不断的优化,可以使其在实时性方面更接近专门的实时操作系统,从而扩展其在各种实时应用场景中的应用范围。