qemu tcg translation block机制

6月 19th, 2016 | Filed under Virtualization

Base是git://git.qemu.org/qemu.git v2.6.0

入口是qemu_init_vcpu,在tcg_enabled下进入qemu_tcg_init_vcpu函数,在qemu_thread_create(cpu->thread, thread_name, qemu_tcg_cpu_thread_fn,
cpu, QEMU_THREAD_JOINABLE)中看到执行函数是qemu_tcg_cpu_thread_fn,下面的函数负责控制在machine完全初始化完成前进行等待

然后进入循环开始执行tcg_exec_all函数。
阅读全文…

标签: ,

ext4 mballoc源代码分析

5月 24th, 2016 | Filed under FileSystem

看mballoc一开始是为了解决一个bug,但是代码没看完,bug已经解决了,仅仅是从C代码规范的处理的,和ext4自身逻辑没有什么关系,具体内容参看“ubsan: “shift exponent -1 is negative” in fs/ext4/mballoc.c:2612:15”,Bugzilla链接

ext4 mballoc特性是用进行一次性的多个块申请分配,官方定义:
What is multiblock allocation (mballoc)?
mballoc is a mechanism to allow many blocks to be allocated to a file in a single operation, in order to dramatically reduce the amount of CPU usage searching for many free blocks in the filesystem. Also, because many file blocks are allocated at the same time, a much better decision can be made to find a chunk of free space where all of the blocks will fit.
The mballoc code is active when using the O_DIRECT flag for writes, or if the delayed allocation(delalloc) feature isbeing used. This allows the file to have many dirty blocks submitted for writes at the same time, unlike the existing kernel mechanism of submitting each block to the filesystem separately for allocation.
阅读全文…

标签:

QEMU monitor savevm loadvm源代码分析

3月 9th, 2016 | Filed under Virtualization

源代码版本:git://git.qemu.org/qemu.git v2.5.0

savevm指令对应的函数是hmp_savevm,loadvm则是hmp_loadvm, 对应的函数是

上面这个代码是编译生成的,在编译目录下面的x86_64-softmmu/hmp-commands.h。 阅读全文…

标签: ,

KVM下steal_time源代码分析

12月 1st, 2015 | Filed under Virtualization

KVM下steal_time源代码分析
代码版本:https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git branch v4.3
刚好有人在其他文章评论下问到steal_time机制,顺便看了一下,总结如下。
steal_time原意是指在虚拟化环境下,hypervisor窃取的vm中的时间,严格讲就是VCPU没有运行的时间。
在guest中执行top选项,就可以看到一个st数据

阅读全文…

标签: , ,

面试记

10月 20th, 2015 | Filed under Views

前段时间校招的如火如荼,TL搞到了几个候选人,赶鸭子上架让我参与面试。

因为都是一对一的进行交流,怕标准低了平白浪费时间,用力过猛又招不到人,先和TL交流了他心中的标准,于是给自己定下基调,“知识面求广不求深,寻求个别亮点”。

1.第一位应聘者是硕士毕业,基本上就是聊天的节奏,自己作为面试官,整个方向没有掌握好,问的问题很随意,基本是想到哪里问那里,事后发现很多问题没有问到,平白有些遗憾;而应聘者的表现看还是不太好,对于linux, kernel,virtualization一步步交流下来,了解的东西都非常浅显,而且局限于自己做的小项目,整个知识面没有拓展开来。交流耗时1小时。 阅读全文…

标签: ,

Linux桌面环境配置技巧

9月 12th, 2015 | Filed under Configuration

17.openjdk或者jdk中的字体锯齿处理,适用于phpstorm和pycharm

在.bashrc中添加

16.Centos 安装网易云音乐linux客户端RPM版本

下载ubuntu 14.04版本,解压到/usr目录下,执行ldd /usr/lib/netease-cloud-music/netease-cloud-music依次补全缺失的包即可,注意启用epel和nux源

我直接给出结果了:
ldd netease-cloud-music | cut -d ” ” -f3 | sort | uniq | xargs rpm -qf | uniq

/lib64/libcrypto.so.1.0.0这个lib版本不一致,centos只能使用ubuntu的二进制替换,恰好ubuntu有独立的lib库,下载libcrypto1.0.0-udeb包解压替换即可。

如果不能下载注意自己的默认网络代理。

阅读全文…

标签: ,

seabios缺陷导致特定VCPU个数的qemu找不到硬盘

7月 18th, 2015 | Filed under Virtualization

seabios问题的原理还是很简单的,只是我对bios的原理一点也不了解,可谓盲人骑瞎马,夜半看bug,过程记录一下,还是有些意义。
问题就是给定qemu分配78个vcpu的时候,qemu提示找不到硬盘,即是”Boot failed: could not read the boot disk”,出现了这样的问题,正确的思路就是看打印,就是seabios的boot_disk里面的:

阅读全文…

标签: , ,

Xen migration源代码分析

6月 13th, 2015 | Filed under Virtualization

最近要定位Xen migration后nested中xl创建vm panic的问题,于是把migration的过程看一看,记录如下,使用的迁移命令是“xl migrate centos localhost”,下面的代码走读也是以这个命令为标准。
直接从xl命令看,它在toolslibxlxl.c的main函数中,xl受到操作参数之后通过cmdtable_lookup函数进行查表,就是cmd_table,找到名称对应的数组项,也就是migrate,对应的函数是main_migrate,xl的main函数查到对应数组后立即执行对应函数,完成则xl结束,也就是执行main_migrate函数。
阅读全文…

标签:

KVM进入vmx模式产生general protection fault

5月 23rd, 2015 | Filed under Virtualization

在SIMICS软件里面模拟最新的CPU进行虚拟化测试的时候,先把Dave的kernel patches拿到手,打补丁到v4.1-rc2上,每次启动qemu-kvm的时候,console上就打印了一堆信息,然后panic了,信息简略如下:

阅读全文…

标签: , , ,

KVM和XEN内存权限检查机制

2月 15th, 2015 | Filed under Virtualization

在非虚拟化环境上,Linux的内存寻址就不多说了,不了解的参考Linux内存寻址,只提一下相关的权限检查,在分页机制上进行多级寻址,每次获取下一级地址都需要访问页表项的值进行计算,在读取之前,kernel会将页表项里面的权限值和当前访问线程的属性进行比较,如果不满足权限,则进行page_fault。基本页表项内容如下: 阅读全文…

标签: , ,