Linux内核延迟写机制-LinuxKernelExploration
Linux 内核延迟写机制
Linux内核延迟写机制
1
Linux 内核延迟写机制
目 录Table of Contents
1 概述 4
2 Linux内核bdi系统 5
2.1 writeback主要数据结构 6
2.2 bdi-default 内核线程 9
2.2.1 bdi_register () 10
2.2.2 bdi_forker_task () 11
2.3 flush-x:y 内核线程 13
2.3.1 bdi_start_fn () 15
2.3.2 bdi_writeback_task () 16
3 脏页回写到磁盘 18
3.1 wb_do_writeback () 18
3.2 wb_writeback () 19
3.3 writeback_inodes_wb () 24
3.4 writeback_sb_inodes () 25
3.5 writeback_single_inode () 27
3.6 do_writepages () 31
3.7 ext4文件系统写数据流程 32
3.7.1 ext4_da_writepages () 32
3.7.2 mpage_da_map_and_submit () 39
3.7.3 mpage_da_submit_io () 43
3.7.4 ext4_writepage () 45
3.8 address space写数据流程 47
3.8.1 block_write_full_page () 47
3.8.2 block_write_full_page_endio () 48
3.8.3 __block_write_full_page () 48
3.9 写结束回调函数end_buffer_async_write () 53
附录 56
2
Linux 内核延迟写机制
图目录 List of Figures
图1 writeback主要数据结构关系 9
图2 bdi_writeback_task ()流程图 18
图3 ext4文件系统extent基本原理 33
图4 页面page与I/O wait_queue 56
3
Linux 内核延迟写机制
1 概述
在分析sys_write ()的源码过程中,generic_perform_write ()函数执行完后,会逐
层返回,直至sys_write ()返回,系统调用结束。但此时要写的数据,只是拷贝到内核缓
冲区中,并将相应的页标记为脏;但数据并未真正写到磁盘上。那么何时才会将数据写到磁
盘上,又由谁来负责将数据写到磁盘上呢?
由于页高速缓存的缓存作用,写操作实际上会被延迟。当页高速缓存中的数据比后台存
储的数据更新时,那么该数据就被称做脏数据。在内存中累积起来的脏页最终必须被写回磁
盘。在以下