技术沉淀分享

Thinking will not overcome fear but action will.

linux下hostname获取过程分析

linux下hostname获取过程分析

hostname是centos内置的获取主机名的命令,该命令对应的源码是net-tools [root@] /data0/src/os/net-tools$ ls hostname* hostname hostname.c hostname.o 其中hostname二进制是编译出来的可执行文件 通过GDB hostname可以看到,最终是通过系统调用gethostname获取主机名 ...

一次虚拟机网卡丢包问题分析过程

一次虚拟机网卡丢包问题分析过程

业务反馈有几台机器有超时问题,经过登录机器发现对应网卡有丢包,难道这个丢包和业务超时有关系? 从ifconfig命令看到网卡丢包大概1秒钟一次,1秒钟一次的话,这个丢包持续了大概8268621 / 3600 / 24 = 95.68946759259259天。看了下机器的创建时间,至今已经96天了,那也就是说机器创建出来的时候就出现了丢包,并且 维持在1秒钟一个包的频率。 我们用sys...

linux kernel

一次kill进程的案例分析

有个业务反馈一台机器ssh登录不了了,ssh出现connection refused 从监控没有发现机器异常情况,于是乎从云控制台vnc登录上去,发现sshd进程退出了,难怪ssh登录不上。那sshd进程到底为什么会退出呢? 首先想到的就是查下history,看看有没有人执行stop命令。 从history看到有人start和status过sshd进程,但是并没有stop sshd进程...

drop_caches原理剖析

drop_caches原理剖析

drop_caches是内核对用户态暴露的一个修改sysctl参数的接口,对应的proc文件是/proc/sys/vm/drop_caches,默认值是0,通过修改该值,可以达到回收内存的目的。该值一般有四个选项,对应值分别是1,2,3,4。这篇文章主要阐述drop_caches原理,并且针对回收cache(即vm.drop_caches = 1)进行详解。 drop_caches有效值范...

VCPU的运行过程

VCPU的运行过程

今天主要阐述VCPU的执行过程,在整个cpu虚拟化过程中,VCPU的运行是核心,包括了vm entry和vm exit两个过程。在这两个过程中,又牵扯到虚拟cpu和物理cpu的切换过程。由于本文是以intel CPU虚拟化为例,因此涉及到的代码都会以VMX为主。 先来看下VCPU运行的代码开始部分,这部分代码主要在回调函数kvm_vcpu_thread_fn中。 static void...

QEMU与KVM之间的共享数据

QEMU与KVM之间的共享数据

在阐述QEMU和KVM之间共享数据之前,先回忆并梳理一下虚拟机的创建流程,主要是qemu用户态的创建流程,这里我梳理了一下给出流程图如下 今天阐述的内容主要逻辑在kvm_init_vcpu函数里。对应的也是ioctl系统,参数是KVM_GET_VCPU_MMAP_SIZE,通过系统调用ioctl进入KVM内核态申请内存页,最后通过mmap实现共享内存,从而达到KVM与QEMU之间共享数据...

KVM中VCPU的创建流程

KVM中VCPU的创建流程

上篇文章kvm_create_vm函数会创建一台虚拟机,用户态可以通过ioctl系统调用访问该虚拟机,同样对于cpu,kvm也提供了类似的方式实现创建和访问,对应的函数是kvm_vm_ioctl static struct file_operations kvm_vm_fops = { .release = kvm_vm_release, .unlocked_...

KVM之kvm_create_vm函数详解

KVM之kvm_create_vm函数详解

在上一篇文章中,我们阐述了KVM中对/dev/kvm的调用逻辑,当通过系统调用ioctl(/dev/kvm, KVM_CREATE_VM)时,会通过带哦用kvm_dev_ioctl函数进而调用kvm_dev_ioctl_create_vm static int kvm_dev_ioctl_create_vm(unsigned long type) { int r; struc...

聊聊/dev/kvm的调用逻辑

聊聊/dev/kvm的调用逻辑

/dev/kvm是个字符设备文件,在虚拟化中主要作用就是对应用程序即qemu提供接口,这个接口是通过系统调用ioctl进行访问的。在上一篇文章KVM模块初始化源码分析我们看到在kvm模块初始化的时候会创建misc设置/dev/kvm,设备文件遵循通用文件操作类型即file_operations static struct file_operations kvm_chardev_ops = ...

KVM模块初始化源码分析

KVM模块初始化源码分析

在虚拟化领域,KVM已经是独领风骚,尤其是在硬件虚拟化方面,大大提升了虚拟机的性能。今天主要介绍KVM模块的初始化。KVM模块即通常所说的内核模块,它是以kernel module的形式呈现出来的,在虚拟化宿主机上会有两个内核模块,一个是kvm,另一个是kvm_intel(kvm_amd),本文主要介绍的是kvm_intel。 kvm的相关源码在linux内核的virt/目录以及arc...