• <div id="0yoao"><tr id="0yoao"></tr></div>
    <dl id="0yoao"></dl>
  • <sup id="0yoao"></sup>
    <div id="0yoao"><tr id="0yoao"></tr></div>
  • <div id="0yoao"><tr id="0yoao"></tr></div>
  • 浅谈Cache Memory

    作者:smcdef 发布于:2019-5-2 21:14 分类:内存管理

    今天探究的主题是cache。我们围绕几个问题展开。为什么需要cache?如何判断一个数据在cache中是否命中?cache的种类有哪些,区别是什么?

    阅读全文>>

    评论(17) 浏览(2800)

    copy_{to,from}_user()的思考

    作者:smcdef 发布于:2019-1-27 19:03 分类:内存管理

    我?#23884;詂opy_{to,from}_user()接口的使用应该是再熟悉不过吧。基本Linux书籍都会介绍它的作用。毕竟它是kernel space和user space沟通的桥梁。所有的数据交互都应该使用类似这种接口。所以,今天我们一起探究下copy_{to,from}_user()接口的作用。通过本?#30446;?#20197;解答以下问题。

    1. 为什么需要copy_{to,from}_user(),它究竟在背后为我们做了什么?
    2. copy_{to,from}_user()和memcpy()的区别是什么,直接使用memcpy()可以吗?
    3. memcpy()替代copy_{to,from}_user()是不是一定会有问题?

    阅读全文>>

    标签: copy_to_user

    评论(15) 浏览(4800)

    编译乱序(Compiler Reordering)

    作者:smcdef 发布于:2019-1-23 22:59 分类:内核同?#20132;?#21046;

    编译乱序(Compiler Reordering)

    编译器(compiler)的工作就是优化我们的代码以提高?#38405;堋?#36825;包括在不改变程序行为的情况下重新排列指令。因为compiler不知道什么样的代码需要线程安全(thread-safe),所以compiler假设我们的代码都是单线?#35752;?#34892;(single-threaded),并且进行指令重排优化并保证是单线程安全的。因此,当你不需要compiler重新?#21028;?#25351;令的时候,你需要显式告诉compiler,我不需要重排。否则,它可不会听你的。本篇文章中,我们一起探究compiler关于指令重排的优化规则。

    阅读全文>>

    标签: barrier

    评论(8) 浏览(3119)

    CFS调?#32469;鰨?)-总结

    作者:smcdef 发布于:2019-1-1 12:37 分类:进程管理

    CFS调?#32469;?总结

    经过前面一系列的文章描述,我们已经对CFS调?#32469;?#26377;了一定的认识。那么本篇文章就作为一篇总结和思考。我们就回忆一下CFS调?#32469;?#30340;那些事。我们就以问题的形式重新回顾一遍CFS调?#32469;?#35774;计的原理。现在开始,我们问题来了。


    阅读全文>>

    标签: CFS

    评论(2) 浏览(2797)

    CFS调?#32469;鰨?)-带宽控制

    作者:smcdef 发布于:2018-12-22 15:07 分类:进程管理

    前言

    什么是带宽控制?#32771;?#32780;言之就是控制一个用户组在给定周期时间内可以消耗CPU的时间,如果在给定的周期内消耗CPU时间超额,就限制该用户组内任务调度,直到下一个周期。限制某个进程的最大CPU使用率是否真的有必要呢?如果一个系?#25345;?#20165;存在一个进程,限制该进程使用CPU使用率最大50%,当进程使用率达到50%的时候,就限制该进程运行,CPU进入idle状态。看起来好像没有任?#25105;?#20041;。但是,有时候,这正是系统管理员可能想要做的事情。如果这些进程属于仅支?#35835;?#19968;定CPU时间的客户或者需要提供严格资源的情况,则限制进程(或进程组)可能消耗的CPU时间的最大份额是很有必要的。毕竟付多少钱享受多少服务。本文章仅讨论SCHED_NORMAL进程的CPU带宽控制(CPU bandwidth control)。

    注:代码分析基于Linux 4.18.0。

    阅读全文>>

    标签: CFS bandwidth

    评论(7) 浏览(3392)

    CFS调?#32469;鰨?)-PELT(per entity load tracking)

    作者:smcdef 发布于:2018-12-2 15:40 分类:进程管理

    为什么需要PELT?

    为了让调?#32469;?#26356;加的聪明,我们总是希望系统满足最大吞吐?#23458;?#26102;又最大限度的降低功耗。虽然可能有些矛盾,但是现实总是这样。PELT算法是Linux 3.8合入的,那么在此之前,我们存在什么问题才引入PELT算法呢?在Linux 3.8之前,CFS以每个运行队列(runqueue,简称rq)为基础跟踪负载。但是这种方法,我们无法确定当前负载的来源。同?#20445;?#21363;使工作负载相对稳定的情况下,在rq级别跟踪负载,其值?#19981;?#20135;生很大变化。为了解决以?#31995;?#38382;题,PELT算法会跟踪每个调度实体(per-scheduling entity)的负载情况。

    注:代码分析基于Linux 4.18.0。


    阅读全文>>

    标签: PELT

    评论(7) 浏览(3875)

    CFS调?#32469;鰨?)-组调度

    作者:smcdef 发布于:2018-11-10 20:43 分类:进程管理

    前言

    现在的计算机基本都支持多用户登陆。如果一台计算机被两个用户A和B使用。假设用户A运行9个进程,用户B只运行1个进程。按照之前文章对CFS调?#32469;?#30340;讲解,我们认为用户A获得90% CPU时间,用户B只获得10% CPU时间。随着用户A不停的增加运行进程,用户B可使用的CPU时间越来越少。这显然是不公平的。因此,我们引入组调度(Group Scheduling )的概念。我们以用户组作为调度的单位,这样用户A和用户B各获得50% CPU时间。用户A中的每个进程分别获得5.5%(50%/9)CPU时间。而用户B的进程获取50% CPU时间。这也符合我们的预期。本篇文章讲解CFS组调度实现原理。

    注:代码分析基于Linux 4.18.0。使能组调度需要配置CONFIG_CGROUPS和CONFIG_FAIR_GROUP_SCHED。

    阅读全文>>

    评论(10) 浏览(3720)

    CFS调?#32469;鰨?)-源码解析

    作者:smcdef 发布于:2018-10-21 20:55 分类:进程管理

    前言

    经通过上一篇文章《CFS调?#32469;?基本原理》,我们可以了解到CFS调?#32469;?#22522;本工作原理。本篇文章主要集中在Linux CFS调?#32469;?#28304;码解析。

    注?#20309;?#31456;代码分析基于Linux-4.18.0。

    阅读全文>>

    标签: CFS

    评论(16) 浏览(4381)

    CFS调?#32469;鰨?)-基本原理

    作者:smcdef 发布于:2018-10-7 17:36 分类:进程管理

    前言

    首先需要思考的问题是:什么是调?#32469;鰨╯cheduler)?调?#32469;?#30340;作用是什么?调?#32469;?#26159;一个操作系统的核心部分。可以比作是CPU时间的管理员。调?#32469;?#20027;要负责选择某些就绪的进程来执行。不同的调?#32469;?#26681;据不同的方法挑选出最适合运行的进程。目前Linux支持的调?#32469;?#23601;有RT scheduler、Deadline scheduler、CFS scheduler及Idle scheduler?#21462;?#25105;想用一系列文章呈现Linux 调?#32469;?#30340;设计原理。

    注?#20309;?#31456;代码分析基于Linux-4.18.0。

    阅读全文>>

    标签: CFS

    评论(15) 浏览(6413)

    Linux中常见同?#20132;?#21046;设计原理

    作者:smcdef 发布于:2018-6-9 16:19 分类:内核同?#20132;?#21046;

    引言

    今天谈谈linux中常见并发访问的保护机制设计原理。为什么要写这篇文章呢?#31185;?#23454;想帮助自己及读者更深入的了解背后的原理(据可靠消息,锁的实现经常出现在?#36866;曰方凇?#26082;可以考察面试者对锁的原理的理解,又可以考察面试者编程技能)。我们抛开linux中汇编代码。用C语言为大家呈现背后实现的原理。同?#20445;?#25991;章中的代码都没有考虑并发情况(例如某些操作需要原?#26377;裕?#25110;者数据需要保护等)。

    阅读全文>>

    标签: spin lock mutex rw_lock

    评论(20) 浏览(8852)

    Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog
    连码三全中是什么
  • <div id="0yoao"><tr id="0yoao"></tr></div>
    <dl id="0yoao"></dl>
  • <sup id="0yoao"></sup>
    <div id="0yoao"><tr id="0yoao"></tr></div>
  • <div id="0yoao"><tr id="0yoao"></tr></div>
  • <div id="0yoao"><tr id="0yoao"></tr></div>
    <dl id="0yoao"></dl>
  • <sup id="0yoao"></sup>
    <div id="0yoao"><tr id="0yoao"></tr></div>
  • <div id="0yoao"><tr id="0yoao"></tr></div>
  • 福建22选5开奘 河南十一选五走势 3d开机号 英超直播cspn 香港六合彩二中二 江苏福彩网 江苏老快3走势图下载 最新选号法 江西快3近50期 广东26选5 复式10个 福彩3d和值遗漏大星 北京快三走势图基本走势图牛 腾讯分分彩官网 胜平负任九 一肖中特免费公开网站