MemoryHierarchy
  为了理解内核中的页替换算法,有必要认识linux中的存储体系分层架构、访问模式以及混合工作mixed workloads.

存储器分层架构
  有两种类型的存储分层架构。第一种是我们熟知的架构:从最顶端的cpu cache 到 最顶层的RAM内存的层级结构。其中在金字塔模型的最顶端的L1级cache最靠近cpu,cpu访问它的速度也最快,但是容量却最小;而靠近金字塔底端的附近的其他cahces(这些caches可以作为L2级和/或L3级,但是仍然比RAM要快)容量更大,但是访问速度比L1级cache更慢。

这种架构下最有效的访存方式为:cpu迅速的重复访问某一小部分数据,于此同时还缓存了更大量的数据。这种假设的本质就是:程序在一段时间内访问的数据都集中/缓存在L1 cahce(这样cache命中率更高,速度更快),短期类只进行少量的其他数据。

这样的cache层级架构是存在着一种超集关系:L1 cache中的数据在 L2级cache以及内存中也一定存在;只要L1级中的数据还在,L2级cache中的某一行与之对应的数据不能被替换出去;当L1级cache要访问不久前刚访问的数据,但是又不在L1中,而这些数据很有可能还缓存在L2 cache中,这时候就可以从L2 cache加载回L1 cache.

第二种类型的层级架构比较特别:即使第一层级的数据还在,对应的第二层级的cache也能够将这组数据替换出去,这在一些存储服务器上比较常见,如NFS或Samba服务器以及其他的NAS/SAN设备。这种分层模型最典型的情况是:最顶层是本地工作站或计算节点的RAM,而最底层是存储服务器的cache。

访问方式
  有几种以LRU作为替换策略的访存情形。

流式IO
  流式IO访问在文件服务器上是一种较为普遍的访问方式,文件服务器为客户端提供各种文件服务。如多媒体应用、存储备份等等。

LRU基于“最近被访问的页很可能很快将再次被访问”的替换策略并不适用于流式IO场景。在流媒体应用中,下一次被访问的数据页很可能是从来没有访问过的;而已经访问过的页很可能在很长一段时间内再也不会去访问。

因而在这样的使用场景中,cache替换算法需要仔细研究对症下药。

垃圾回收
  垃圾回收意味着程序不用显式的释放它们不再使用的内存,也不会再重用上次使用过的内存。此外,垃圾回收程序会扫描大片的内存区域并且和其他程序访存方式完全不同。

交互式用户程序
  用户经常希望计算机有快速的响应能力、更好的交互体验。考虑这样一种比较普遍的场景:当用户正在计算机上看电影或者看邮件时,另外一个用户任务(如浏览器)一般都会被暂时搁置或低优先级处理;当用户再切换回浏览器应用时,他们当然期望浏览器程序仍然还缓存在内存中以能够快速的响应。然而,用户刚才访问过的其他数据在将来的一段时间将不会再被访问,那还有必要将其他数据刷出cache而保留刚才访问过的应用程序数据么?

所以针对这种应用场景,也需要特别的替换算法来处理。

文件服务器 / secondary cache
  在文件服务器系统中,客户端会将访问最频繁的页面缓存起来,这样一来,服务器端最近访问过的文件一旦缓存到客户端后很可能在一段时间内都不会再被访问到。实际上在上一次访问某页之后到再次访问到这个页,这中间可能已经访问了许多其他页面了,这样的话,之前访问的那个页面(按照LRU算法)早已经被替换出cache了。

为了检测出哪个页面在文件服务器端访问的最频繁,VM需要记住替换出去的页面的一些信息,正如NonResidentPages(非驻留内存页面)描述的一样。一旦VM了解到哪些页面被访问的最频繁,他们就会被缓存起来而不会被其他页面替换出去。

要注意的是,在文件服务器端访问最频繁的页面不一定在客户端也频繁访问。相反,理想状态下,文件服务器端和客户端缓存不同的页面,这样文件服务器缓存可以和客户端互补,避免重复。

Mixed Workloads
  典型的计算机系统中跑着各种各样的不同程序,VM需要均衡这些不同任务的内存使用以保持各个任务的性能和响应能力在一个可接受范围内。

Graceful Degradation
  当系统超负荷运行,系统性能就会慢慢降低,而不会立刻崩溃。为了能够防止这种情况,我们不仅需要进行一些负载控制和认为干涉,我们还需要知道如何可靠的检测到系统超负荷运转。这种检测可能需要集成到页面替换机制中去。

LinuxMM--MemoryHierarchy的更多相关文章

  1. Android中基于CGroup的memory子系统HAL层分析-lmkd

    Android在内存管理上于Linux有些小的区别,其中一个就是引入了lowmemorykiller.从lowmemorykiller.c位于drivers/staging/android也可知道,属 ...

  2. Linux 内核的文件 Cache 管理机制介绍

    Linux 内核的文件 Cache 管理机制介绍 http://www.ibm.com/developerworks/cn/linux/l-cache/ 1 前言 自从诞生以来,Linux 就被不断完 ...

  3. linux内核调试指南

    linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 ...

  4. linux page cache和buffer cache

    主要区别是,buffer cache缓存元信息,page cache缓存文件数据 buffer 与 cache 是作为磁盘文件缓存(磁盘高速缓存disk cache)来使用,主要目的提高文件系统系性能 ...

  5. Linux 内核的文件 Cache 管理机制介绍-ibm

    https://www.ibm.com/developerworks/cn/linux/l-cache/ 1 前言 自从诞生以来,Linux 就被不断完善和普及,目前它已经成为主流通用操作系统之一,使 ...

  6. mmtests使用简介

    1.简介 mmtests是一个可配置的测试套件,可以被MM开发者用来进行一个常规测试.理想情况下,它可以与LTP,xfstests等测试工具结合起来实现自动化测试. 2.软件组织 run-mmtest ...

  7. 加速 lucene 的搜索速度 ImproveSearchingSpeed

    * Be sure you really need to speed things up. Many of the ideas here are simple to try, but others w ...

  8. 如何展开Linux Memory Management学习?

    Linux的进程和内存是两座大山,没有翻过这两座大山对于内核的理解始终是不完整的. 关于Linux内存管理,在开始之前做些准备工作. 首先bing到了Quora的<How can one rea ...

  9. linux状态及原理全剖析

    Table of Contents 1 linux 1.1 proc filesystem 1.1.1 /proc 1.1.1.1 /proc/meminfo 1.1.1.2 /proc/stat 1 ...

随机推荐

  1. ASP.NET Misconfiguration: Missing Error Handling

    Abstract: An ASP .NET application must enable custom error pages in order to prevent attackers from ...

  2. 未发现oracle(tm)客户端和网络组件

    环境:Win7 64位.Oracle 11g 64位.PowerDesigner16.5.instant client12_1 64位. 在用PowerDesigner逆向数据库结构时,配置Oracl ...

  3. Res_Orders_01需求分析

    一.背景及好处 为了提高餐厅的运营效率,增强餐厅各部门间的配合,减少顾客到店后的点餐.等餐及结算过程消耗的时间,降低服务员点餐失误率,进一步提高餐厅管理人员对菜品.资金的管理以及更好的掌握餐厅的全局运 ...

  4. 选项卡切换:自动定时&主动触发事件

    最初学习的是手动触发事件,添加的是onmouseover,其中index是关键,tab标签与现实内容的div索引一一对应,遍历tab标签,当鼠标移动到某标签时,触发对应的内容div显示.for(var ...

  5. angularJs基础

    AngularJs是为了克服Html在构建应用上的不足而设计的.Html是一门很好的为静态文件展示设计的声明式语言,但是要构建web应用的话就显得乏力了.所以我做了一些工作来让浏览器做我瞎向要的事. ...

  6. LoadRunner ---参数化数据源(oracle,mssql,excel)

    TXT文本,EXCEL表格以及数据库中的表都可以作为参数的数据集载体,LR都是支持的. 特别提醒:1.在形成数据池之后,数据库中的数据变化不会影响数据池中的数据.2.数据文件一定要以一个空行结束,否则 ...

  7. C#网络编程二:Socket编程

    一:什么是SOCKET socket的英文原义是"孔"或"插座".作为进程通信机制,取后一种意思.通常也称作"套接字",用于描述IP地址和端 ...

  8. cenos 7常用操作

    centos 虚拟机 <一>设置ip <1>虚拟机配置ip 虚拟机->设置->网络适配器->设置NAT模式 <2>编辑->虚拟网络编辑器,对 ...

  9. js类型转化

    1. == 是会进行类型转换再进行判断的. true是转换成1,false是转换成0 然后再进行判断 == true false == true true === false false == fal ...

  10. 史航416第九次作业&总结

    一.知识点总结: 1.二维数组定义的形式:类型名 数组名[行长度] [列长度] 例如:int a[3][2]:定义一个二维数组a,3行2列,6个元素: 2.二维数组引用的形式:类型名 数组名[行下标] ...