All Projects → gurugio → book_linuxkernel_blockdrv

gurugio / book_linuxkernel_blockdrv

Licence: GPL-2.0 license
Learn how multi-queue block device in Linux kernel v4.4 works

Programming Languages

CSS
56736 projects

Projects that are alternatives of or similar to book linuxkernel blockdrv

Huawei Wmi
Huawei WMI laptop extras linux driver
Stars: ✭ 120 (+73.91%)
Mutual labels:  driver, linux-kernel
w1-gpio-cl
Command line configured kernel mode 1-wire bus master driver. w1-gpio standard Linux module enhancement/substitution.
Stars: ✭ 17 (-75.36%)
Mutual labels:  driver, linux-kernel
rtw88-usb
rtw88 family usb driver for linux rtl8723du rtl8822bu rtl8821cu rtl8822cu
Stars: ✭ 40 (-42.03%)
Mutual labels:  driver, linux-kernel
Dokany
User mode file system library for windows with FUSE Wrapper
Stars: ✭ 4,055 (+5776.81%)
Mutual labels:  driver, device-driver
Synwall
A zero-configuration (IoT) firewall
Stars: ✭ 219 (+217.39%)
Mutual labels:  driver, linux-kernel
virtblkiosim
Virtual Linux block device driver for simulating and performing I/O.
Stars: ✭ 30 (-56.52%)
Mutual labels:  linux-kernel, device-driver
iomemory-vsl4
Updated Fusion-io iomemory VSL4 Linux (version 4.3.7) driver for recent kernels.
Stars: ✭ 42 (-39.13%)
Mutual labels:  driver, linux-kernel
r-exasol
The EXASOL package for R provides an interface to the EXASOL database.
Stars: ✭ 22 (-68.12%)
Mutual labels:  driver
laravel-db2
laravel-db2 is a simple DB2 service provider for Laravel. It provides DB2 Connection by extending the Illuminate Database component of the laravel framework.
Stars: ✭ 56 (-18.84%)
Mutual labels:  driver
faunadb-csharp
C# driver for FaunaDB
Stars: ✭ 55 (-20.29%)
Mutual labels:  driver
node-drivers
Industrial protocol drivers in node.js
Stars: ✭ 20 (-71.01%)
Mutual labels:  driver
spydriver
🕵️ Lightweight utility to intercept WebDriver and WebElement method calls.
Stars: ✭ 24 (-65.22%)
Mutual labels:  driver
eruption
Realtime RGB LED Driver for Linux
Stars: ✭ 140 (+102.9%)
Mutual labels:  driver
keithley2600
Python driver for Keithley 2600 series instruments.
Stars: ✭ 26 (-62.32%)
Mutual labels:  driver
staubli
ROS-Industrial Staubli support (http://wiki.ros.org/staubli)
Stars: ✭ 15 (-78.26%)
Mutual labels:  driver
linux
Adding support for the Rust language to the Linux kernel.
Stars: ✭ 3,070 (+4349.28%)
Mutual labels:  linux-kernel
neo4j-java-driver-spring-boot-starter
Automatic configuration of Neo4j's Java Driver for Spring Boot applications
Stars: ✭ 33 (-52.17%)
Mutual labels:  driver
tarantool.ex
Tarantool client library for Elixir projects
Stars: ✭ 26 (-62.32%)
Mutual labels:  driver
kernel-memtest
Hybrid memtest running in kernel mode, and userspace.
Stars: ✭ 17 (-75.36%)
Mutual labels:  linux-kernel
dpdk engineer manual
【冲破内核瓶颈,让I/O性能飙升】DPDK工程师手册,官方文档,最新视频,开源项目,实战案例,论文,大厂内部ppt,知名工程师一览表
Stars: ✭ 535 (+675.36%)
Mutual labels:  linux-kernel

First, thank you for taking the time to read my book! I want to point out that English is not my first language and you're welcome to give me any feedback for my poor English.

Multi-queue block device in Linux kernel v4.4

Several years ago, a new concept was merged into the block layer of Linux kernel. Before that every single block device has one queue for IO handling. Every processes inserted an IO request into the queue and block device driver extract a request from the queue. Yes, one queue was shared for many processes and for many processors.

When we used HDD mainly, a single queue did not matter. But these days SSD is so popular that a single queue design has been bottle-neck of performance. Therefore kernel developers implemented the multi-queue design.

That is not just an adding more queues. The architecture of block layer must've re-designed. You can get the theoritical background from this paper:

Bjørling, Matias, et al. "Linux block IO: Introducing multi-queue SSD access on multi-core systems." Proceedings of the 6th International Systems and Storage Conference. ACM, 2013. - http://kernel.dk/systor13-final18.pdf

This document shows the step-by-step process of making mybrd driver that is mimic of brd and null_blk drivers in Linux v4.4. We begin with dummy skeleton driver. And we will make a single queue and see how it works. And also we will see how kernel pass the IO request to driver via the single queue. Finally we will change mybrd driver to have multi-queue and see how it works between kernel block layer and driver.

The final source code is already implemented at https://github.com/gurugio/mybrd/blob/master/mybrd.c. So you can see what this document aim to do now. I'll also describe a few more features of kernel because they are necessary to understand and implement the block device driver.

I hope this document can guide you to the deep inside of Linux kernel.

PS.

This document is not for very beginner of Linux kernel. A small document cannot describe details beginner should know to start Linux kernel. If you already started Linux kernel and read one or two books, but did not know what to do next, this document can be good for you.

PS.

If you are interested in memory management, you'd better start reading Mel Gorman's book.

https://www.kernel.org/doc/gorman/pdf/understand.pdf

INDEX

references

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].