RCU(2)- 使用方法

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

本文介绍RCU的使用方法。

阅读全文>>

标签: 无锁编程

评论(0) 浏览(2873)

RCU(1)- 概述

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

本文介绍RCU。

阅读全文>>

标签: 无锁编程

评论(0) 浏览(2594)

Linux内核的自旋锁

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

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

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

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

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

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

(3)     3个阶段是MCS自旋锁。入场券自旋锁存在性能问题:所有申请锁的处理器在同一个变量上自旋等待,缓存同步的开销大,不适合处理器很多的系统。MCS自旋锁的策略是为每个处理器创建一个变量副本,每个处理器在自己的本地变量上自旋等待,解决了性能问题。

阅读全文>>

标签: Linux 自旋锁

评论(9) 浏览(3634)

编译乱序(Compiler Reordering)

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

编译乱序(Compiler Reordering)

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

阅读全文>>

标签: barrier

评论(13) 浏览(4179)

Linux中常见同步机制设计原理

作者:smcdef 发布于:2018-6-9 16:19 分类:内核同步机制

引言

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

阅读全文>>

标签: spin lock mutex rw_lock

评论(23) 浏览(10020)

Perf book 9.3章节翻译(下)

作者:linuxer 发布于:2016-2-26 19:36 分类:内核同步机制

本文主要是对perfbook 9.3章节的翻译的下半部分,督促自己学习,也顺便分享给大家。

本文的英文原文来自perfbook-1c.2015.01.31a.pdf ,为了读者方便,我也嵌入到了文档中,任何问题,欢迎探讨。

阅读全文>>

标签: RCU perfbook

评论(1) 浏览(4089)

Perf book 9.3章节翻译(上)

作者:linuxer 发布于:2016-2-18 19:07 分类:内核同步机制

本文主要是对perfbook 9.3章节的翻译,督促自己学习,也顺便分享给大家。

本文的英文原文来自perfbook-1c.2015.01.31a.pdf ,为了读者方便,我也嵌入到了文档中,任何问题,欢迎探讨。

阅读全文>>

标签: RCU perfbook

评论(6) 浏览(5217)

Linux2.6.23 :sleepable RCU的实现

作者:linuxer 发布于:2016-2-4 18:38 分类:内核同步机制

由于曾经在Linux2.6.23上工作了多年,我对这个版本还是非常有感情的(抛开感情因素,本来应该选择longterm的2.6.32版本来分析 的,^_^),本文主要就是描述Linux2.6.23内核版本中对RCU有哪些修正。所谓修正主要包括两个部分,一部分是bug fixed,一部分是新增的特性。

阅读全文>>

标签: SRCU

评论(0) 浏览(4540)

Linux2.6.11版本:classic RCU的实现

作者:linuxer 发布于:2016-1-27 18:31 分类:内核同步机制

无论你愿意或者不愿意,linux kernel的版本总是不断的向前推进,做为一个热衷于专研内核的工程师,最大的痛苦莫过于此:当你熟悉了一个版本的内核之后,内核已经推进到一个新的版 本,你曾经熟悉的内容可能会变得陌生(这里主要说的是该模块的内部实现,实际上,内核中的每一个子系统都是会尽量保持接口API的不变)。怎么应对这种变 化呢?一方面,具体的实现可能千差万别,但是基本的概念是一样的,无论哪一个版本的内核,总是能够理解一个内核子系统的基本概念和运作机理。另外一方面, 不同版本之间的实现不同往往是有原因的,新版本中具体实现的不同往往是针对旧版本的问题而改进的,如果你能够理清不同版本之间的差异以及背后的原因,那么 你其实也在不断的加深对计算机系统的理解(不断的迭代是一个不错的学习linux内核的方法)。

因此,在进入具体的Linux2.6.11版本内核RCU实现之前,我们首先描述why,也就是说为何修改RCU算法实现?旧内核有哪里不足,新的内核优点是什么?随后需要描述的是如何改进,最后,我们描述的是Linux2.6.11版本内核RCU模块的具体实现。

阅读全文>>

标签: Read-Copy-Update

评论(3) 浏览(4397)

Linux 2.5.43版本的RCU实现(废弃)

作者:linuxer 发布于:2016-1-19 12:13 分类:内核同步机制

RCU的工作原理虽然简单,但是实现产品级别的RCU同步机制并不是一个简单的事情,看看目前kernel中庞大的RCU数据结构,这让我望而却 步。蜗窝科技在撰写其他文档的时候,往往喜欢使用最新的内核,本文和其他文章不一样,本文选择了第一个引入RCU的内核版本,即2.5.43。

本文主要介绍了linux2.5.43版本上的RCU实现。

阅读全文>>

标签: RCU

评论(4) 浏览(4248)

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