LinuxMM--MemoryHierarchy
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的更多相关文章
- Android中基于CGroup的memory子系统HAL层分析-lmkd
Android在内存管理上于Linux有些小的区别,其中一个就是引入了lowmemorykiller.从lowmemorykiller.c位于drivers/staging/android也可知道,属 ...
- Linux 内核的文件 Cache 管理机制介绍
Linux 内核的文件 Cache 管理机制介绍 http://www.ibm.com/developerworks/cn/linux/l-cache/ 1 前言 自从诞生以来,Linux 就被不断完 ...
- linux内核调试指南
linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 ...
- linux page cache和buffer cache
主要区别是,buffer cache缓存元信息,page cache缓存文件数据 buffer 与 cache 是作为磁盘文件缓存(磁盘高速缓存disk cache)来使用,主要目的提高文件系统系性能 ...
- Linux 内核的文件 Cache 管理机制介绍-ibm
https://www.ibm.com/developerworks/cn/linux/l-cache/ 1 前言 自从诞生以来,Linux 就被不断完善和普及,目前它已经成为主流通用操作系统之一,使 ...
- mmtests使用简介
1.简介 mmtests是一个可配置的测试套件,可以被MM开发者用来进行一个常规测试.理想情况下,它可以与LTP,xfstests等测试工具结合起来实现自动化测试. 2.软件组织 run-mmtest ...
- 加速 lucene 的搜索速度 ImproveSearchingSpeed
* Be sure you really need to speed things up. Many of the ideas here are simple to try, but others w ...
- 如何展开Linux Memory Management学习?
Linux的进程和内存是两座大山,没有翻过这两座大山对于内核的理解始终是不完整的. 关于Linux内存管理,在开始之前做些准备工作. 首先bing到了Quora的<How can one rea ...
- 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 ...
随机推荐
- linux小程序--cmatrix
wget http://www.asty.org/cmatrix/dist/cmatrix-1.2a.tar.gz .2a.tar.gz cd cmatrix-.2a yum install ncur ...
- sqlite3 转义字符
SqLite数据库的单引号转义是用单引号转义,并不是常用的"/" 参考:http://blog.csdn.net/qingflyer/article/details/6372498 ...
- Graded Browser Support
( The YUI Target Environments Matrix is here) About the Browser Test Baseline and Operating Systems ...
- VFP MSSOAPTOOKIT 使用SOAP Headers
.NET 有如下使用了自定义扩展HEADER来做验证 server.asmx代码 using System;using System.Collections.Generic;using System ...
- oracle 异常
ORACLE 异常错误处理 本篇主要内容如下: 5.1 异常处理概念 5.1.1 预定义的异常处理 5.1.2 非预定义的异常处理 5.1.3 用户自定义的异常处理 5.1.4 用户定义的异常处理 ...
- ubuntu 安装mysql-python和 python-ldap,navicate 问题
1.Ubuntu 下 pip install mysql-python 报错 EnvironmentError: mysql_config not found 原因是缺少mysqlclient 包,执 ...
- iTerm2 cheatsheet (from github)
https://gist.github.com/helger/3070258 Tabs and Windows Function Shortcut Previous Tab ⌘+ Left Arrow ...
- Java abstract class 和 interface 的区别
Java abstract class 和 interface 的区别 1. abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制 2. 以Door的抽象概 ...
- EhCache RMI 分布式缓存/缓存集群
EhCache 系统简介 EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点. EhCache 的主要特性有: 快速.精干 简单: 多种缓存策略: 缓存数据有两级:内存和磁盘, ...
- [Android基础论]为何Activity退出之后,系统没有调用onDestroy方法?
首先,问题是如何出现的? 晚上复查代码,发现一个activity没有调用自己的ondestroy方法 我表示非常的费解,于是我检查了下代码. 发现再finish代码之后接了如下代码 finish(); ...