进程调度子系统
文章平均质量分 85
记录和进程调度相关的笔记
jrglinux
这个作者很懒,什么都没留下…
展开
-
MuQSS调度器之调度器初始化(三)
根据Cache和内存的相关性划分调度域,调度域内的CPU又划分一次调度组。我们可以在/proc/sys/kernel/sched_domain/cpuX/ 中看到CPU实际使用的调度域个数以及每个调度域的名字和配置参数。从分层的视角分析,每层都有per-cpu数组保存每个CPU对应的调度域和调度组,它们是在初始化时已经提前分配的内存。rq->cpu_order[]中记录cpu的排序,rq->rq_order[]数组记录rq的排序。函数,其会更新cpu_order[]/rq_order[]数组。原创 2023-03-17 20:00:00 · 588 阅读 · 0 评论 -
Linux-scheduler之负载均衡(二)
nohz_balancer_kick用来触发nohz idle balance的,这是后面两个章节要仔细描述的内容。然而,其实nohz idle balance本质上也是另外一种意义上的周期性负载均衡,只是因为CPU进入idle,无法产生tick,因此让能产生tick的busy CPU来帮忙触发tick balance。而实际上tick balance和nohz idle balance都是通过SCHED_SOFTIRQ的软中断来处理,最后都是执run_rebalance_domains这个函数。原创 2023-03-14 22:00:00 · 881 阅读 · 0 评论 -
一文搞懂core-scheduling核心机制
一文搞懂core scheduling的工作核心机制原创 2023-02-15 21:00:00 · 1250 阅读 · 1 评论 -
Linux-scheduler之负载均衡(一)
linux内核调度器分析原创 2022-11-28 11:56:25 · 953 阅读 · 1 评论 -
CFS调度时间片计算
Linux之CFS调度器的时间片计算分析原创 2022-10-29 09:00:00 · 1102 阅读 · 0 评论 -
Linux内核之seqlock机制
Linux内核之顺序锁机制原创 2022-09-27 09:00:00 · 470 阅读 · 0 评论 -
Linux内核之读写锁机制
Linux内核之读写自旋锁机制原创 2022-09-25 17:00:00 · 1323 阅读 · 0 评论 -
Linux内核之spinlock自旋锁机制
Linux内核之spinlock自旋锁机制原创 2022-09-24 09:00:00 · 667 阅读 · 0 评论 -
Linux内核之mutex互斥锁机制
Linux内核之mutex互斥锁原创 2022-09-21 13:51:37 · 1399 阅读 · 0 评论 -
Linux内核之softirq机制
Linux内核之softirq机制原创 2022-09-22 09:00:00 · 461 阅读 · 0 评论 -
Linux内核之completion机制
Linux内核之completion机制原创 2022-09-20 19:00:00 · 1493 阅读 · 0 评论 -
Linux内核之tasklet机制
Linux内核之tasklet机制原创 2022-09-18 09:00:00 · 1070 阅读 · 0 评论 -
Linux内核之workqueue机制
Linux内核之workqueue机制原创 2022-09-16 13:44:04 · 408 阅读 · 0 评论 -
Linux之中断interrupt机制
Linux内核之interrup机制分析原创 2022-09-13 20:00:00 · 1431 阅读 · 0 评论 -
小众调度器
其他可替换CFS的调度器原创 2022-08-09 18:40:28 · 269 阅读 · 0 评论 -
deadline调度器简要分析
dl队列结构体struct dl_rq { /* runqueue is an rbtree, ordered by deadline */ struct rb_root_cached root; unsigned long dl_nr_running;#ifdef CONFIG_SMP struct { u64 curr; //当前running的任务的deadline值 u64 next; //next任务的deadline值 } earliest_dl; unsig原创 2022-04-18 20:00:00 · 833 阅读 · 0 评论 -
KVM latency优化点分析
kvm latency tunning注:参考tencent-cloud的wangpengli的报告报告的目标是优化kvm hypervisor的latency性能,主要有以下几点。TLB ShootdownTLB:Translation Lookaside Buffer,转译后备缓冲区(页表缓存),存放虚拟地址映射物理地址。TLB shootdown一般通过IPI方式实现。问题TBL shootdown preemption问题。在裸金属架构(bare-metal)上,远程TLB刷新导致发原创 2022-04-08 21:00:00 · 743 阅读 · 0 评论 -
latency-nice优先级补丁源码分析
1. 概述2022年3月11日,Vincent Guittot写道:基于2020年Parth提供的[1-4]系列latency nice相关的patches,他重启了相关工作,提供了新的一组有关latency nice priority的patches。解决了CFS调度器中一个进程是否可以抢占当前正在运行的进程的问题。2. 设计思想latency-nice优先级其实和nice值类似,但latency-nice用于表示进程对latency延迟的容忍情况。比如,latency-nice值范围[-20,19原创 2022-04-05 21:20:59 · 1144 阅读 · 0 评论 -
scheduler performance testing
Scheduler Performance Test Manual主机测试1. 并行任务time make -jX #监测并行任务的runtimeperf stat make -jX #统计并行任务的数据以并行任务数量X为横轴,测得的runtime(Y)为纵轴,绘制曲线图。举例:通过make -jX来跑并行任务。我这里通过编译qemu-5.1.0来测试性能。cd qemu-5.1.0mkdir buildcd build../configure --target-list=x86_原创 2022-03-31 20:00:00 · 1034 阅读 · 0 评论 -
分析绘制CPU-topology拓扑图
教你如何分析绘制你的主机的cpu topology拓扑结构图原创 2022-03-23 21:00:00 · 1451 阅读 · 0 评论 -
KVM之Hypercall机制
这里只关注x86架构。按内核文档中,x86架构下,KVM Hypercall是一个3字节的指令,vmcall指令或者vmmcall指令。通过寄存器rbx、rcx、rdx、rsi,最多传输四个参数。然后hypercall的调用号存放于rax,并且调用返回值也存放于rax中,不涉及其他寄存器。原理分析VM调用接口arch/x86/include/asm/kvm_para.h中定义了hypercall接口:#define KVM_HYPERCALL \ ALTERNATIVE("vmc原创 2022-01-19 19:00:00 · 1690 阅读 · 0 评论 -
常见CPU调度算法
CPU调度初衷:In a system with a single CPU core, only one process can run at a time. Others must wait until the CPU’s core is free and can be rescheduled. The objective of multiprogramming is to have some process running at all times, to maximize CPU utilizat原创 2021-12-24 21:00:00 · 7170 阅读 · 0 评论 -
openEuler21.09动态切换抢占模式的方法实现
1. 参考文档openEuler白皮书下载根据其官网上介绍,openEuler中内核新增动态切换抢占模式的功能。注:下面所涉及的修改不一定都是huawei提交的,有些是从Linux主线上游拉下来的。根据openEuler内核源码看,应该是基于Linux5.10版本。2. 抢占模式的理解一般内核make menuconfig执行后默认都是选择的Voluntary preempt模式。抢占模式一般有以下几种:抢占模式理解No Forced Preemption上下文切原创 2021-12-09 19:10:19 · 1396 阅读 · 0 评论 -
openEuler21.09中的负载均衡算法优化
1. 参考文档openEuler21.09内核代码根据openEuler官网上的介绍,其内核对进程调度的负载均衡做了算法优化,来提升系统性能。我们就来看看代码到底优化了什么。注:下面所涉及的修改不一定都是huawei提交的,有些是从Linux主线上游拉下来的。根据openEuler内核源码看,应该是基于Linux5.10版本。2. 代码分析openEuler进程调度优化主要点:优化进程负载均衡算法,减少负载均衡过程中的开销,提升性能;通过对比分析代码,主要分几下个点:2.1 sched_sl原创 2021-12-09 19:10:39 · 1286 阅读 · 0 评论 -
实时监测进程调度累计runtime
构想进程的调度数据可通过proc文件系统查看,/prod/${pid}/sched中的参数,对性能优化来说很有参考意义,比如1号进程的数据如下:systemd (1, #threads: 1)-------------------------------------------------------------------se.exec_start : 269493519.475163 #最近被调度到开始执行时间,nsse.原创 2021-11-01 18:33:47 · 173 阅读 · 0 评论 -
linux开启PREEMPT_RT
PREEMPT_RT的wiki参考preempt_rt分支的wiki主页如何开启linux的PREEMPT_RT?发现两种方法能调出linux的Fully Preemptible Kernel (Real-Time)选项linux-5.10.59内核为例源码,linux-5.10.59.tar.xzpatch,patch-5.10.59-rt52.patch方法1:不打rt补丁在我的环境中,make menuconfig发现在general setup中找不到PREEMPT_RT选项,原原创 2021-09-13 16:30:57 · 2703 阅读 · 0 评论 -
细说CFS与MuQSS以及load-balance
总览进程调度全局,抽丝剥茧,梳理框架为主,方便快速分析原创 2021-09-10 14:07:54 · 270 阅读 · 0 评论 -
MuQSS调度器之跳表分析(二)
MuQSS的数据结构主要分析下MuQSS中相比于Linux主线中的数据结构变化task_structMuQSS中,每个进程都增加了记录时间片的字段time_slice以及deadline字段struct task_struct(){ [...省略部分代码]#ifdef CONFIG_SCHED_MUQSS int time_slice; /*后面会给进程分配一个时间片,根据优先级分*/ u64 deadline; /*增加deadline*/ skiplist_node node原创 2021-08-02 09:18:23 · 488 阅读 · 0 评论 -
自定义调度器--负载均衡之概念篇(一)
cpu topology参考文章:参考文章基本概念NUMANon-uniform memory access (NUMA) is a computer memory design used in multiprocessing, where the memory access time depends on the memory location relative to the processor. Under NUMA, a processor can access its own local m原创 2021-07-23 16:32:06 · 320 阅读 · 0 评论 -
MuQSS调度器之设计文档(一)
MuQSS调度器之设计文档准备分析Multiple queue skiplist scheduler调度器的实现。此篇是第一篇。本文翻译自sched-MuQSS.txt文档。很多还没搞懂,需要去分析下代码。涉及很多操作系统基础知识,无奈学过确忘得差不多,最好根据代码在一起分析温习下操作系统架构知识。MuQSS作者ck的博客地址MuQSS-多队列跳表调度器MuQSS是由原先的BFS调度器通过每个cpu拥有一个8级的跳表队列的变化衍生而来,且具有更细粒度的锁,方便扩展。目标MuQSS调度器的设计原创 2021-07-13 18:50:00 · 726 阅读 · 0 评论 -
smp=1情况下一句printk+回车就使linux内核卡死
以下测试也就系统运行起来跑了一会,大概几分钟,没有长时间等着看结果。linux-5.9.10内核指定smp=1,qemu启动,启动参数如下,主要是指定了smp=1#!/bin/shpara=""if [ -n "$1" ]; then para="-S -gdb tcp::$1"fi/ImageStore/ruguang/src/qemu-5.1.0/build/x86_64-softmmu/qemu-system-x86_64 \ -kernel /ImageStore/r原创 2021-04-22 20:30:25 · 549 阅读 · 0 评论 -
Linux-5.9.10内核调度器分析(一)
Linux的调度分析一些问题早期Linux内核调度器O(1)和O(N)是如何工作?进程priority和nice值和权重weight之间的关系?CFS中vruntime如何计算并何时更新?简述CFS工作机制CFS中min_vruntime有何作用?CFS对新建进程和刚唤醒的进程如何处理?如何计算普通进程的平均负载?一、就绪队列内核为每个CPU创建一个进程就绪队列,该队列上的进程均有该CPU执行。per-cpu变量在每个CPU上都有一个副本,对它的访问几乎不需要锁,因为每个CPU都在自己原创 2021-03-11 16:04:46 · 1675 阅读 · 0 评论