1.Linux IO栈处理
我们就从一个常见Linux IO处理流程示意图开始今天的主题。
这个示意图主要描述了Linux系统中I/O请求的处理流程,涉及了I/O接口、文件系统、块层、NVMe驱动等多个部分,整个IO流程处理主要概括以下步骤:
1. 应用程序(Applications)将I/O请求提交给I/O接口(Step 1)。这些请求可以是POSIX的read/write操作(如psync)、libaio、io_uring等。
2. I/O接口构建一个struct kiocb结构体,并通过VFS(虚拟文件系统)将其提交给文件系统(Step 2)。
3. 文件系统解析包含数据的块地址,构建一个struct bio请求,并通过submit_bio()函数将其提交给块层(Step 3)。
4. Linux块层将struct bio转换为struct request(Step 4),并将其放入每个核心的软件队列(Step 5)中。
5. 然后,这些请求由块I/O调度器处理,并放入硬件调度队列