学习和研究中前行,并在分享中提升自己

欢迎订阅阿里内推邮件



linux下借助dynamic debug 动态打开debug日志

阅读次数: 133 | 时间:2018年4月22日 21:37 | 标签:linux

内核开发的时候我们都会在异常路径上加一些日志来确保当异常发生时能很快的定位。今天,主要给大家介绍通过内核dynamic debug的功能来动态开起和关闭debug日志的打印阅读全文

从kvm场景下guest访问的内存被swap出去之后说起

阅读次数: 166 | 时间:2018年4月8日 19:35 | 标签:linux

熟悉linux内存管理的人同学应该都清楚,当物理机上的内存不足时会把非热点的page先换出到存储介质上,然后把物理页给其他进程使用。试想一下,在kvm场景下如果guest访问的内存被swap出去会发生什么样后果呢?先不着急讨论这个后果如何,我们先来复习一下guest内存map到物理内存的一个流程是什么样的阅读全文

linux下cpu load和cpu使用率的关系

阅读次数: 149 | 时间:2018年4月4日 21:21 | 标签:linux

cpu load是指系统上的负载,负载高并不代表着系统中cpu的使用率有多高。通常衡量一个系统负载高低主要是由系统中正在运行和在runqueue里面等待运行进程多少来决定的。引用一下网络上比较流行的一张图来解释一下load阅读全文

linux下cfs 调度器研究:vruntime和时间片

阅读次数: 187 | 时间:2018年2月21日 23:08 | 标签:linux

前面两篇文章主要介绍了cfs的原理和进程的切换,这篇文章来讲一下vruntime和 cpu slice在cfs中的体现。阅读全文

linux complete fair schedule 调度器研究:进程切换的触发和执行

阅读次数: 191 | 时间:2018年2月19日 22:10 | 标签:linux

上一篇主要介绍了cfs的一些基本的核心思想,今天想写一下进程切换触发和执行触发的时机。为什么我要把进程切换触发和执行分成两个部分了?在回答这个问题之前,我们先来说一下进程切换的两种场景。通常进程切换有两种情景:自愿(Voluntary)和强制(Involuntary)。自愿切换,通常是进程在等待某种资源,比如IO等;而强制切换通常是指当前进程还在运行被迫让出cpu,这种场景一般被称为抢占。阅读全文

linux 下cfs 调度器研究

阅读次数: 181 | 时间:2018年2月14日 21:53 | 标签:linux-task

对于一个操作系统来说,任务调度系统是其核心之一。一方面要保证各种类型的任务的及时运行避免被“饿死”,另外一方面又要尽量减少调度算法复杂度。今天我们主要介绍linux cfs task 调度器的一些核心思想阅读全文

关于linux下进程栈的研究

阅读次数: 223 | 时间:2017年12月31日 00:29 | 标签:linux-task

早就想写这样一篇文章来探讨一下linux用户态进程栈,今天有机会补上。大家都知道进程栈是往下增长的, 栈上除了放一些local 静态变量,还有就是被调用函数的返回地址。比如,你使用gdb的时候看到的那些调用关系。下面,我们先看一下linux用户态进程栈一个整体图阅读全文

关于linux 4.12 livepatch 机制的研究

阅读次数: 324 | 时间:2017年12月24日 17:22 | 标签:linux

关于内核hotfix已经比较成熟,基本作法就是定义一个新的函数,然后通过kallsyms_lookup_name找到旧函数的地址,通过jmp到新函数地址,然后stop machine后再替换。这新带来的开销比较大,尤其是在有网络负载的情况下,那么今天我们来看一下在4.12内核引入的livepatch机制,它主要是依赖dynamic ftrace。阅读全文

虚拟化环境中的hypercall介绍

阅读次数: 240 | 时间:2017年12月22日 22:18 | 标签:hypercall

大家都知道linux环境下有个syscall,俗称系统调用。他通常用在用户态调用内核态的一些函数的场景,当用户态进程使用ioctl调用内核函数时,进程这时就会从用户态陷入到内核态,这种场景就会发生context switch.而hypercall主要用在虚拟化场景,而当guest使用hypercall时就会产生VM-Exit,也即从vmx non-root状态退出到vmx root 状态。阅读全文

kvm virtio net 前后端通信分析

阅读次数: 625 | 时间:2017年12月10日 16:32 | 标签:virtio_net

最近遇到两例子网络不通的问题。虽然现像不一样,但是根本原因都如果出一则:都是前端tx queue处于stopped状态,导致无法发包,且后面再也无法awake 这个queue.核心问题都出在前后端交互上 阅读全文