![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux 内核相关学习笔记
gao-cm
https://gaocm.github.io
展开
-
Linux内核链表的一些注解!
为了减少重复代码的数量,内核开发者建立了一套标准双向循环链表的实现。这套实现并没有实现任何的锁方案,所以如果有对链表的并发操作,需要自己实现一个锁方案。该链表文件实现在内核源码树下include/linux/list.h一: 链表数据结构的定义 struct list_head { struct list_head *next, *prev;}; list_h转载 2016-11-18 15:54:36 · 520 阅读 · 0 评论 -
块设备层request plug/unplug机制
一、基本原理Linux块设备层使用了plug/unplug(蓄流/泄流)的机制来提升IO吞吐量。基本原理为:当IO请求提交时,不知直接提交给底层驱动,而是先将其放入一个队列中(相当于水池),待一定时机或周期后再将该队列中的请求统一下发。将请求放入队列的过程即plug(蓄流)过程,统一下发请求的过程即为unplug(泄流)过程。每个请求在队列中等待的时间不会太长,通常在ms级别。如此设计,可以增加I...转载 2016-11-18 19:13:37 · 3126 阅读 · 0 评论 -
ROW调度算法翻译
在移动设备中,用户体验的优化性高于一切,因此,我们希望赋予读请求更高的处理权限。ROW的主要调度策略是:在不导致写请求更多饥饿的情况下赋予读请求更高的权限。ROW调度策略中,请求根据其权限将被放入不同的权限队列中。每个队列通过轮询的方式被调度,调度过程中每个队列被赋予一定的调度时间片。每个请求队列的调度片大小是根据该队列的权限所确定的。相比于写请求队列,在同一个调度周期(即一次轮询)内,读请求队列翻译 2016-11-19 19:31:40 · 1227 阅读 · 0 评论 -
Linux Block Layer块设备层基于MultiQueue的部分源码分析
本文主要分析基于MultiQueue的Linux Block Layer层部分源码内容!!!为帮助理解,提供了一份整体流程图如下(内容太大模糊了),细致的visio以及pdf版本可在本人的下载资源中下载,地址:http://download.csdn.net/detail/g382112762/9691677: 当要写一个page页到底层设备时,需要通过submit_bh进行提交。该函数...原创 2018-03-19 00:52:17 · 4585 阅读 · 1 评论 -
Linux 块设备层——CFQ调度策略(0)
I/O请求进入Linux块设备层过程中主要包括几个过程:Plug/Unplug 队列Elevator 系统队列设备队列其中:Plug/Unplug队列主要目的是为了提高IO吞吐量。通过plug(续流)/unplug(泄流)的方式使得IO能够在plug队列中进行提前合并。更为具体内容可参考:点击打开链接Elevator可视为一个容器,其中提供了多种调度策略,例如NOOP, Deadline,CFQ等...原创 2018-04-20 15:52:47 · 3299 阅读 · 0 评论