Fork me on GitHub
侧边栏

随笔分类 -  CPU

摘要:TTWU_QUEUE 是 Linux 调度器中的一个 调度特性(sched feature),全称是 Task Wakeup Queue。它决定了在任务唤醒(wake-up)时,是否将任务直接入队到目标 CPU 的运行队列,还是采用更复杂的路径。 作用与背景 当一个任务被唤醒(例如因为 I/O 完成 阅读全文
posted @ 2025-11-30 14:40 yooooooo 阅读(11) 评论(0) 推荐(0)
摘要:前言 Linux是一个通用操作系统的内核,她的目标是星辰大海,上到网络服务器,下至嵌入式设备都能运行良好。做一款好的linux进程调度器是一项非常具有挑战性的任务,因为设计约束太多了: 它必须是公平的 快速响应 系统的throughput要高 功耗要小 3.8版本之前的内核CFS调度器在计算CPU 阅读全文
posted @ 2025-11-15 21:50 yooooooo 阅读(39) 评论(0) 推荐(0)
摘要:前言 我们描述CFS任务负载均衡的系列文章一共三篇,第一篇是框架部分,第二篇描述了task placement和active upmigration两个典型的负载均衡场景,第三篇是负载均衡的情景分析,包括tick balance、nohz idle balance和new idle balance。 阅读全文
posted @ 2025-11-15 13:40 yooooooo 阅读(29) 评论(0) 推荐(0)
摘要:在 Linux 内核中,“misfit task” 是调度器(scheduler)中的一个术语,用来描述任务(task)与 CPU 性能等级不匹配的情况。 这个概念主要出现在 EAS(Energy Aware Scheduling)/schedutil 等现代调度框架中,用于优化性能和功耗平衡。 一 阅读全文
posted @ 2025-11-09 10:53 yooooooo 阅读(9) 评论(0) 推荐(0)
摘要:在 Linux 内核调度器中,sched_prio_to_weight 是一个非常关键的数组,用于把「静态优先级(nice 值)」映射为调度权重(weight)。 调度器(CFS:Completely Fair Scheduler)不是直接比较 nice 值,而是通过权重控制各任务获得的 CPU 时 阅读全文
posted @ 2025-11-02 08:45 yooooooo 阅读(27) 评论(0) 推荐(0)
摘要:前言 我们描述CFS任务负载均衡的系列文章一共三篇,第一篇是框架部分,第二篇描述了task placement的逻辑过程,第三篇是负载均衡的情景分析,包括tick balance、nohz idle balance和new idle balance。之前已经有一篇关于task placement的文 阅读全文
posted @ 2025-11-02 08:35 yooooooo 阅读(26) 评论(0) 推荐(0)
摘要:前言 我们描述CFS任务负载均衡的系列文章一共三篇,第一篇是框架部分,第二篇描述了task placement和active upmigration两个典型的负载均衡场景。本文是第三篇,主要是分析各种负载均衡的触发和具体的均衡逻辑过程。 本文出现的内核代码来自Linux5.10.61,为了减少篇幅, 阅读全文
posted @ 2025-10-28 21:03 yooooooo 阅读(72) 评论(0) 推荐(0)
摘要:一、前言 负载均衡的系列文章共分为三篇,第一篇为框架篇,描述负载均衡的相关原理、场景和框架。本篇作为该系列文章第二篇,主要通过对任务放置场景(task placement)的均衡分布进行分析,加深对内核调度器实现任务均衡分布的理解。 本文基于linux-5.4.24分析,由于涉及较多代码的讲解,建议 阅读全文
posted @ 2025-10-27 16:38 yooooooo 阅读(30) 评论(0) 推荐(0)
摘要:实时内核包含一个保护机制,它允许分配供实时任务使用的带宽。保护机制被称为实时调度程序节流。 实时节流机制的默认值定义实时任务可以使用 95% 的 CPU 时间。其余的 5% 将被视为非实时任务,例如在 SCHED_OTHER 和类似调度策略下运行的任务。务必要注意,如果单个实时任务占据了 95% 的 阅读全文
posted @ 2025-09-16 14:01 yooooooo 阅读(34) 评论(0) 推荐(0)
摘要:原文网址: https://www.kernel.org/doc/html/v6.6/scheduler/sched-stats.html Scheduler Statistics schedstats的第15版移除了部分sched_yield相关的计数器:yld_exp_empty、yld_act 阅读全文
posted @ 2025-08-30 15:16 yooooooo 阅读(26) 评论(0) 推荐(0)
摘要:在当今数字时代,手机已成为人们日常生活中不可或缺,多任务处理和实时响应对于用户体验越来越重要,抢占(preemption)机制在提升系统性能和用户体验方面发挥了至关重要的作用。内核抢占机制使得系统能够有效地管理多任务处理,确保系统对用户操作的快速响应,并在资源紧张的情况下仍能保持稳定和流畅的运行。 阅读全文
posted @ 2025-08-29 15:37 yooooooo 阅读(177) 评论(0) 推荐(1)
摘要:核心机制对比 1. 用户抢占 —— need_resched need_resched 是一个标志位,当当前进程用完时间片或者被唤醒了更高优先级任务,该标志就由 scheduler_tick() 或 try_to_wake_up() 设定(litux.nl, pearsonhighered.com) 阅读全文
posted @ 2025-08-29 10:03 yooooooo 阅读(29) 评论(0) 推荐(0)
摘要:在各种查看CPU使用率的工具中(如top),一般都有us%、sy%、ni%等,us%与sy%含义是比较容易理解的,一个是用户态CPU使用率,一个是内核态CPU使用率。 但ni%就比较晦涩难懂了,它代表被调整过nice值的进程占用的CPU使用率,很难理解对不对,来看看下面的例子。 调整进程nice值# 阅读全文
posted @ 2025-08-24 14:23 yooooooo 阅读(53) 评论(0) 推荐(0)
摘要:其实是指 Linux Scheduler 中 uclamp(Utilization Clamping,利用率限幅)机制中,用来管理和聚合不同任务的 min/max 限制值的“桶(bucket)”技术。下面是详细解析: 桶化(Bucketing)机制概览 什么是桶化? 在早期实现中,内核将用户态请求的 阅读全文
posted @ 2025-08-09 19:27 yooooooo 阅读(59) 评论(0) 推荐(0)
摘要:在 Linux 内核中,sched_entity 是一个非常重要的结构体,它是调度器(scheduler)中的核心概念之一,用于表示调度实体。调度实体是调度器进行任务调度的基本单位,它可以是一个线程(task)、一个进程(process),甚至可以是一个进程组或容器(如 cgroup)。以下是对 s 阅读全文
posted @ 2025-04-05 12:32 yooooooo 阅读(105) 评论(0) 推荐(0)
摘要:在 Linux 内核中,struct sched_avg 是一个用于跟踪进程或调度实体负载情况的数据结构,主要用于完全公平调度器(CFS)的负载均衡和调度决策。以下是 struct sched_avg 的定义及其主要字段的作用: 定义 struct sched_avg { u64 last_upda 阅读全文
posted @ 2025-04-05 12:29 yooooooo 阅读(84) 评论(0) 推荐(0)
摘要:1 前景回顾 1.1 进程调度 内存中保存了对每个进程的唯一描述, 并通过若干结构与其他进程连接起来. 调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换. 1.2 进程的分类 linux把 阅读全文
posted @ 2025-02-23 13:03 yooooooo 阅读(272) 评论(0) 推荐(0)
摘要:RTG(Related Thread Group)是Linux内核调度器中的一个重要特性,主要用于优化关联线程的调度,其主要作用包括以下几个方面: 1. 选核优化 RTG将关联的线程(如主线程和渲染线程)尽量调度到同一个CPU簇上运行。这样做的好处包括: 提升性能:关联线程之间通常存在数据共享,将它 阅读全文
posted @ 2025-01-31 21:31 yooooooo 阅读(474) 评论(0) 推荐(0)
摘要:前言 本文继续整理CPU调度WALT相关内容,主要整理如下内容: WALT是什么? WALT 计算? WALT 计算数据如何使用? 1. WALT是什么? WALT:Windows-Assist Load Tracing的缩写: 从字面意思来看,是以window作为辅助项来跟踪CPU LOAD; 实 阅读全文
posted @ 2025-01-05 16:51 yooooooo 阅读(752) 评论(0) 推荐(0)
摘要:从上一章节大概应该能够理解负载和利用率的区别了,当一个进程正在运行或者即使没有在cpu上运行,而在就绪队列中等待运行,那么他依旧消耗cpu的负载。这是合理的,因为cpu的就绪队列有10个任务等待着运行与5个任务等待运行,明显是10个任务的负载重。而利用率只是关注正在运行的任务而不包含在就绪队列的任务 阅读全文
posted @ 2024-11-25 15:21 yooooooo 阅读(348) 评论(0) 推荐(0)