Xen--内存代码阅读小记

1) Xen代码中三个比较重要的文件夹 arch common include


2)xen/arch/x86/mm.c

页面引用两种计数  TOT_COUNT和TYPE_COUNT;

tot_count记录一个物理页帧的所有引用,有引用的页面不会返回给空闲池(引用分为页目录,页表,可写页三种类型);

type_count记录当前类型下的引用数,为0时才可转换类型


3)dom_xen  xen_heap页

dom_io      I/O页

dom_cow     共享页


4)最底部的页面分配代码,即buddy和slab系统在xen/common/page_alloc.c


5)MFN(machine frame number)   unsigned long表示

 

6)zap  除去

 

7)round_pageup   所在页起始

round_pagedown    所在页结尾

 

8)PAGE_SHIFT  12  4KB页面

 

9)struct page_list_head {

    struct page_info *next, *tail;

}

一般插入到next处,即前段插入

struct page_list_entry {

    struct page_info *next, *prev;

}

struct page_info里包括

page_list_entry

还包括v.free.order,记载所在页链表中页数目

 

10)page_to_mfn(pg)

page_to_madrr(pg)

 

11)#define likely(x) __builtin_expext(!!(x), 1)   执行if后的语句可能性大

#define unlikely(x)  __builtin_expext(!!(x), 0)   执行else后的语句可能性大

 

12)Try Your English:

MMU Memory Management Unit  内存管理单元(硬件电路,逻辑Addr -> 物理Addr)

MTRR Memory Type Range Register  存储区域类型寄存器

TLB Translation Lookaside Buffer   快表

CoW Copy in Write

PoD Populated-on-Demand

PAE Physical Address Extention  物理地址扩展

PDE Page Directory Entry  目录项

PTE Page Table Entry  页表项

PFN Page Frame Number  页框号

MFN Machine Frame Number  机器页框号

GPFN Guest Page Frame Number  客户机页框号

GMFN Guest Machine Frame Number  客户机器页框号

M2P Machine-to-Physical Translation Table  

P2M Physical-to-Machine Translation Table

MPT Machine Physical Mapping Table

GDT Global Descriptor Table  全局段描述符表

LDT Local Descriptor Table


13)内存地址转换

逻辑地址 -> 分段单元 -> 线性地址 -> 分页单元 -> 物理地址

            分段                     多级分页 page.h


x86_64 CPU一般不采用分段机制,Xen内核区域(168M保留)用页面级保护实现

hvm 影子页表 p2m

pvm p2m_domain结构

气球驱动 memory.c


14)xen/common/page_alloc.c

buddy调用层次:

alloc_domain_struct

alloc_xenheap_pages

alloc_domheap_pages

alloc_heap_pages(最底层)

 

虚拟机内存大小调节:

 

1.PoD机制:Populate-on-Demand   实现hvm启动在气球状态

hvm启动时,只读e820 maps确定它们的内存

=> 1)以一个新P2M类型记录最大的mem值(maxmem)  memory_static_max

2)分配memory_dynamic_max内存(target)给PoD Cache(struct domain中)

3)启动guest

4)填充P2M表on demand, PoD Cache

5)Balloon启动时,大小为maxmem - target,guest os为zero it,emergency sweep寻找0页面,交还给Xen

 

若Balloon driver不在,无0页面,PoD domain crash

 

使用前提:1)balloon driver ok  (xen_balloon.ko)

2)xen create testhvm maxmem=512 memory=256

 

2./xen/common/memory.c

decrease_reservation:判断is_hvm_domain && p2m_pod_decrease_reservation

increase无判断,值写入数据结构中,vm内存不变,重启后变

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值