技术沉淀分享

Thinking will not overcome fear but action will.

qemu加载seaBIOS源码分析

qemu加载seaBIOS源码分析

虚拟化里对于虚拟机有一个重要的模拟就是BIOS的模拟,目前QEMU针对BIOS的模拟主要是开源的seaBIOS。今天重要介绍qemu是如何加载seaBIOS的。 pc_i440fx_machine_options会设置qemu的firmware为bios-256k.bin,代码如下: static void pc_i440fx_machine_options(MachineClass *...

qemu模拟的machine类型是从哪来的

qemu模拟的machine类型是从哪来的

我们知道在定义虚拟机domain时,即使用libvirt对虚拟机实例进行定义时需要指定machine,例如下图所示 那么qemu是如何选择machine的呢? 对于x86或者x64使用pc_piix.c用于注册machine信息。 我们以pc-i440fx-5.2为例进行分析,即本文中的default machine type Supported machines are: m...

virsh-tool dump虚拟机内存源码分析

virsh-tool dump虚拟机内存源码分析

在之前的文章中,我们在分析虚拟机hung住问题时,尝试使用virsh dump虚拟机内存,以此来通过crash进行分析,因为virsh dump 虚拟机内存实际就是内存快照,和机器在crash时生成的vmcore文件是类似的。 virsh tools源码在libvirt项目的tools目录下,我们找到dump源码所在文件 tools/virsh-domain.c const v...

Sshd服务多次重启问题分析

2022年2月28号晚上11点左右,业务反馈有台自建物理机ssh登录不了了,但机器能正常提供服务,从系统log看,机器确实有sshd的重启操作,并且是通过ansible进行的。从日志看业务对ssh配置文件,即/etc/ssh/sshd_config进行变更,并重启sshd服务(systemctl restart sshd),并且前几次都能重启成功,最后一次重启失败了 于是找了一台测试机...

linux内存回收之kswapd详解

linux内存回收之kswapd详解

Linux内核内存回收主要有快速内存回收、直接内存回收、kswapd内存回收,这篇文章主要讨论kswapd内存回收,也称为后台回收。 在系统启动过程执行start_kernel的时候会执行kswapd_init,在kswapd_init函数里执行kthread_run,为每个内存节点(node)创建kswapd内核线程。Kswapd内核线程函数体如下所示: static int kswa...

离线业务虚拟机hung住问题分析

离线业务虚拟机hung住问题分析

离线业务反馈有台VM机器ssh登录不了,从监控看所有指标都掉0了,机器并没有重启,因此怀疑系统可能hung住了,但由于系统没有重启,因此可以判断系统上的进程应该没有一直处于D状态,在系统开启了hung task panic的条件下,即hung_task_panic=1,如果处于D状态超过hung_task_timeout_secs 由于从监控(包括monitor,宿主机log等)也看不出异...

qemu源码调试

qemu源码调试

2021年已经过去了,接下来就进入了2022年,先祝大家在新的一年里心想事成,工作顺利,万事如意! 2022年会将工作重点之一是投入到KVM相关的技术研究中了,毕竟还是要对虚拟化技术要有足够的理解和技术研究才能hold住。开篇先说下如何调试qemu源码,相对比较简单,不会分析qemu相关的技术实现和逻辑。 首先是编译qemu,这里不介绍详细过程了,请自行google 接着要提供一个镜像...

JDK是怎么解决获取容器CPU数不准确的问题

JDK是怎么解决获取容器CPU数不准确的问题

最近有个同事问我为什么JAVA的API能正确获取到容器的CPU数量,而其他语言获取不到的问题。之前在排查一个线上问题时就涉及到获取容器CPU数量的问题,由于公司的技术栈大多数都是java,所以用java获取容器CPU数量。并且获取到的CPU数量确实是分给容器的真实数量,而不是宿主机的CPU数量。那么就有个疑惑,java是怎么解决获取CPU数量不准的问题的呢?今天就从JDK源码级别去分析下ja...

RDT技术初探之cbm_mask

RDT技术初探之cbm_mask

本文主要分析Cache Bit Mask(CBM),在RDT中,cache是通过位掩码描述的,我们使用位掩码描述了可用于分配的缓存部分。掩码的最大值由每个 cpu 模型定义(并且可能针对不同的缓存级别而不同)。它是使用 CPUID 找到的,但也在 resctrl 文件系统的“info/{resource}/cbm_mask”中的“info”目录中提供,例如info/L3/cbm_mask。通...

RDT技术初探之AMD机型小试牛刀

RDT技术初探之AMD机型小试牛刀

最近业务反馈虚机的LLC隔离问题,因为LLC是一个NODE上的所有CPU共享,因此就可能出现当分配的虚机cpu在一个NODE上,就会出现虚机之间争抢LLC的问题。 如下图所示: 因此,针对LLC隔离问题,intel首先推出了RDT(Resource Director Technology)。关于RDT技术的更多介绍可参考intel官方网站和https://github.com/inte...