• <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>
  • RCU(2)- 使用方法

    作者:沙漠之狐 发布于:2019-5-24 19:36 分类:内核同步机制

    本文介绍RCU的使用方法。

    阅读全文>>

    标签: 无锁编程

    评论(0) 浏览(2243)

    RCU(1)- 概述

    作者:沙漠之狐 发布于:2019-5-24 19:30 分类:内核同步机制

    本文介绍RCU。

    阅读全文>>

    标签: 无锁编程

    评论(0) 浏览(2072)

    Linux内核的自旋锁

    作者:沙漠之狐 发布于:2019-5-17 19:11 分类:内核同步机制

    自旋锁用于处理器之间的互斥,适合保护很短的临界区,并且不允许在临界区睡眠。申请自旋锁的时候,如果自旋锁被其他处理器占有,本处理器自旋等待(也称为忙等待)。

    进程、软中断和硬中断都可以使用自旋锁。

    自旋锁的实现经历了3个阶段:

    (1)     最早的自旋锁是无序竞争的,不保证先申请的进程先获得锁。

    (2)     2个阶段是入场券自旋锁,进程按照申请锁的顺序排队,先申请的进程先获得锁。

    (3)     3个阶段是MCS自旋锁。入场券自旋锁存在?#38405;?#38382;题?#26680;?#26377;申请锁的处理器在同一个变?#21487;?#33258;旋等待,缓存同步?#30446;?#38144;大,不适合处理器很多的系?#22330;?span>MCS自旋锁的策?#20801;?#20026;每个处理器创建一个变量副本,每个处理器在自己的本地变?#21487;?#33258;旋等待,解决了?#38405;?#38382;题。

    阅读全文>>

    标签: Linux 自旋锁

    评论(4) 浏览(2897)

    ?#31243;窩ache Memory

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

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

    阅读全文>>

    评论(19) 浏览(4831)

    内存一致?#38405;?#22411;

    作者:passerby 发布于:2019-3-24 14:22 分类:内存管理

    早期的CPU是通过提高主频来提升CPU的?#38405;埽?#20294;是随着频率“红利”越来越困难的情况下,厂商开始用多核来提高CPU的计算能力。多核是指一个CPU里有多个核?#27169;?#22312;同一时间一个CPU能够同时运行多个线程,通过这样提高CPU的并发能力。

     内存一致?#38405;?#22411;(memory consistency model)就是用来描述多线程对共享存储器的访问行为,在不同的内存一致?#38405;?#22411;里,多线程对共享存储器的访问行为有?#27973;?#22823;的差别。这些差别会?#29616;?#24433;响程序的执行逻辑,甚至会造成软件逻辑问题。在后面的介绍中,我们将分析不同的一致?#38405;?#22411;里,多线程的内存访问乱序问题。

    阅读全文>>

    标签: 内存一致?#38405;?#22411;

    评论(7) 浏览(3800)

    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()是不?#19988;?#23450;会有问题?

    阅读全文>>

    标签: copy_to_user

    评论(15) 浏览(5869)

    编译乱序(Compiler Reordering)

    作者:smcdef 发布于:2019-1-23 22:59 分类:内核同步机制

    编译乱序(Compiler Reordering)

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

    阅读全文>>

    标签: barrier

    评论(13) 浏览(3854)

    CFS调度器(6)-总结

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

    CFS调度器-总结

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


    阅读全文>>

    标签: CFS

    评论(2) 浏览(3333)

    CFS调度器(5)-带宽控制

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

    前言

    什么是带宽控制?#32771;?#32780;言之就是控制一个用户组在给定周期时间内可以消耗CPU的时间,如果在给定的周期内消耗CPU时间超额,就限制该用户组内任务调度,直到下一个周期。限制某个进程的最大CPU使用?#36866;?#21542;真的有必要呢?如果一个系?#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

    评论(8) 浏览(4037)

    CFS调度器(4)-PELT(per entity load tracking)

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

    为什么需要PELT?

    为了让调度器更加的聪明,我们总是希望系统满足最大吞吐?#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) 浏览(4636)

    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>
  • 北京pk10冷热统计 北京单场官网 2元七星彩走势图 十一夺金任五遗漏数据 福建36选7走势图大星彩 6场半全场胜负玩法介绍 七乐彩走势图综合版 nba让分胜负3串1信心单 广东彩票下载 山西十一选五 9188七星彩走势图 网球场 3d试机号历史开奖对应码 海南七星彩投注网 官网重庆快3开奖结果