
IO与文件系统
Linux IO与文件系统实现细节
科学边界
这个作者很懒,什么都没留下…
展开
-
Linux内核之IO4:块I/O流程与I/O调度器
1一个块IO的一生从page cache到bio到request当APP打开一个文件,内核为文件维护一个pagecache(磁盘的一个副本);读写文件时如果page cache命中,只会读写内存不操作磁盘;没有命中,才操作磁盘。在内核用file结构体表示,可见其包含一个inode结构体,一个地址空间;相关的几个结构体在内核对应关系如下:可见,当多个进程同时打开同一个文件时,不同的file结构体对应同一个inode和同一个地址空间,地址空间是由一颗radixtree维护(即pagecache原创 2020-08-27 18:02:43 · 1401 阅读 · 0 评论 -
Linux内核之IO3:文件系统一致性
1 掉电与文件系统一致性由上一节文件系统的布局分析可知,当操作一个文件时,比如往/a目录下添加一个b,即添加/a/b文件,需要修改inode bitmap, inode table, block bitmap, data block。这一系列的操作是非原子的,假如任何一个环节掉电,造成某些步骤丢失,就会造成数据的不完整,文件将无法正常访问。2 append一个文件的全流程而硬件是不可能原子执行的,因此会造成不一致性。3 模拟文件系统不一致性案例(1) 做一个image,用来模拟磁盘dd原创 2020-08-27 17:55:39 · 1436 阅读 · 0 评论 -
Linux内核之IO2:EXT文件系统详解(案例解析)
一切都是文件,Linux通过VFS中间层,支持多种文件系统,对APP统一接口;文件系统的本质是将用户数据和元数据(管理数据的数据),组织成有序的目录结构。1 EXT2文件系统总体存储布局一个磁盘可以划为多个分区,每个分区必须先用格式化工具(某种mkfs)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局信息。一个典型的ext格式化文件系统存储布局如下:文件系统最小存储单位是Block,Block大小格式化时确定,一般4K;启动块(BootBlock):大小原创 2020-08-27 17:43:04 · 2808 阅读 · 0 评论 -
Linux内核之IO1: I/O模型
在业务执行过程中,常伴随大量的IO操作,如果IO操作和CPU消耗不能合理安排,将会导致整体业务执行效率低下,用户体验极差。比如手机启动过程,有大量CPU消耗和IO操作。用Bootchart记录android启动过程的CPU/IO消耗如下图Systemd readahead:Systemd readahead-collect.service搜集系统启动过程中的文件访问信息,Systemdreadahead-replay.service在后续启动过程中完成回放,即将IO操作与CPU并行;提高效率的原创 2020-08-27 16:57:20 · 859 阅读 · 0 评论