per-entity load tracking

作者:linuxer 发布于:2018-8-18 10:27 分类:进程管理

本文分三个部分描述了3.8内核引入的PELT(per-entity load tracking)机制。第一章主要描述了PELT比per-runqueue load tracking的好处在哪里,这也是引入PELT的原因。第二章描述了具体PELT的算法,有兴趣的同学可以自行根据代码进行分析。第三章主要给出几个PELT的应用场景,在这些场景中,其他的内核子系统可以通过PELT进行更精准的控制。

本文是对https://lwn.net/Articles/531853/的翻译,有兴趣的同学可以参考原文。

阅读全文>>

标签: PELT per-entity load tracking

评论(0) 浏览(742)

Deadline调度器之(二):细节和使用方法

作者:linuxer 发布于:2018-2-22 18:23 分类:进程管理

Linux内核的DL调度器是一个全局EDF调度器,它主要针对有deadline限制的sporadic任务。注意:这些术语已经在本系列文章的第一部分中说明了,这里不再赘述。在这本文中,我们将一起来看看Linux DL调度器的细节以及如何使用它。另外,本文对应的英文原文是https://lwn.net/Articles/743946/,感谢lwn和Daniel Bristot de Oliveira的分享。

阅读全文>>

标签: scheduler Deadline

评论(0) 浏览(2258)

deadline调度器之(一):原理

作者:linuxer 发布于:2018-1-31 19:20 分类:进程管理

    关于deadline调度器的文档有两篇,本篇简单介绍了实时调度及其背后的一些理论。另外一篇将专门讨论Linux系统中的Deadline调度器。另外,本文主要的框架和思想来自Deadline scheduling part 1 — overview and theory,但经过作者的翻译、整理和演绎。

阅读全文>>

标签: deadline调度器

评论(0) 浏览(3012)

O(n)、O(1)和CFS调度器

作者:linuxer 发布于:2018-1-8 19:19 分类:进程管理

随着内核版本的演进,其源代码的膨胀速度也在递增,这让Linux的学习曲线变得越来越陡峭了。这对初识内核的同学而言当然不是什么好事情,满腔热情很容易被当头浇灭。我有一个循序渐进的方法,那就是先不要看最新的内核,首先找到一个古老版本的内核(一般都会比较简单),将其吃透,然后一点点的迭代,理解每个版本变更背后的缘由和目的,最终推进到最新内核版本。

本文就是从2.4时代的任务调度器开始,详细描述其实现并慢慢向前递进。当然,为了更好的理解Linux调度器设计和实现,我们在第二章给出了一些通用的概念。之后,我们会在第四章讲述O(1)调度器如何改进并提升调度器性能。真正有划时代意义的是CFS调度器,在2.6.23版本的内核中并入主线。它的设计思想是那么的眩目,即便是目前最新的内核中,完全公平的设计思想仍然没有太大变化,这些我们会在第六章描述。第五章是关于公平调度思想的引入,通过这一章可以了解Con Kolivas的RSDL调度器,它是开启公平调度的先锋,通过这一章的铺垫,我们可以更顺畅的理解CFS。

阅读全文>>

标签: O(n) O(1) CFS scheduler

评论(5) 浏览(3748)

进程切换分析(3):同步处理

作者:linuxer 发布于:2017-12-11 17:59 分类:进程管理

本文主要描述了主调度器(schedule函数)中的同步处理。

阅读全文>>

标签: schedule

评论(4) 浏览(2638)

中断上下文中调度会怎样?

作者:linuxer 发布于:2017-3-20 19:08 分类:进程管理

每一个Linux驱动工程师都知道这样一个准则:在中断上下文中不能睡眠。但是为什么interrupt context中不能调用导致睡眠的kernel API呢?如果驱动这么做会导致什么样的后果呢?这就是本文探讨的主题。为了理解这个主题,我们设计了一些非常简单的驱动程序和用户空间的程序,实际做实验观察实验效果,最后给出了结果和分析。

阅读全文>>

标签: 中断 调度

评论(30) 浏览(6474)

Linux调度器:进程优先级

作者:linuxer 发布于:2017-3-14 18:46 分类:进程管理

本文主要描述的是进程优先级这个概念。从用户空间来看,进程优先级就是nice value和scheduling priority,对应到内核,有静态优先级、realtime优先级、归一化优先级和动态优先级等概念,我们希望能在第二章将这些相关的概念描述清楚。为了加深理解,在第三章我们给出了几个典型数据流过程的分析。

阅读全文>>

标签: 进程优先级

评论(3) 浏览(5420)

Linux调度器:用户空间接口

作者:linuxer 发布于:2017-3-10 18:50 分类:进程管理

Linux调度器神秘而充满诱惑,每个Linux工程师都想深入其内部一探究竟。不过中国有一句古话叫做“相由心生”,一个模块精巧的内部逻辑(也就是所谓的“心”)其外延就是简洁而优雅的接口(我称之为“相”)。通过外部接口的定义,其实我们也可以收获百分之六七十的该模块的内部信息。因此,本文主要描述Linux调度器开放给用户空间的接口。

阅读全文>>

标签: 调度器 进程管理

评论(0) 浏览(3161)

Linux系统如何标识进程?

作者:linuxer 发布于:2017-2-23 19:10 分类:进程管理

其实两年前,本站已经有了一篇关于进程标识的文档,不过非常的简陋,而且代码是来自2.6内核。随着linux container、pid namespace等概念的引入,进程标识方面已经有了天翻地覆的变化,因此我们需要对这部分的内容进行重新整理。

本文主要分成四个部分来描述进程标识这个主题:在初步介绍了一些入门的各种IDs基础知识后,在第三章我们描述了pid、pid number、pid namespace等基础的概念。第四章重点描述了内核如何将这些基本概念抽象成具体的数据结构,最后我们简单分析了内核关于进程标识的源代码(代码来自linux4.4.6版本)。

阅读全文>>

标签: 进程ID

评论(3) 浏览(3670)

ARM Linux上的系统调用代码分析

作者:linuxer 发布于:2017-2-20 18:54 分类:进程管理

当用户空间的程序调用swi指令发起内核服务请求的时候,实际上程序其实是完成了一次“穿越”,该进程从用户态穿越到了内核态。这个过程有点象周末你在家里看片,突然有些内急,随手按下了pause按键,电影里面的世界嘎然而止了。程序世界亦然,一个swi后,用户空间的代码执行暂停了、stack(用户栈)上的数据,正文段、静态数据区、heap去的数据……一切都停下来了,程序的执行突然就转入另外一个世界,使用的栈变成了内核栈、正在执行的正文段程序变成vector_swi开始的binary code、与之匹配数据区也变化了……

一切是怎么发生的呢?CPU只有一套而已,这里硬件做了哪些动作?软件又搞了什么鬼?穿越到另外的世界当然有趣,但是如何找到回来的路?这一切疑问希望能在这样的一篇文档中讲述清楚。

本文的代码来自4.4.6内核,用ARM处理器为例子描述。

阅读全文>>

标签: ARM 系统调用

评论(2) 浏览(4751)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog