自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux CMA简介及使用案例

1. 背景在我们使用ARM等嵌入式Linux系统的时候,一个头疼的问题是GPU,Camera,HDMI等都需要预留大量连续内存,这部分内存平时不用,但是一般的做法又必须先预留着。CMA(Contiguous Memory Allocator)连续内存分配,是一种用于申请大量的,并且物理上连续的内存块的方法,是 Linux Kernel 内存管理系统的扩展,目的在于解决驱动设备需要预留大量连续内存导致运行内存紧张的问题。通过这套机制,我们可以做到不预留内存,这些内存平时是可用的,只有当需要的时候才被分配给C

2020-08-21 17:06:55 2316

原创 CFS对vruntime的迭代更新

cfs调度器对vruntime的迭代更新是调度器实现公平调度策略的核心机制,下面我们来分析vruntime的迭代更新机制。1. 调度实体描述vruntime是调度实体的成员,所以我们先明确调度实体的相关描述:(1)load用以追踪进程组和进程的权重信息,进而影响vruntime的增加速度。(2)虚拟运行时间,用于cfs决策选择哪一个进程作为即将要运行的进程。(3)当前调度实体隶属于的队列。(4)进程组的就绪队列,非空表示进程组,NULL表示进程。2. 调度实体vrntime的设置2.1 v

2020-08-17 19:54:30 573

原创 InteractiveGovernor调频策略

本文基于eval_target_freq分析InteractiveGovernor如何根据cpu负载变化来实现调频策略。1. InteractiveGovernor的运转和原理框图1.1 InteractiveGovernor的运作框图(1)linux进程管理和调度框架会在合适的时机调用irq_work_queue去enqueue governor的irq_work,这个irq_work会计算是否需要变频,如果需要变频,那么会唤醒实时进程speedchange_task进行变频。(2)speedc

2020-08-14 20:00:32 574

原创 CFS对linux周期性调度的实现

当系统软件调用schedule放弃cpu的时候会发生进程切换,如果某一cpu消耗性进程长时间不调用schedule,我们如何推进调度器的运行来保障系统性能呢?这就是本文要分析的cfs对linux周期性调度的支持。CFS调度器并不会显示地为进程分配对应的时间片,相应地CFS用周期性调度实现进程的及时切换:在SysTick的中断函数中通过一层层函数调用最终到scheduler_tick函数,周期性地检查当前进程是否耗尽了自己应该分得的一个调度周期里面对应的时间片,并以此为依据决策是否要设置抢占标志,同时设计r

2020-08-14 17:20:42 785

原创 CFS进程组的cpu带宽限制

前文我们分析了实时进程组的带宽限制,本文将顺着前文的思路继续分析cfs进程组的带宽限制,由此进一步体会linux进程调度设计的优雅细节。1. 数据结构描述1.1 struct task_group这是描述进程组的数据结构,我们现在只列出带宽限制的相关成员:(1)当前进程组在各CPU上的cfs调度实体描述,数组长度是CPU的颗数。(2)当前进程组在各CPU上用于组织自己内部的就绪cfs调度实体的红黑树,数组长度也是CPU颗数。(3)当前CPU的权重,用于调度实体之间按权重比例分配CPU时间。

2020-08-13 20:01:20 1119

原创 RT进程组的cpu带宽限制

1.背景由于实时任务的优先级高于普通任务,因而为了防止cpu消耗型的实时任务一直占用cpu引发其他任务"饥饿"的情况发生,内核采用了带宽限制手段来抑制实时任务的运行时间。系统中将各个任务按层级组织成一个个任务组,组内的所有任务视为一个整体挂在一个运行队列上,而带宽限制的单位也是针对一个组来进行的。在任务调度中带宽限制就是指一定周期内一个队列上任务可运行的最大时间,内核中使用xxx_bandwidth结构来限制任务的运行时间。针对实时任务这个结构就是:(1)实时任务CPU使用率的检测周期(2)Rt_

2020-08-10 14:45:11 1296

原创 一种使用union读取寄存器的方法

在某些场景下我们需要读取系统相关寄存器的值,我们往往需要读取出来之后去操作相应的bit得到我们需要的信息。这里可以使用union来直接获取你需要的信息。直接看code实现:不失一般性,这里假设某一32位寄存器bit[0-15]是cmd信息,bit[16-24]是size信息,bit[25-31]是sync信息。我们可以根据这些信息自定义RegStat_t结构,成员可以根据具体需求按需实现。然后...

2020-08-03 14:48:49 527

原创 Linux kernelspace同步控制方案

Linux内核编程中必须解决的一个问题是多进程对共享资源的并发访问引发的竞态。解决竞态问题的途径是保证对共享资源的互斥访问。Linux内核可采用的互斥途径有中断屏蔽、原子操作、自旋锁、互斥体、信号量等。1.自旋锁1.1普通自旋锁自旋锁一般这样被使用:spinlock_t lock;//定义一个自旋锁spin_lock_init(&lock);//初始化自旋锁spin_lock(...

2020-07-31 18:53:56 269

原创 Linux电源管理综述

1. Linux电源管理全局架构Linux电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对系统待机的支持和每个设备的运行时电源管理,可以说它和系统中的每个设备驱动都息息相关,其全局架构如下:(1)CPUFreq:CPU运行时根据系统负载进行动态电压和频率的变换。(2)CPUIdle:CPU在系统空闲时根据空闲的情况进行低功耗模式的切换。(3)CPUH...

2020-06-19 17:07:40 457

原创 linux等待队列使用案例

工作队列实现阻塞IOstruct test_dev{struct cdev cdev;unsigned int current_len;unsigned char mem[SIZE];struct mutex mutex;wait_queue_head_t r_wait;wait_queue_head_t w_wait;};工作队列实现线程的挂起...

2019-12-18 09:06:57 487

原创 bfq如何优先服务新产生的优先级高的task

1.背景

2019-12-16 19:35:21 217

空空如也

空空如也

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

TA关注的人

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