内存管理.docx
- 文档编号:24418253
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:16
- 大小:65.68KB
内存管理.docx
《内存管理.docx》由会员分享,可在线阅读,更多相关《内存管理.docx(16页珍藏版)》请在冰豆网上搜索。
内存管理
一.1内存管理
一.1.1虚拟内存
虚拟内存是物理内存和交换空间组合形成的虚拟内存空间,通过虚拟的地址空间映射到物理内存或者交换空间(pagespaces)
在AIX中,虚拟内存段被分成4096字节大小的页(4K页),物理内存则被划分为4096字节大小的页帧(pageframe)
一.1.2物理内存
实际存在的物理内存条上的可供系统使用的缓存。
物理内存大小的查看
1、#prtconf|grepMemory
2、#vmstat
3、#lsattr–Elsys0–arealmem
一.1.2.1永久段(persistentsegment)和工作段(workingsegement)
AIX区分不同的存储段类型。
永久段在磁盘上有一个永久的存储位置,含有不可编辑的文件或者只读的运行程序被映射到持久段,例如包含数据的文件、可执行程序。
VMM参数控制什么时候分配给永久段的RAM页帧可以被重写,并且用于存储新的数据。
工作段是临时性的,仅在他们被某个进程使用时才存在,并且没有固定的磁盘位置。
进程堆栈以及数据区,共享库文本、内核数据被映射到工作段,当工作段也不能存在于“实”存中的时候,他们被保存在磁盘上的页交换空间。
程序退出执行,所有的工作段占用的页面将被返回。
#svmon–G可以看到两种内存类型
DC01:
/#svmon-G
sizeinusefreepinvirtual
memory524288232959291329129275194644
pgspace5242888559
workpersclntother
pin1011820273025363
inuse187195845756
一.1.2.2计算型(computational)和文件型(file)
Computational型内存包含Working-storagesegmentorprogramtext(executablefiles)segments。
也就是work(工作段)再加上persistent(永久段)中可执行文件的部分。
FILE(文件型)是除去计算型的所有内存。
Computational型可理解为读入可执行文件的地方,文件型可理解为读入文件中的data部分
#topas
一.1.2.3Client类型
Persistent段内存进一步分类,其中client类型内存被用于mapremotefiles(例如通过NFS访问的文件)。
EnchancedJFSFILESYSTEM(jfs2)使用clientpage来缓存cache
一.1.3Pagespaces
Pagespace是系统的一个物理存储空间,占用一定的磁盘空间,可以是逻辑卷或者文件的形式,
#lsps-a
一.1.4PageFaults
查看5秒内调页错误
#sar–r5
一.1.5Pagein&Pageout
Vmstat查看:
#vmstat
!
!
如果持续看到po但是没有看到pi的增长,并不一定代表Thrashing,比如系统正在读取大量的persistentpages会导致看到大量的pageout,这时需要看一下应用的类型。
被pageout出去的数据,如果有进程需要再次reference的时候,将产生pagefault,然后通过pagein再次写入内存。
一.1.6Thrashing(颠簸)
表示连续的pagein和out,经常是系统缺乏内存的现象。
一.1.7repage
pagefault可以是一个新的pagefault,也可以是一个repagefault,出现一个newpagefault是指第一次调用,最近没有相关的记录。
出现repagefault是指刚刚调用过但是已经被替换出去了(很可能写回磁盘了),再次调用。
发生一次pagefault是正常的,但应避免发生多次的pagefault,AIX在这里做了一种统计,分别统计计算型和非计算型内存发生repage的数量,我们可以用vmo去调整这两种内存的page的机制
一.1.8pagingspace管理机制
在AIX4.3.2及以后版本中,操作系统提供了3种pagingspace的管理机制。
分别为:
Earlypagespaceallocation(EPSA)
Latepagespaceallocation(LPSA)
Deferredpagespaceallocation(DPSA)
一.1.8.1Earlypagespaceallocation(EPSA)
在AIX系统中,当pagespace的使用率达到一定百分比时,系统就无法将需要pageout的页面写到pagespace中,这时候,该进程就很可能被杀掉。
为了避免这种情况发生,EPSA机制会保证当前进程被启动时,在pagespace中先申请一块页面空间,该空间大小与该进程所需要占用的实际内存的大小一致(将环境变量PSALLOC设为early,也就是”exportPSALLOC=early”)。
这样就保证当进程使用malloc()调用的同时,在pagespace中有相应的空间保留给该进程,从而保证该进程的pageout操作。
这种机制虽然可以保证现有进程的安全,但由于很多被保留的页面空间并没有被利用到,造成了非常大的空间浪费。
同时,也需要pagespace的大小比实际内存要大很多。
一.1.8.2Latepagespaceallocation(LPSA)
这种机制是指当进程启动后,系统并不在pagespace中为该进程保留相应的页面。
只有当该进程的实际内存页面被修改过后,才会在pagespace中为这些被修改过的页面申请空间,这种机制在一定程度上减少了pagespace的浪费,但是对系统也存在一定的风险。
比如,当一些后起的进程用了几乎全部的pagespace后,由于先起的进程并没有保留足够的pagespace空间用于进程的pageout操作,会导致该进程被杀掉
一.1.8.3Deferredpagespaceallocation(DPSA)
在AIX4.3.2之后,DPSA是系统默认的Paging Space的管理机制。
在这种机制下,系统不会为进程保留任何的 page 页面,直到系统确认确实需要将内存中的页面 page out 到Paging Space中,才会把Paging Space的页面分配给该进程。
这种机制不会造成Paging Space的空间浪费,但和LPSA一样,这种机制也给系统带来了相同的风险。
DPSA是AIX 432及以后版本中所使用的默认机制,它通常适用于配有很大容量RAM的系统,因为它可以减少很多Paging Space资源的浪费。
对于RAM容量不是很大(比如小于2GB)的系统,用户可以采用LPSA或EPSA机制
用 “/usr/samples/kernel/vmtune -d 0” 命令可以停止使用DPSA,而使用LPSA。
用 “/usr/samples/kernel/vmtune -d 0” 命令加上“export PSALLOC=early”命令可以停止使用DPSA,而使用EPSA。
用 “/usr/samples/kernel/vmtune -d 1” 命令可以激活DPSA。
一.1.8.4pagespace释放
在AIX操作系统中,当内存中的页面被page到了Paging Space中以后,那么这一块Paging Space的页面空间将被保留给该内存页面,即使该页面已经被写回到内存中。
因此,用lsps命令看到的Paging Space的使用率可能并不能真实反映真正位于Paging Space 中的页面数,因为有些页面可能已经写回到了内存中。
如果写回到内存中的页面是线程的工作存储页面(Working Storage),那么随着该线程的退出或者是相关的内存被释放 -- free(),Paging Space中的相应页面块也才会被释放。
一.1.8.5查看当前pagespace机制
查看当前pagespace机制:
#vmo-a|grepdefps
defps=1
defps=1表示采用的是DPSA,如果defps=0表示采用的是LPSA.
修改pagingspace的机制,采用LPSA:
#vmo-odefps=0
查看defps属性
当前值是1,缺省值是1,启动时的值是1,取值范围是0-1,类型是动态可以修改的.
#vmo-Ldefps
NAME CUR DEF BOOT MIN MAX UNIT TYPEDEPENDENCIES
--------------------------------------------------------------------------------
defps 1 1 1 0 1 boolean D
---------------------------------------------------------------------------
参数介绍:
CUR=currentvalue
DEF=defaultvalue
BOOT=rebootvalue
MIN=minimalvalue
MAX=maximumvalue
UNIT=tunableunitofmeasure
TYPE=parametertype:
D(forDynamic),S(forStatic),RforReboot),B(forBosboot),M(forMount),I(forIncremental),C(forConnect),andd(forDeprecated)
DEPENDENCIES=listofdependenttunableparameters,oneperline
一.1.8.6Paging-spacethresholdstuning
如果pagingspace少到一定的空间,操作系统将会通过先告警进程释放pagingspace,最后可能会kill进程.相关的两个参数npswarn和npskill:
(这两个值都是pagespace剩余的页数)
#vmo-a|grepnpswarn
npswarn=4096
默认值:
max(512,4xnpskill)
#vmo-hnpswarn
#vmo-a|grepnpskill
npskill=1024
默认值:
max(64,pagespace总页数/128)
#vmo-hnpskill
一.1.8.7Pagingspacegarbagecollection
AIX5.3之后可以利用pagingspacegarbagecollection机制来freeuppagingspace.只作用于deferredpagespaceallocationpolicy.
方法一:
re-pagein后的垃圾收集
Themethodoffreeingapaging-spacediskblockafterapagehasbeenreadbackintomemoryfrompagingspaceisemployedbydefault.相关参数:
npsrpgmin:
停止re-pagein垃圾收集的freepagingspaceblocks数目
npsrpgax:
开始re-pagein垃圾收集的freepagingspaceblocks数目
方法二:
scrubbingmemory
Anothermethodofpagingspacegarbagecollectionisbyscrubbingmemory,whichisimplementedwiththepsgckernelprocess.Thepsgckernelprocessfreesuppagingspacediskblocksformodifiedmemorypagesthathavenotyetbeenpagedoutagainorforunmodifiedpagesforwhichapagingspacediskblockexists.相关的参数:
npsscrubmin停止scrubbing内存的freepagingspaceblocks数目
npsscrubmax:
开始scrubbing内存的freepagingspaceblocks数目
#vmo-a|grepnps
npskill=62464
npsrpgmax=499712
npsrpgmin=374784
npsscrubmax=499712
npsscrubmin=374784
npswarn=249856
一.1.9PagingSpace的创建原则
AIX中PagingSpace大小确定的指导原则如下(理论上):
Ø系统实际内存小于64MB,pagingspace=2*RAM;
Ø系统实际内存在64MBto256MB之间,PageSpace=RAMsize+16MB;
Ø系统实际内存大于256MB,PageSpace=512+(RAM-256)*1.25;
Ø当内存超过4GB时,则需要根据实际情况来定,一般可初始3GB,然后观察pagingspace的使用情况,如果使用率超过70%,则需要增加pagingspace。
此外在创建PagingSpace时还应遵循以下原则以提高性能:
Ø创建的数量应尽可能的多;
Ø每个PagingSpace的大小应该相同;
Ø每个PagingSpace应尽可能的分配在不同的硬盘上。
工程和维护建议(目前内存和硬盘都比较大,相对比较实用些):
如果硬盘空间不是问题的话,建议可以是内存的两倍.如果内存大于8G或者16G,可以考虑先和内存空间相同.同时用两块不同的内置盘各分配一半的pagingspace空间.对于做了根盘镜像的系统,建议可以不镜像pagingspace(维护时注意这些特点).大的swap空间可以避免DPSA可能产生的风险,对于运维来说可能可以减少相关的维护分析工作.
一.1.10VMM内存管理器
一.1.10.1VMM简介
VMMservicesallmemoryrequestsfromthesystem.当内存被申请的时候(Working类型),对于earlyallocationofpagingspacepolicy情况下,在RAM被访问的时候,不管是否还有多少物理剩余空间,都会有pagingspace被分配,在这种情况下VMM起到了关键的作用.(不过目前系统缺省的pagingspace的分配原则是DPSA).
虚拟地址空间划分成段。
每段的大小是256MB,它是虚拟内存地址空间中一个邻接的部分,数据对象可映射到该空间。
虚拟内存段划分成固定大小的单元叫做页。
缺省页面大小是4096字节。
段中的每页在需要之前可位于实际内存(RAM)中,或存储在磁盘上。
同样,实际内存也可以划分成4096字节的pageframe。
VMM的角色是管理分配实际内存页面帧并且解析程序对虚拟内存页面的引用,这些虚拟内存页面当前不在实际内存中或还不存在(例如,当进程第一次引用其数据段的某一页时)。
因为在任何给定时刻使用的虚拟内存数量可能比实际内存大,所以VMM必须将余量存储在磁盘上。
VMM的两个目标:
Ø最小化使用虚拟内存的总处理器时间和磁盘带宽代价
Ø最小化pagefault的响应时间代价
VMM维护一个页面帧的空闲列表,它可用于补偿pagefault。
VMM使用了一个页面替换算法来确定当前处于内存中的哪些虚拟内存页要将它们的pagefrmaes重新指定到空闲列表中。
页面替换算法使用了几个机制:
Ø虚拟内存段分成持久段persistent或工作work段。
Ø虚拟内存段分成包含计算computational内存或文件file内存。
Ø跟踪在访问时引起pagefault的虚拟内存页。
Øpagefault分成newpagefault或repagefaults。
Ø在每个虚拟内存段中维护一个repagefaults率的统计信息。
Ø用户可调阈值影响页面替换算法的结果。
一.1.10.2FREELIST
VMM维护一个空闲页面帧的逻辑列表,它用于解决缺页故障。
在绝大多数环境中,VMM偶尔必须通过reasign由运行进程占有的一些页面帧来添加到空闲列表中。
需要reasign页面帧的虚拟内存页由VMM的页面替换算法进行选择。
VMM阈值决定了重新指定的帧的数量。
查看Freelist的方法:
#vmstat
Systemconfiguration:
lcpu=8mem=15936MB
kthr memory page faults cpu
---------------------------------------------------------------
r b avm fre re pi po fr sr cy in sy csussyidwa
1 1894790601757 0 0 0 2 3 0 15 861286 0 099 1
#svmon-G
size inuse free pin virtual
memory 4079616 3477911 601705 535886 894842
pgspace 7995392 2916
work pers clnt
pin 535886 0 0
inuse 894842 0 2583069
PageSize PoolSize inuse pgsp pin virtual
s 4KB - 3399607 2916 484734 816538
m 64KB - 4894 0 3197 4894
一.1.10.3页面替换pagereplacement
当空闲列表中可用的实际内存帧数量减少时就会调用一个页面替换器(stealer)。
页面替换器在整个页面帧表(PFT)中移动,寻找可替换(steal)的页面。
PFT中包含一些标志用来表示哪些页已经被引用,哪些页已经被修改。
如果页面替换器遇到一个已经引用的页,它不会替换这个页而是为该页重新设置引用标志。
在下一次钟针(页面替换器)经过该页且引用位仍未启用时,它便被替换。
初次通过时未被引用的页面会立即得到替换。
修改标志表示该页进入内存后上面的数据已经改变。
当页面要被替换时,如果设置了修改标志,那么在替换该页之前进行页面调出调用。
属于工作段的页面写入调页空间;而持久段中的页面写到磁盘上。
上图中:
第一个表是具有四列的页面帧表,它包含实际地址、段类型、引用标志和修改标志。
第二个表叫做空闲列表,它包含所有空闲页的地址。
最后一个表代表除去所有空闲地址后最终得到的页面帧表。
除了页面替换以外,算法还可通过使用一个包含最近缺页故障标识的历史缓冲区来跟踪新页故障(第一次引用)和重新调页故障(引用已经调出的页)。
然后它可以尽量平衡文件(持久数据)页面的调出和计算(工作存储器或程序文本)页面的调出。
当进程退出时,它的工作存储器立刻释放并且它的关联内存帧也放回到空闲列表中。
然而由该进程打开的任何文件可保留在内存中。
如果线程在单处理器上运行,那么页面替换可直接在线程作用域中进行。
在多处理器系统中,页面替换通过内核进程lrud进行,在达到阈值minfree时,该进程被分派到CPU中。
从AIX4.3.3开始,内核进程lrud是多线程的,每个存储池中一个线程。
根据CPU数量和RAM大小将实际内存划分成平均大小的存储池。
系统中存储池的数量可通过运行命令vmo-a来确定。
数值minfree和maxfree在命令vmo的输出中,它们是每个存储池的minfree和maxfree的总和。
#vmo-a|grepmempools
mempools=2
一.1.10.4重新调页repaging
Pagefaults要么是newpagefault要么是repagefault。
如果没有最近引用页面的记录的话,会出现一个newpagefault。
而出现repagefaults是指一个知道其最近已经引用的页再次被引用,但由于该页在上次访问后已经被替换(可能写到磁盘上)而在内存中找不到它。
理想的页面替换策略通过总是替换那些不会再次引用的页面帧而完全减少repagefaults(假设有足够的实际内存)。
因而repagefaults数是页面替换算法有效性的一个相反评测标准,算法将频繁被重用的页面保存在内存中,从而降低了总体I/O需求并潜在地改善了系统性能。
为了分清一个缺页故障是新页故障还是重新调页故障,VMM维护一个重新调页历史记录缓冲区,它包含N个最近缺页故障的页面标识,其中N是内存可保留的帧数。
例如,512MB内存需要一个128KB的repagefaults历史记录缓冲区。
在页面调进时,如果它的标识可在重新调页历史记录缓冲区中找到,则将它计为一个重新调页。
VMM还可以分别评估计算内存重新调页率和文件内存重新调页率,只需为每种类型的内存维护repagefaults计数即可。
每次页面替换算法运行时都将重新调页率乘以0.9,这样可比历史重新调页活动更有力地反映最近的重新调页活动
一.1.10.5VMO及NO不可修改(静态和祈免)参数
vmo和no中的不可调整参数包括静态(static)参数和祈免(deprecated)参
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 内存 管理
![提示](https://static.bdocx.com/images/bang_tan.gif)