Xen从启动到运行的调度相关代码分析
来源:互联网 发布:lol怎么测试网络丢包率 编辑:程序博客网 时间:2024/04/23 17:32
xen/arch/x86/boot/x86_64.S 从启动到到进入运行状态
__call __start_xen
|
|__ __start_xen
|
|__init_idle_domain
| |
| |__scheduler_init()
| |
| |__SCHED_OP(init)
| |
| |__ops.init() -> csched_init()
|
|
|__reset_stack_and_jump(init_done)
|
|__init_done
|
|__startup_cpu_idle_loop()
|
|__startup_cpu_idle_loop() 进入无限循环,至此 xen从启动状态进入运行状态
__startup_cpu_idle_loop()
|
|__continue_cpu_idle_loop 无限循环执行以下的部分
|
|
|__raise_softirq(SCHEDULE_SOFTIRQ)
|
|__do_softirq(0) 处理上面引发的中断号,并调用处理函数schedule。
________schedule
|
|_______perfc_incr 可能是关于CPU的一个perfcounters结构的定义相关的
|
|_______stop_timer
|
|_______ops.do_schedule 使用调度器的这个回调函数,默认使用credit这个调度器,调用函数为csched_schedule。
|
|_______vcpu_runstate_change
|
|_______update_vcpu_system_time
|
|_______vcpu_periodic_timer_work
|
|_______context_switch
________csched_schedule
|
|_______burn_credits 重新给需要调度的vcpu计算credit,计算方法该svc应该的开始时间到当时的时间差,按ms为单位每个ms增加10 credit
|
|_______runq_insert 将当前vcpu按照优先级降序的排列顺序插入到pcpu的运行队列中
|
|_______csched_load_balance 根据全局变量 cpu_online_map 和 csched_priv.idlers计算出workers,然后在workers中遍历。
| 如果在CPU上调用的vcpu处于over状态,则会调用loadbalance从其它的cpu队列上找一个给当前cpu调用。
|
|_______csched_runq_steal 将peer中的vcpu放到当前cpu中执行
Important mocro:
#define DECLARE_PER_CPU(type, name) extern __SMALL_ADDR_AREA __typeof__(type) per_cpu__##name
perfc_info[] = performance conter info d:/nex-4.5.2/xen/xen/common/Perfc.c
{
{ "hypercalls", TYPE_ARRAY, NR_hypercalls,},
{ "calls to multicall", TYPE_SINGLE, 0 },
{ "calls from multicall", TYPE_SINGLE, 0 },
{ "#interrupts", TYPE_SINGLE, 0 },
{ "#IPIs", TYPE_SINGLE, 0 },
{ "sched: timer", TYPE_SINGLE, 0 },
{ "sched: runs through scheduler", TYPE_SINGLE, 0 },
{ "sched: context switches", TYPE_SINGLE, 0 },
{ "PG_need_flush tlb flushes", TYPE_SINGLE, 0 },
{ name, TYPE_SINGLE, 0 },
}
enum perfcounter { performance conter type d:/nex-4.5.2/xen/xen/include/xen/Perfc.h
PERFC_hypercalls,
PERFC_LAST_hypercalls = PERFC_hypercalls + (NR_hypercalls)) - sizeof(char[2 * !!(NR_hypercalls)) - 1]),
PERFC_calls_to_multicall,
PERFC_calls_from_multicall,
PERFC_irqs,
PERFC_ipis,
PERFC_sched_irq,
PERFC_sched_run,
PERFC_sched_ctx,
PERFC_need_flush_tlb_flush,
NUM_PERFCOUNTERS
};
- Xen从启动到运行的调度相关代码分析
- Xen从启动到运行的调度相关代码分析
- xen的调度算法分析
- Xen 启动客户虚拟机的过程分析
- xen的cpu调度流程分析(1)
- xen的cpu调度流程分析(2)
- XEN启动过程分析
- Android 从启动到程序运行发生的事情
- Android从启动到程序运行发生的事情
- Android从启动到程序运行发生的事情
- Android从启动到程序运行整个过程的整理
- Xen下运行arinc653调度算法
- Java新手之Java 从代码到运行的过程
- 简述Java 从代码到运行的全过程
- 简述Java 从代码到运行的全过程
- Iparhan_ Java 从代码到运行的过程人性化解释
- Xen中Credit调度算法分析
- [PostgreSQL]PostgreSQL后台进程启动相关代码的分析
- ruby发送http,https请求
- Linux 基础命令学习
- StringBuilder。StringBuffer。String
- 桥接模式笔记(java)
- VS中测试算法一些语句
- Xen从启动到运行的调度相关代码分析
- switch-case语句
- 静态变量和非静态变量的比较,用法和用途
- oracle获取今天这个时间段内数据
- python 嵌入c
- Informix之onspaces语法及实例(磁盘空间管理)
- MATLAB中下标、斜体以及希腊字母表示法
- 使用Google App Engine进行软件的开发和部署发布
- CDocTemplate 解析