- 博客(22)
- 收藏
- 关注
原创 Linux CFS任务的负载均衡(5)
本文主要分成三个部分,第一个部分就是本章,简单的描述了本文的结构和阅读前提条件。第二章是对load_balance函数设计的数据结构进行描述。这一章不需要阅读,只是在有需要的时候可以查阅几个主要数据结构的各个成员的具体功能。随后的若干个章节是以load_balance函数为主线,对各个逻辑过程进行逐行分析。
2024-12-25 14:45:44
765
原创 Linux CFS任务的负载均衡(4)
在嵌入式平台上,为了控制功耗,很多硬件模块被设计成可以运行在多种频率下工作(配合对应的电压,形成不同的performance level),这种硬件的驱动模块可以感知到在不同performance level下的能耗。系统中的某些模块可能会希望能感知到硬件能耗从而做出不同的判决。能量模型框架(Energy Model (EM) framework)是一个通用的接口模块,该接口连接了支持不同perf level的驱动模块和系统中的其他想要感知能量消耗的模块。
2024-12-23 20:21:37
731
转载 Linux CFS任务的负载均衡(3)
整个Linux的负载均衡器有下面的几个类型:实际上内核的负载均衡器(本文都是特指CFS任务的)有两种,一种是为繁忙CPU们准备的periodic balancer,用于CFS任务在busy cpu上的均衡。还有一种是为idle cpu们准备的idle balancer,用于把繁忙CPU上的任务均衡到idle cpu上来。idle balancer有两种,一种是nohz idle balancer,另外一种是new idle balancer。
2024-08-28 17:54:22
207
转载 Linux CFS任务的负载均衡(2)
我们假定little cluster中cpu3存在超载的情况,那么无论你将任务放置到哪个CPU上,little cluster总是维持最高频点,对于同个perf domain下拥有最大空余算力的CPU来说,这样预估的energy是不公平的,与EAS的设计相违背,EAS希望能通过放置任务改变cluster的频点来降低功耗。,例如:小核的4个cpu,最大capacity都是512,与之对应的最高频点为1G Hz,那么500M Hz的频点对应的capacity就是256。,即waker所在的CPU。
2024-08-18 18:23:04
147
转载 Linux CFS任务的负载均衡(1)
CPU load是一个很容易和CPU usage混淆的概念。CPU usage是CPU忙闲的比例,例如在一个周期为1000ms的窗口中观察CPU的情况,如果500ms的时间在执行任务,500ms的时间处于idle状态,那么在这个窗口中CPU的usage是50%。CPU usage是一个直观的概念,所见即所得,然而它不能用来对比。例如一个任务在小核300MHz频率下执行1000ms,看到CPU usage是100%,同样的任务,在大核3GHz下的执行50ms,CPU usage是5%。
2024-08-13 16:54:11
261
原创 深入理解Linux 物理内存分配/释放过程(1)
在《深入理解Linux物理内存管理》《Linux 物理内存管理涉及的三大结构体之struct pglist》《Linux 物理内存管理涉及的三大结构体之struct zone》《Linux 物理内存管理涉及的三大结构体之struct page》中,给大家详细介绍了物理内存的三大模型:FLATMEM 平坦内存模型,DISCONTIGMEM 非连续内存模型和SPARSEMEM 稀疏内存模型。物理内存架构:一致性内存访问 UMA 架构和非一致性内存访问 NUMA 架构。
2023-08-05 19:13:00
1319
3
转载 深入理解Linux物理内存管理
本文主要介绍Linux 物理内存管理,从物理内存模型,物理内存架构,物理管理三个角度,一步一步给大家做了系统详细的讲解。
2023-06-01 11:52:16
1209
转载 深入理解Linux虚拟内存管理
类比快递的收货地址和真实地址位置,首先,收货地址是一个虚拟地址,它是人为定义的,而我们的城市,小区,街道是真实存在的,他们的地理位置就是物理地址。然后,我们切回计算机世界,在计算机里面,内存地址是用来定义数据在内存中存储位置的,内存地址也分为虚拟地址和物理地址。同样,这个虚拟地址也是人为定义的,类比我们现实世界的收货地址,而物理地址就是数据在物理内存中真实存储的位置,类比我们的城市,小区,街道的地理位置。说完定义后,现在开始讲一下虚拟内存地址到底长什么样。
2023-05-05 17:46:16
1125
11
原创 Linux 物理内存管理涉及的三大结构体之struct pglist_data
总结一下,本文主要介绍kernel物理内存管理三大结构体里面顶端的结构体typedef struct pglist_data,对其里面的参数做了一一介绍。其中跟zone相关的参数,node物理内存PFN相关的参数,kswapd相关的参数,内存规整相关参数,跟LRU相关的参数和统计node内存信息参数vm_stat,在内核中使用频繁,相对重要。
2023-04-06 16:58:41
1561
原创 Linux 物理内存管理涉及的三大结构体之struct zone
本文主要介绍了内存管理三大结构体中的struct zone结构体。详细介绍了其中的每个参数的含义。其中这些参数:_watermark[],lowmem_reserve[],pageset,lock,vm_stat[],free_area[]和内存规整系列参数是相对重要。在日常中经常能够遇到。如free_area[]是struct zone的核心,也是buddy system的核心结构;vm_stat[]统计了该zone的内存使用情况;内存规整参数在内存规整/压缩中有重要作用。
2023-03-13 15:47:58
2261
原创 Linux 物理内存管理涉及的三大结构体之struct page
本文主要详细的介绍了内存管理中三大结构体的struct page。将struct page里面的每个部分拆分出来,结合代码,对每个部分,每个成员变量尽力做到详细讲解。如果不对之处,请指正。最后想说的是:struct page结构的设计充分体现了内核设计人员为了减少内存占用的所做出的各种努力,且这种努力还在一直在继续。
2022-11-23 17:47:44
3656
1
原创 linux kernel内存管理之/proc/meminfo下参数介绍
介绍了Linux系统了解内存状态的主要接口/proc/meminfo,主要包括:介绍跟该接口相关的函数;介绍该接口下各类型内存参数,涉及各个参数之间的关系;根据该接口总结的内存地图;最后浅述了一下内存黑洞,至于内存黑洞这块目前了解最多的是通过page_owner来监控,对于其他方式如有了解,会进行更新
2022-09-06 15:31:51
11294
原创 Linux kernel内存管理之OOM相关参数
本文首先讲述了OOM相关参数以及对应的代码模块的实现;最后详细讲解了发生OOM时,所调用的out_of_memory函数的代码实现。
2022-07-20 16:51:40
3901
原创 Linux kernel内存管理之overcommit相关参数
主要讲述了linux kernel内存管理中虚拟内存分配时会用到的overcommit相关参数,会通过该参数来判断用户进程的虚拟内存分配是否允许。
2022-06-30 16:37:52
2309
原创 slub allocator工作原理
slub allocator工作原理,包括相应slub数据结构,slub数据结构的联系。描述了slub分配内存原理和slub释放内存原理的流程框图,代码走读了常用的kmalloc和kfree函数。对于slub系统启动阶段的初始化,slub的创建以及slub的销毁在其他文章篇幅中有细讲.........
2022-06-27 11:37:43
1242
原创 SLUB内存管理之slub初始化
在讲slub内存管理涉及的四个函数之前,先从slub内存分配算法的初始化开始。系统启动时,会进行slub内存分配算法的初始化,函数流程是:start_kernel() -> mm_init()->kmem_cache_init()。完成kmem_cache_node、kmem_cache、kmalloc_caches三个slab cache管理结构的初始化,对于内核中其他的slab cache的创建通过kmem_cache_create()函数完成。.........
2022-06-19 15:58:07
590
转载 多图详解CPU Cache Memory
今天探究的主题是cache。我们围绕几个问题展开。为什么需要cache?如何判断一个数据在cache中是否命中?cache的种类有哪些,区别是什么?
2022-06-08 19:25:26
939
原创 SLUB内存管理的4个主要接口函数介绍(4)
本篇主要介绍slab 缓存释放的函数kmem_cache_destroy,核心函数是shutdown_memcg_caches和shutdown_cache,分别释放销毁kmem_cache* s名下所属的memcg对应的children kmem cache和s本身。其中shutdown_cache函数里面涉及释放被kasan隔离延迟释放的obj,释放kmem_cache_cpu管理的缓存区空间和释放node partial上管理的空间。...
2022-06-07 16:43:03
753
原创 SLUB内存管理的4个主要接口函数介绍(2)
slub内存管理的4个主要接口函数如下(参考kernel-4.19代码)://slab缓存的创建struct kmem_cache *kmem_cache_create(const char *name, size_t size, size_t align, unsigned long flags, void (*ctor)(void *));//slab object的分配void *kmem_cache_alloc(struct kmem_cache *cachep, int......
2022-04-19 17:00:31
1618
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人