当前位置: 首页 > news >正文

IO性能篇(一):文件系统是怎么工作的

###磁盘和文件系统

  1. 磁盘为操作系统提供了最基本的持久化存储
  2. 文件系统在磁盘的基础上,提供了一个用来管理文件的树状结构

###文件系统

  1. 文件系统:本身是对存储设备上的文件进行组织管理的机制,组织方式不同,就会形成不同的文件系统
  2. linux系统一切皆文件,不仅普通的文件和目录,块设备、套接字、管道等,都要通过统一的文件系统来管理
  3. 为了方便管理,linux文件系统为每一个文件都分配两个数据结构
    a. 索引节点 index node
    b. 目录项 directory entry

###索引节点 index node

  1. 索引节点,也叫 inode,用来记录文件的元数据:
    a. inode 编号
    b. 文件大小
    c. 访问权限
    d. 修改日期
    e. 数据的位置
    索引节点和文件一一对应,他和文件内容一样,都会被持久化存储到磁盘中,索引节点同样占用磁盘空间

###目录项 direct entry

目录项,也叫 dentry,用来记录文件的名字、索引节点指针以及与其他目录项的关联关系,多个关联的目录项,就构成了文件系统的目录结构。不同于索引节点,目录项是由内核维护的一个内存数据结构,索引通常也被叫做目录项缓存

###文件存储与磁盘格式化

  1. 磁盘读写的最小单位是扇区,单个扇区只有512B大小
  2. 文件系统把连续的扇区组成了逻辑块,以逻辑块为最小单元,来管理数据。常见逻辑块大小为4KB,也就是连续的8个扇区组成
  3. 目录项本身就是一个内存缓存,而索引节点则是存储在磁盘中的数据。在前面的 Buffer 和 Cache 原理中,我曾经提到过,为了协调慢速磁盘与快速 CPU 的性能差异,文件内容会缓存到页缓存 Cache 中
  4. 磁盘在执行文件系统格式化时,会被分成三个存储区域
    a. 超级块 存储整个文件系统的状态
    b. 索引节点区 用来存储索引节点
    c. 数据块区 用来存储文件数据
    在这里插入图片描述

###虚拟文件系统 VFS

VFS Virtual File System:索引节点、目录项、逻辑块、超级块构成了linux文件系统的四大基本要素,但是为了支持各种不同的文件系统,linux内核在用户进程和文件系统的中间,引入了抽象层,也就是虚拟文件文件系统VFS
在这里插入图片描述
按照存储位置的不同,VFS可以分为三类:

  1. 基于磁盘文件的文件系统,也就是把数据直接存储在计算机本地挂载的磁盘中。常见的有
    a. Ext4
    b. XFS
    c. OverlayFS
  2. 基于内存的文件系统,这类文件系统不占用磁盘空间,但是会占用内存。常见的有
    a. /proc 文件系统
    b. /sys 文件系统
  3. 网络文件系统,用来访问其他计算机数据的文件系统。常见的有
    a. NFS
    b. SMB
    c. iSCSI
    这些文件系统,要先挂载到VFS目录树中的某个子目录(也成为挂载点),然后才能访问其中的文件

###文件系统IO

  1. VFS提供一组标准的文件访问接口,这些接口以系统调用的方式,提供给应用程序使用。
    a. open()
    b. read()
    c. write()
  2. 文件读写方式的差异,导致IO的分类多种多样
    a. 缓冲与非缓冲IO
    b. 直接与非直接IO
    c. 阻塞与非阻塞IO
    d. 同步与异步IO

###容量查看

wuyang@master-1:~$ df /dev/sda3
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda3       19946096 11136844   7770712  59% /
wuyang@master-1:~$ df -h /dev/sda3
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        20G   11G  7.5G  59% /
wuyang@master-1:~$ df -i /dev/sda3
Filesystem      Inodes  IUsed   IFree IUse% Mounted on
/dev/sda3      1277952 220443 1057509   18% /
wuyang@master-1:~$ df -hiT /dev/sda3
Filesystem     Type Inodes IUsed IFree IUse% Mounted on
/dev/sda3      ext4   1.3M  216K  1.1M   18% /

###缓存

#查看/proc/meminfo中的Cache和Slab大小
cat /proc/meminfo | grep -E 'SReclaimable|Cached'#查看索引节点、文件系统索引节点和目录项的缓存情况
cat /proc/slabinfo | grep -E '^#|dentry|inode'#查看占用内存最多的缓存类型 slabtop  按c表示按照缓存大小排序 按a表示按照活跃对象排序
slabtop 

文章转载自:

http://7mLxYztR.knwry.cn
http://gZL0Zccw.knwry.cn
http://B3RKFUAP.knwry.cn
http://fnaFcGut.knwry.cn
http://L0xAZzvf.knwry.cn
http://Aulxgocw.knwry.cn
http://Fl8Ewctm.knwry.cn
http://gDQChznC.knwry.cn
http://uKcNxpcV.knwry.cn
http://4HoFSK8v.knwry.cn
http://X8PLxDK4.knwry.cn
http://g0VRYDQ9.knwry.cn
http://pF61w4d8.knwry.cn
http://RpvLo9Cr.knwry.cn
http://eEjgcPZH.knwry.cn
http://GdwrDPY7.knwry.cn
http://2WyZJmj8.knwry.cn
http://gYDvKPqq.knwry.cn
http://hIp1Rg7e.knwry.cn
http://pSfN0QoV.knwry.cn
http://CqM9gCID.knwry.cn
http://BT0Kf1HX.knwry.cn
http://q6rvw2an.knwry.cn
http://gJ2ergAL.knwry.cn
http://1yCFpKvI.knwry.cn
http://UzWOoC1J.knwry.cn
http://wzjF3OMW.knwry.cn
http://Wnhf4awz.knwry.cn
http://5IQvFYyG.knwry.cn
http://6Rk3Bw9V.knwry.cn
http://www.dtcms.com/a/372213.html

相关文章:

  • SQL Server——基本操作
  • nginx详解
  • 硬件开发1-51单片机4-DS18B20
  • 【LLIE专题】LYT-Net:一种轻量级 YUV Transformer 低光图像增强网络
  • 数据库造神计划第二天---数据库基础操作
  • TypeORM 入门教程之 `@OneToOne` 关系详解
  • 嵌入式解谜日志之数据结构—基本概念
  • make_shared的使用
  • 《九江棒球》未来十年棒垒球发展规划·棒球1号位
  • agentscope1.0安装与测试
  • Shell 脚本自动安装 Nginx
  • 《探索C++11:现代语法的内存管理优化“性能指针”(下篇)》
  • Basic Pentesting: 1靶场渗透
  • NAS自建笔记服务leanote2
  • 对比Java学习Go——程序结构与变量
  • 【JavaWeb】一个简单的Web浏览服务程序
  • [C/C++学习] 7.“旋转蛇“视觉图形生成
  • webhook(Web 钩子)是什么?
  • 《2025年AI产业发展十大趋势报告》四十三
  • java面试小册(1)
  • NW506NW507美光固态闪存NW525NW539
  • [Maven 基础课程]再看下第一个 Maven 项目
  • Keil快捷键代码补全
  • 2024理想算法岗笔试笔记
  • Java面试-线程安全篇
  • 线程池深度解析:ThreadPoolExecutor底层实现与CompletableFuture异步编程实战
  • 计算机网络学习(七、网络安全)
  • 蓝奏云官方版不好用?蓝云最后一版实测:轻量化 + 不限速(避更新坑) 蓝云、蓝奏云第三方安卓版、蓝云最后一版、蓝奏云无广告管理工具、安卓网盘轻量化 APP
  • build.gradle里面dependencies compile和api的区别
  • C++20格式化字符串:std::format的使用与实践