|
For Free List
1.在heap中unused memory 总是保存在一条Free-list上
2. Heap总是 最少有一条 Free-List
3. 初始化堆heap的 程序调用者(KGH Function Caller)可以指定以下属性:
a. heap中Freelist 空闲列表的数量(The number of free list )
b. chunk内存块的分布范围(The range of chunks to put on them.)
4. memory manger(KGH) 保证 heap中的每一块空闲内存Free Chunk 总是在某一条Free list上
Free List Buck 结构 kghbk-> Kernel Generic shared Heap manager Bucket
ODM Test:
size > 65560bytes=64k chunks always stored in Bucket 254 , 空闲列表最大有0-254 共255个 Buckets(Heap free lists contain 255 buckets)
Each bucket contains double linked list to free chunks
Bucket sizes increase in
increments of 4 bytes - 16, 20, 24, 28, 32 ... 808, 812
increments of 64 bytes - 876, 940, 1004 ... 3948, 4012
then 4108, 8204, 16396, 32780, 65548
Reduces fragmentation
RESERVED FREE LISTS一般有14个Bucket
1.recreate memory 是那些 已分配的内存,但是仍可以被age out到heap的Free List上2.KGH heap manager 使用LRU算法来实现aging 3.chunk flag KGHACRECR用来标示 那些其内容 已经为recreatable的chunk 4. 当chunk不在被使用, chunk的用户可以显示地将它 unpin解锁掉,从而KGM Memory Manager会看到这个chunk成为潜在的Free Chunk 5. KGH 会调用已注册的回调程序(callback)来请求chunk的所有者将该chunk 释放Free掉 6. chunk的拥有者可以自行决定是否释放Free chunk 7. 被 "pinned"住的recreatable chunk无法aged out到Free List上 8. 所有未被锁住的Unpinned Recrateable chunk都被 暂存在堆heap的LRU LIST上 Recreatable chunk header - kghrc -> kernel generic heap memory manager recreatable chunk header Chunk 0823ba420 sz= 1112 recreate "KGLS heap " latch=0x82f4c110 Oracle同样利用latch来限制 client 的callback对recreatable chunk的串行操作。 |
什么是heaps?
oracle内核中的 内存管理器 memory manager (KGH kernel generic heap) 负责管理内存逻辑结构, 逻辑结构被称为 heaps 堆。
一个heap 堆包括:
1. 一种被称作 堆描述符"heap descriptor"的逻辑结构 (该结构 用以记录管理操作信息)
2. 被称作 Extents的连续内存片的集合
一个heap 包含一个或多个Extents , 每一个heap extent占用一个独立的granule , 如4M 16M等size , 也就是说一个parent heap 的最小分配单位是extent- granule 。
每一个 extents 可能包含很多个chunks ,chunk被我们翻译为 内存块。
每一个heap 总是有一个Free List 记录了 free chunks 空闲内存块的信息。
oracle内核中的 内存管理器 memory manager (KGH kernel generic heap) 负责管理内存逻辑结构, 逻辑结构被称为 heaps 堆。
一个heap 堆包括:
1. 一种被称作 堆描述符"heap descriptor"的逻辑结构 (该结构 用以记录管理操作信息)
2. 被称作 Extents的连续内存片的集合
一个heap 包含一个或多个Extents , 每一个heap extent占用一个独立的granule , 如4M 16M等size , 也就是说一个parent heap 的最小分配单位是extent- granule 。
每一个 extents 可能包含很多个chunks ,chunk被我们翻译为 内存块。
每一个heap 总是有一个Free List 记录了 free chunks 空闲内存块的信息。
什么是Extent?
1.一个Extent 是一段被分配给heap的 连续内存段
2. Extent总是从 父堆parent heap 或者通过特殊的回调程序 分配
3. 绝大多数heap 从 他们的父堆parent heap哪里获得内存
1.一个Extent 是一段被分配给heap的 连续内存段
2. Extent总是从 父堆parent heap 或者通过特殊的回调程序 分配
3. 绝大多数heap 从 他们的父堆parent heap哪里获得内存
1330

被折叠的 条评论
为什么被折叠?



