自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 ebpf: CO-RE, BTF, and Libbpf(一)

BTFBTF 是一种用于表达数据结构布局和函数签名的格式。在 CO-RE 中,它用于确定编译时和运行时所使用的数据结构之间的差异。同时它也被像 bpftool 这样的工具用来输出供人类可读的数据结构。Linux kernel 从 5.4 版本开始支持 BTF。内核头文件Linux kernel 的源码中包含了许多用于描述数据结构的头文件,这些头文件在不同内核版本间会有变化。

2025-04-07 21:49:55 374

原创 早期内存分配器 -- memblock

MEMBLOCK_NONE = 0x0, /* 无特殊要求 */MEMBLOCK_HOTPLUG = 0x1, /* 可热插拔的内存区域,后续可能会被移除 */MEMBLOCK_MIRROR = 0x2, /* 镜像区域 */MEMBLOCK_NOMAP = 0x4, /* 不添加到内存直接映射区域,将其视为reserved mem */MEMBLOCK_DRIVER_MANAGED = 0x8, /* 始终由驱动来管理的,不会被视为是系统RAM */

2025-03-24 22:34:42 751

原创 CMA详解

CMA(Contiguous Memory Allocator),译为连续内存分配器,旨在满足需要分配连续物理内存的需求,如camera, 视频编解码等。CMA出现之前,kmalloc可以满足常规的连续物理内存分配请求,但系统运行时间长了必然会导致内存碎片化,此时再想申请大块连续的物理内存就难上加难了。所以为了满足此类需求,我们需要预留出来一块内存,早期可以使用ioremap来映射一段私有内存,供后续使用。但缺陷在于当设备暂时不使用时,这段内存其他设备仍然无法使用,他不会将其还给操作系统!

2025-03-20 22:21:51 369

原创 Kmalloc详解

用于在kernel中为object申请小于一页的内存。object就是经常会用到的一些结构体,如task_struct。提前将内存分割成不同大小的块,用于一些常用的内存请求,尽可能避免了外部内存碎片,要知道从伙伴系统申请内存至少都要一页,就是4kb,这对于一些可能只需要几字节的需求来说太大了!具体可以去看下slab和伙伴系统的原理,这里不做详述。kmalloc是一个总的kernel内存申请的调用接口,根据申请内存的大小来判断是从伙伴系统申请还是从slab分配器申请。大于2。

2025-03-10 22:19:54 1028

原创 make menuconfig中找不到需要的config?

在编译sched_ext时报错如下:libbpf: failed to find ‘.BTF’ ELF section in /home/rinux/linux-6.12.10/vmlinuxError: failed to load BTF from /home/rinux/linux-6.12.10/vmlinux: No data available查询之后发现是没有配置CONFIG_DEBUG_INFO_BTF,但是在menuconfig中对应路径下找不到该配置其实是因为Depends o

2025-02-24 21:57:22 167

原创 Deadline调度器

对于单核系统,只要所有任务的利用率总和小于1,就可以保证所有任务都能满足其deadline的要求。扩展到多核系统上如何呢?参照单核系统的公式,在M核系统上是否利用率总和小于M就可以呢?直观上看似乎可以满足需求,有一个核心运行大任务,其余任务在其他核心上运行即可,时间非常充裕。

2025-02-22 18:06:50 888

原创 Linux Deadline调度器介绍

deadline调度器主要使用三个参数:runtime(运行时间)、period(周期)和deadline(截止时间)。算法确保任务可以在period内获得runtime的运行时间,且可以在deadline之前执行完毕。每次任务唤醒时,先计算一个deadline,然后调度器会选择具有最早deadline的任务去运行。第一个很好理解,当前的运行时间已经大于deadline了,自然要更新下一次deadline了。

2025-02-16 19:35:26 473

原创 EEVDF代码详解(一)

EEVDF是由Peter Zijlstra提出并在kernel-6.6中合入主线的调度算法,已经替代CFS成为Linux kernel中普通进程的默认调度器。基本介绍可参考,本文针对EEVDF中的一些关键代码进行讲解。

2025-02-15 18:57:20 1406

原创 如何高效搜索? -- 搜索引擎的奇技淫巧

可以搜索指定网站的内容,如平时搜索一些kernel中相关patch的讨论就可以用到:EEVDF site:lkml.org可以精准搜索某个句子或词组,例如:“Earliest Eligible Virtual Deadline First” site:lkml.org搜索出来的内容会确保带有完整的Earliest Eligible Virtual Deadline First可以确保搜索结果为某个文件类型,在搜一下文档资料时很有用,例如:eevdf filetype:pdf则搜索结果只会是包含

2025-02-15 10:43:46 214

原创 CFS的完美进化版 -- EEVDF调度器简介

EEVDF(Earliest Eligible Virtual Deadline First),翻译为最早合格的虚拟截止日期优先。CFS调度算法根据其原理也可以解释为“最小虚拟时间优先”,因为其核心调度逻辑就是挑选vruntime最小的进程。而EEVDF现在将最小虚拟时间改为了最早虚拟截止日期,相同点就是都是用虚拟时间判断的,可以推断还是通过weight来对物理时间进行加权;不同之处就是用截至日期代替了之前的运行时间,截至日期从字面意思就可以判断其更强调调度延迟。

2025-02-14 22:32:05 644

原创 详解CFS调度(四)—— PELT

PELT(Per-entity load tracking),实现了对每个调度实体(也就是每个task或task group)进行负载追踪。在此之前,是通过跟踪每个cfs_rq来进行负载的计算以及进行评估系统loading、进程调度、负载均衡等一系列决策的。如何定义负载呢?我们知道如果cpu有一半时间在运行程序,另一半时间空闲,那cpu利用率就是50%,如果一直在运行,那利用率就是100%,这种情况下cpu刚好处于满载状态运行。如果cpu满载的情况下,仍有一些程序无法运行,处于runnable状态呢?

2025-02-13 22:22:59 855

原创 进程优先级:NICE值的设定

理想状态下,当系统中有多个程序在运行时,我们希望他们是同时运行的,共享cpu时间,按需分配cpu算力。而实际情况是:一个cpu同一时间只能运行一个程序,那想要模拟理想状态,就只能每个程序运行一小段时间,轮流运行,只要切换足够快,用户无法感知,也就实现了用户视角下的并行。但任务对用户来说并不一视同仁,有轻重缓急之分。用户希望一些关键的程序可以有很好的响应度,而用户不关心的程序可以运行较短时间。我们引入进程优先级的概念来解决这个问题。

2025-02-12 22:36:15 998

原创 详解CFS(三)—— 组调度

那如果A用户启动了9个task,而B用户只启动了一个task,那A用户将占用cpu 90%的资源,这与我们预期相去甚远。cfs_rq是他的runqueue,保存他所掌管的所有task,在多核系统中,一个group的多个task可能运行在不同的cpu中,所以task group在每个cpu上都会有一个se和cfs_rq。task group在当前cpu上的ge的权重是由当前cpu上group runqueue中所有task的总权重占该task group在所有cpu上task总权重的百分比决定的,即。

2025-02-11 21:53:37 1032

原创 详解CFS调度(二)

上篇概述了CFS的原理,本篇结合代码看一下CFS的具体实现。1. 内核中有哪些类型的进程?进程优先级如何表示?2. vruntime如何更新?3. vruntime什么时候更新?4. 调度器如何挑选下一个要执行的任务?

2025-02-09 21:14:13 725

原创 详解CFS调度(一)

CFS(Completely Fair Scheduler)即完全公平调度算法,旨在实现理想状态下的多任务cpu

2025-02-08 20:53:49 679 1

ARM Energy-Aware Scheduling (EAS)技术概述与集成指南 - 架构特性及其实现详解

内容概要:本文档深入介绍ARM Energy-Aware Scheduling(EAS)的相关概念和技术架构。它详细讲述了EAS如何通过对任务放置进行优化来提升能量利用效率。EAS通过构建一个平台通用的能量消耗模型指导调度决策,特别适合用于big.LITTLE系统。此外还提供了对EAS各版本变化、具体实现机制如容量感知、能量感知等细节解释以及相关调试工具、验证测试的说明。文档面向开发者群体阐述了从理论到应用的一系列关键点并涵盖了用户空间整合所需注意事项和支持的新电源管理提示。EAS能够显著提高设备在低中度负载下能源利用率,确保高性能同时实现节能。 适合人群:具备ARM架构和Linux内核基本认知的软件工程师,尤其是那些参与移动端产品调优和性能增强工作的专业人员。 使用场景及目标:适用于正在为基于ARM的大规模小异质架构SoC平台开发产品的工程团队,在此类平台上引入智能的任务调度机制有助于降低能耗并改善用户体验;同时对于想要深入了解Linux内核调度器行为的研究人员也很有价值。 其他说明:文档包含了丰富的实例案例研究和代码片段辅助理解,并推荐了若干第三方分析工具以支持进一步的学习探索。由于EAS的发展快速迭代,因此文中提到的具体命令路径可能会随着新发布的版本而有所更改,请注意查阅官方最新资料以获得最准确的操作指导。

2025-02-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除