设想

qemu会探入kvm内核,可否有kvm自己来将vcpu线程进行标识,这样调度器就可以根据标识来识别kvm的vcpu线程。

代码

  1. task_struct增加成员

    struct task_struct {...unsigned int kvm_thread;...
    }
    
  2. kvm_thread默认赋值

    /*头文件增加定义*/
    #define NO_KVM_THREAD   0
    #define KVM_VCPU        1
    #define KVM_THREAD      2/*init_task中初始化,init/init_task.c*/
    .kvm_thread = NO_KVM_THREAD,/*fork创建新进程初始化,kernel/fork.c, copy_process()函数*/
    p->kvm_thread = NO_KVM_THREAD;
    
  3. VCPU线程修改kvm_thread

    /*virt/kvm/kvm_main.c中kvm_vm_ioctl_create_vcpu()函数*/
    current->kvm_thread = KVM_VCPU
    
  4. CFS调度器判断VCPU线程

    /*kernel/sched/fair.c中__enqueue_entity()函数*/
    if(entity_is_task(se)) {if(task_of(se)->kvm_thread == KVM_VCPU) {se->vruntime >>= 1;}
    }
    

验证

运行qemu虚拟机ubuntu,在ubuntu中替换内核,并再运行qemu虚拟机(需要-enable-kvm)。

跑一个双核的qemu虚拟机,然后看预留的打印:

用htop命令查看具体线程和pid:

用top看cpu使用率:

问题

目前没看出vruntime减半带来的具体的效应。不过应该可以通过该方法来让调度器识别kvm的vcpu线程。

遇到的问题记录下:

  1. qemu虚拟机起来了,但kvm标识vcpu线程代码未起作用

    qemu命令需要-enable-kvm,否则不会使用kvm内核模块。

  2. 嵌套qemu中,虚拟机ubuntu提示kvm:no hardware support

    qemu命令中需要-cpu kvm64,+vmx来支持硬件虚拟化嵌套。

  3. 只识别了vcpu线程,其他qemu线程如何识别?不同qemu虚拟机的线程可否区分?

    待继续分析完善。

宿主机kernel识别kvm-vcpu线程的一种方法相关推荐

  1. java创建线程的两种方法区别

    在Java中创建一个线程有两种方法:继承Thread类和实现Runnable接口. 下面通过两个例子来分析两者的区别: 1)继承Thread类 public class TestThread exte ...

  2. 【 Thread】创建线程的2种方法

    (一)Thread类 1.结构 java.lang.Object |---java.lang.Thread 2.创建线程的两种方法 (1)一种方法是将类声明为Thread的子类,该子类应重写Threa ...

  3. Java学习笔记:创建线程的两种方法

    Java学习笔记:创建线程的两种方法 一.预备工作 1.创建Maven项目ThreadDemo 2.在pom.xml里添加依赖 二.继承Thread类创建子线程

  4. 多线程之终止线程的四种方法

    终止线程的四种方法 第一种:正常运行结束 第二种:使用退出标志退出线程 第三种:interrupt()方法退出 第四种:stop方法退出 第一种:正常运行结束 这种就是程序正常执行完run方法或者ce ...

  5. java 终止方法_Java中终止线程的三种方法

    Java中终止线程的三种方法 Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经 ...

  6. Java创建线程的三种方法

    这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析. 通过三种方法可以创建java线程: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callab ...

  7. Java 创建线程的三种方法比较

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java 创建线程的三种方法比较, 更多Java专业知识,广州疯狂jav ...

  8. TIL:创建Java线程的两种方法

    Java最强大的功能之一是它允许人们轻松管理线程以执行程序中的各种任务. 正确使用线程可以提高程序的效率. 也就是说,今天我了解了创建这些线程的两种方法: 第一种方法:实现可运行 Runnable是抽 ...

  9. OMP 设置线程的3种方法

    设置线程的3种方法 1. 在子语句 data clause 中设置 : num_threads( ) #pragma omp parallel for default(none) shared(x) ...

最新文章

  1. HDU 2102 A计划
  2. AI部署:聊一聊深度学习中的模型权重
  3. mysql提示performance_schema缺表
  4. gentoo linux mldonkey 问题解决
  5. Python | 除法
  6. 「影视+社交」,网易云信助力「微光」开辟新赛道
  7. FileNameFilter过滤器的使用和Lambda优化程序
  8. java实现将一个正整数分解质因数,Java将一个正整数分解质因数
  9. 周选特辑|一些超棒的开源项目!
  10. linux下如何获取cpu的利用率
  11. matlab绘画固定方程的曲线图
  12. android简单小游戏开发工具,傻瓜化开发Android小游戏
  13. 基础算法:数的三次方根—浮点二分
  14. 年轻人,不要太浮躁,静下心来听听【钢琴曲】
  15. php 生日提醒,PHP中实现简单的生日提醒功能实例,简单又实用!
  16. 深度解析javaScript常见数据类型检查校验
  17. 商易通-预约挂号详情页面-预约确认(三十五)
  18. 【翠花学Maven】Maven详解
  19. js当前页面打开小窗口 window.open
  20. python数据分析实训心得_Python代码在实践过程中的经验总结

热门文章

  1. STM32关闭PWM输出时,让IO输出固定高或低电平的方法。
  2. CStdioFile 写文件的一个坑
  3. 移动互联网十大创新应用
  4. DVD-光盘刻录(笔记本、台式机)
  5. bbed删除行记录,跳过bootstrap$的某些索引创建
  6. xsl空格等特殊符号转换
  7. 安装kali linux 碰到的几个问题。
  8. 杭州金田电磁流量计数据解析之读出累计总量
  9. django admin 验证码点击刷新
  10. 第七届力学、数学与应用物理学国际会议(ICMMAP 2023)