[性能优化] - linux 虚拟文件系统

虚拟文件系统——更好的文件抽象层 虚拟文件系统——更好的文件抽象层任何一个软件设计的难题都可以通过增加一个抽象层来解决 。我们的系统开发中,经常遇到一些难办的事情,比如,一台linux服务器上,从源里安装了一套apache+php+mysql,然后另外一个管理员发现其中一个php项目的php版本不够,就编译安装了一套新的php,然后将apache的php配置链过来。但php的配置要修改的话,就十分麻烦。于是,我们设计了一套虚拟文件系统来解决这类问题 阅读详情

目录

[性能优化] - linux 虚拟文件系统

0 背景

1 兼容不同文件系统

2 高速磁盘缓存

2.1缓存分为三类

3 文件延迟写技术

3.1 数据刷入磁盘条件

4 free命令

4.1 Mem物理内存

4.2 应用程序的内存使用

4.3 交换内存swap

5 性能优化

5.1系统参数调优

5.2 应用程序性能优化

6 总结


[性能优化] - linux 虚拟文件系统

 second60 20180801

     要想优化系统性能,那么必须了解系统的原理,然后在其原理的基础上,对系统或应用程序进行性能优化。今天讲的内容是:linux虚似文件系统的知识。

 

0 背景

linux系统中,使用了VFS(virtual file system)虚拟文件系统。

VFS的主要基本功能:

  1. 兼容linux中的不同文件系统
  2. 高速磁盘缓存(三类:目录项/索引节点/数据页)
  3. 文件数据延迟写技术

 

1 兼容不同文件系统

在linux中有不同的文件系统,如ext2,ext3,xfs,ntfs,jfs等,为了兼容不同的文件系统,并为应用层提供一个通用接口,采用了虚拟文件系统的方法。

通过虚拟文件系统,只需提供一套统一的接口给用户即可,如read/write/close/open等。用户无须了解底层使用的是什么文件系统,由内核通过虚拟文件系统进行统一操作。

2 高速磁盘缓存

VFS中引入了高速磁盘缓存机制,允许内核将原本存在的磁盘上的某些信息保存在RAM中,以便这些数据的进一步访问快速进行,而不必慢速访问磁盘本身。

 

2.1缓存分为三类

  1. 目录项高速缓存: 存放描述文件系统路径名的目录项对象。(buffers)
  2. 索引节点高速缓存:存放描述磁盘索引节点的索引节点对象。(buffers)
  3. 页高速缓存: 存放完整的数据页对象,每个页所包含的数据一定属于某个文件,同时所有的文件读写操作都依赖于页高速缓存。是linux内核所使用的主要磁盘高速缓存。(cached)

 

3 文件延迟写技术

VFS文件系统采用了文件数据延迟写的技术。在调用系统接口写数据时没有使用同步写模式,而是先保存在缓存中,等满足条件时,才将数据刷入磁盘中。

脏页:进程修改了缓存中的数据,相应的页标记为脏页pg_dirty。即未被同步回磁盘的页。

 

3.1 数据刷入磁盘条件

  1. 文件大小超出缓存大小:页高速缓存已满,还需要更多的页,或脏页的数量已经太多。
  2. 时间片到达:从页变成脏页以来已过去太长时间
  3. 主动刷新: 进程请求对块设备或者特定文件任何待定的变化都进行刷新。通过调用sync()、fsync()或者fdatasync()系统调用来实现。

 

4 free命令

free命令:显示当前已使用和未使用的内存,包括:物理内存,swap内存,buffers,cached。

 

4.1 Mem物理内存

第一行用全局角度描述系统使用的内存状况: 
total:总物理内存 
used:已使用物理内存,包括:buffers + cached + 应用程序使用内存

free:完全未被使用的物理内存 
shared:应用程序共享内存 
buffers:缓存,主要用于目录方面,inode值等(ls大目录可看到这个值增加) 
cached:缓存,用于已打开的文件 (打开大文件可以看到变化)

 

公式一:total = used + free

eg:  16471080 = 13939496 + 2531584

公式二:used = buffers + cached+ 进程使用内存

eg:  13939496 = 1404 + 5474748 + 8463344  
 

4.2 应用程序的内存使用

第二行描述应用程序的内存使用: 
前个值表示-buffers/cache——应用程序使用的内存大小,used减去缓存值 
后个值表示+buffers/cache——所有可供应用程序使用的内存大小,free加上缓存值 

应用程序已使用内存
-buffers/cache=used-buffers-cached 

eg: 8463344 = 13939496 - 1404 - 5474748

 

应用程序可使用内存
+buffers/cache=free+buffers+cached

eg: 8007739 = 2531584 + 1404 + 5474748

 

4.3 交换内存swap

4.3.1 什么时候交换内存

当发生分页回收时,在非活跃列表中属于进程地址空间的候选分页可以被移出。目的是保证主内存的分配。linux中使用交换技术能够更有效地使用空间。

虚拟内存由物理内存和磁盘子系统或swap分区组成。如果在linux中虚拟内存管理器发现内存分页已经被分配,但是大量时间还没有使用完,它会将这个内存分页移到swap空间。

 

第三行表示swap的使用: 
used——已使用 
free——未使用

5 性能优化

与文件系统打交道的,一般都是磁盘,磁盘的效率可以说是最差的(CPU>CPU缓存>内存>磁盘), 但是在开发时,处处离不开磁盘,如读写文件、打印日志等。都是在涉及到磁盘的操作,在性能优化中,磁盘的优化是非常重要的一环。

 

5.1系统参数调优

  1. 脏页背景阈值调整:当脏页数据还达到阈值将会刷新磁盘。正常是10%写入磁盘,修改文件/proc/sys/vm/dirty_background_ratio来调整该值。
  2. 脏页刷新定时器调整:当页高速缓存中有脏页,且很久没刷新时,由wb_timer动态定时器刷新。通常是500分之一秒,不过可以通过修改/proc/sys/vm/dirty_writeback_centisecs文件调整该值

其他的参数,请查看: /proc/sys/vm/dirty_* 中的文件

 

5.2 应用程序性能优化

在就用程序中,如果涉及到磁盘的操作,比如:数据库,本地文件等。可以在中间添加一层缓存,也可直接用缓存数据库等,避免直接接作磁盘。

 

  1. 在架构设计时,添加一个缓存层(redis/memcached/直接内存)等
  2. 把数据放在缓存层中
  3. 采用定时刷新的方法,把更改未同步的数据刷新到数据库或本地文件
  4. 如果重要的数据,可直接刷新缓存后同步

 

6 总结

目前的系统架构设计中,都会添加缓存层,因为缓存层的效率非常高,对于高并发的设计更是如些。因此缓存的思想是非常重要的。

今天的分享到这,如果有写的有错误的地方,欢迎指正。同时希望志同道合的人一起来交流,进步。

Linux虚拟文件系统(VFS)原理与性能优化实践 虚拟文件系统(VFS)是Linux内核中实现文件系统抽象的核心机制,通过定义统一的超级块、inode、dentry等数据结构,屏蔽了EXT4、NTFS等不同文件系统的底层差异。其采用面向对象设计思想,通过操作函数集实现多态,使应用程序只需调用标准接口如open/read/write即可操作任意文件系统。在工程实践中,VFS的dentry缓存和inode缓存对系统性能影响显著,合理调整/proc/sys/fs下的相关参数可优化IO性能。该技术广泛适用于嵌入式存储、云计算容器等场景,特别是在需要同时支持多种文件 阅读详情

相关推荐

【Linux内核】Linux虚拟文件系统详解

Linux虚拟文件系统(VFS)是Linux内核中的一个抽象层,它允许不同的文件系统以统一的方式与内核交互。VFS为应用程序提供了一个统一的接口,使得应用程序可以透明地访问不同类型的文件系统,如ext4、NTFS、FAT32等。VFS的核心思想是通过抽象出文件系统的共性,提供一个统一的接口,从而简化文件系统的实现和使用。在实际产品开发中,VFS的应用非常广泛。例如,在嵌入式系统中,开发者可能需要同时支持多种文件系统,如用于存储系统日志的ext4文件系统和用于存储用户数据的FAT32文件系统。

以实战经验介绍行业知识 1035

从文件 I/O 看 Linux 的虚拟文件系统

文档选项

lemo的专栏 1833

2、深入探究 Linux 虚拟文件系统

本文深入探讨了 Linux 内核中的虚拟文件系统(VFS),介绍了其在用户空间和内核空间之间的重要作用。文章详细解析了系统调用的工作机制、文件系统的分类以及 VFS 的统一接口如何简化应用程序开发。同时,还讨论了 VFS 的工作流程、性能优化建议以及其在现代数据中心存储管理中的重要性。

i0j1k2l3m的博客 141

比较虚拟机中文件系统的性能

基于虚拟机并使用Vagrant(译注:Vagrant用于创建和部署自动化虚拟化开发环境)开发环境主要瓶颈是文件系统的性能。各平台的CPU区别是很小的,甚至可以忽略不计,而且RAM只有在很多虚拟机(译注:指同一台物理机上的虚拟机)都活跃时才会成为性能瓶颈。昨天我花了大部分时间测试并分析了通用的文件系统机制,现在把我得到的结果分享给你们。

Heron——Linux & ARM 4295

DeepSeek+知网研学:三步搞定文献矩阵与对比分析(实战指南)

本文提供了一套高效实用的文献管理分析实战指南,详细介绍了如何结合DeepSeek大模型与知网研学平台,通过三个核心步骤快速完成文献梳理。该方法能自动提炼文献核心要素、生成结构化对比矩阵,并辅助发现研究空白,显著提升学术研究者的文献分析效率与深度。

weixin_29061509的博客 490

Vmware 17保姆级教程:从零部署华为enspPro模拟器(附镜像下载+配置优化)

本文提供了一份详尽的Vmware 17部署华为eNSP Pro模拟器的保姆级教程。内容涵盖从镜像下载、虚拟机导入、网络配置到深度性能调优的全过程,并针对常见启动失败、设备卡顿等故障提供了实用的排查方案,旨在帮助网络工程师和华为认证备考者快速搭建稳定高效的实验环境。

arduino9maker的博客 632

【Linux】Linux的虚拟文件系统

Linux的虚拟文件系统与实际文件系统的关系如下所示:   VFS的原理 各种文件系统之所以有区别,就在于它们的目录文件结构各不相同,随之而来的也就是对文件目录的操作函数也不相同。对于前者可以在保留原系统目录结构的基础上,再构建一个新的统一的目录文件结构,而这个新目录文件中的信息是通过提取原系统目录文件信息进行重新组织来建立的。这样,用户面对的就不再是五花八门的目录文件,而是一个统一的目...

Yngz_Miao的博客 1万+

Ollama本地大模型部署指南:从核心原理到实战避坑

大语言模型(LLM)作为人工智能领域的核心技术,通过海量数据训练获得强大的语言理解和生成能力。其工作原理基于Transformer架构,通过自注意力机制处理序列数据,在文本生成、代码编写和对话系统等场景展现出巨大价值。随着开源模型的普及,本地部署成为关注焦点,它解决了数据隐私和定制化需求,但面临环境配置和资源管理的挑战。Ollama作为开源工具,通过封装模型格式和统一API,简化了本地部署流程,支持GPU加速和性能调优,让开发者能够快速集成到IDE和自动化脚本中,实现高效的本地AI应用部署。

weixin_30915951的博客 451

linux文件系统性能

linux文件系统性能

w99h99t99t的博客 1717

攻防世界:Crypto习题之easy_RSA

在非对称加密算法中,单向函数被广泛应用,用于确保从公钥加密后的密文无法轻易推导出私钥,从而保证数据的安全性。而其中最著名的算法便是 RSA 加密算法。首先设φm:=∣1≤k≤mgcdkm1∣为欧拉函数(Euler’sche Phi-function)。pqn:=pqpqφnnpqpqφnp−1q−1e∈12...φn−1gcdφne1ended≡1φn假设我们现在有明文x以及公钥en。

qq_52789488的博客 1570

解密微信DAT图片:一键转换JPG/PNG/GIF的实用指南

本文详细解析微信DAT图片的加密机制及转换方法,提供从定位文件到使用WeijieSoft工具一键转换JPG/PNG/GIF的完整指南。涵盖新旧版微信存储路径差异、批量处理技巧及常见问题解决方案,帮助用户高效恢复重要图片并释放存储空间。

weixin_29305337的博客 3615

深入理解Linux内核--文件描述符,文件对象,索引节点,虚拟文件系统,性能优化

本质:进程级整数索引,指向内核的 struct file。本质:打开文件的动态视图,代表一次打开操作。本质:文件的静态元数据,唯一标识一个文件。作用:缓存路径解析结果,避免重复遍历目录。本质:抽象层,统一所有文件系统的接口。

x13262608581的博客 318

UDS 诊断 - CommunicationControl(通信控制)(0x28)服务 诊断

字节参数名称字节值#1CommunicationControl(通信控制)请求SID0x28#2#3communicationType(通信类型)#4nodeIdentificationNumer(节点标识符)(高位字节)controlType 为 0x04 或 0x05 时,使用该参数#5nodeIdentificationNumer(节点标识符)(低位字节)controlType 为 0x04 或 0x05 时,使用该参数。

耳朵东金子千的博客 1819

Linux——内核——文件系统

Linux文件系统通过分层架构和虚拟文件系统(VFS)实现统一的数据管理,核心包括超级块、inode等数据结构,支持文件创建、读取等基础操作。现代特性如日志记录、快照和透明压缩提升了可靠性和性能。常见文件系统如ext4、XFS和Btrfs各具特点,需根据场景选择。优化手段包括挂载选项调整和碎片整理,而监控工具如df/iostat帮助维护系统健康。整体设计体现了"一切皆文件"的哲学,平衡了性能、安全与功能需求。

m0_65153260的博客 1291

Modis数据处理工具:MRT百度网盘下载和手把手图文安装教程

如下图所示为MODIS Reprojection Tool(MRT)的软界面,看似简单,却是Modis遥感影像必不可少的处理工具,如投影变换等。本文以图文并茂的形式,详细讲解MRT软件在Windows10平台上的安装过程,并附MRT软件百度网盘下载地址。 Modis Tool主界面: 一、安装过程 1、安装Java运行环境 双击Java.exe,安装运行环境。默认的安装路径为C:\Program Files (x86)\Java\jre6\bin,后面需要用到这个路径。 等待...

智慧空间实验室 2622

【红外技术】DDE算法:HE在红外图像可视化上的应用(附源码)

并且数据一般是以 8 的整数倍的位宽在电子系统中应用,因此大多数的显示器的显示位宽为 8bit,共 256 个灰阶。为了使红外图像可视化,因此需要一种“数据压缩”技术,还需要既可能的不丢失原始图像信息。HE后的图像直方图分布比较均匀离散,图像对比度好。但是HE算法只是适用某些图像,它是将灰度集中区域进行拉伸得到,也会放大该集中区域的噪声,它是一种“不公平”的映射。以下是红外细节增强算法的演示,很明显右边的图像,展现了更多的图像细节,对于小目标的观测非常友好。文章已于2019-12-02修改。

sunwindl91181的博客 911

Linux文件系统性能优化

文件系统性能直接影响系统整体响应速度和吞吐量。通过针对性优化,可显著提升I/O效率,尤其在数据库、虚拟化、多媒体处理等场景。

Made In SQL 1347

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Linux内核之文件系统

文件系统是Linux内核中至关重要的组成部分,它管理着数据的存储、访问和保护。通过理解文件系统的层次结构、类型、核心数据结构和实现细节,开发者和系统管理员可以更好地优化和维护Linux系统。

qq_56187001的博客 870

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Linux 性能优化系列】Linux 性能优化 -- IO 性能篇(零) IO 性能优化综述

【Linux 性能优化系列】Linux 性能优化 -- IO 性能篇(零) IO 性能优化综述

CopperSun 技术博客 2166

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Linux 性能优化之 IO 子系统 系列 图

http://blog.sina.com.cn/s/articlelist_1029388674_11_1.html   Linux 性能优化之 IO 子系统(一) 本文介绍了对 Linux IO 子系统性能进行优化时需要考虑的因素,以及一些 IO 性能检测工具。 本文的大部分内容来自 IBM Redbook - Linux Performance and Tuning G

xiaofei0859的专栏 1471

Linux 4.9 内核文件系统核心机制

linux内核文件系统核心机制

程序喵的博客 275

gh_mirrors/li/linux内核虚拟文件系统:debugfs与tracefs使用指南

你是否还在为内核调试时缺乏实时状态观测手段而困扰?是否因传统调试方法侵入性过强而影响系统稳定性?本文将系统介绍Linux内核中两种强大的虚拟文件系统——debugfs(调试文件系统)和tracefs(跟踪文件系统),通过12个核心API解析、8个实战案例和5组性能对比数据,帮助开发者构建高效、低侵入的内核调试与跟踪体系。 读完本文你将掌握: - debugfs与tracefs的架构差异及适用场景...

gitblog_00133的博客 1429

Linux 文件系统是怎么工作的?

本文是通过学习倪朋飞老师的《Linux性能优化实战》 :Linux 文件系统是怎么工作的? Linux 文件系统是怎么工作的?索引节点和目录项虚拟文件系统文件系统 I/O性能观测容量缓存总结 和 CPU、内存一样,磁盘和文件系统的管理,也是操作系统最核心的功能。 磁盘为系统提供了最基本的持久化存储。 文件系统则在磁盘的基础上,提供了一个用来管理文件的树状结构。 那么,磁盘和文件系统是怎么工作的呢?又有哪些指标可以衡量它们的性能呢? 索引节点和目录项 文件系统,本身是对存储设备上的文件,进行组织管理的.

zhanglu0302的博客 572

Linux内核中的文件系统详解

文件系统是一种组织和存储数据的方法,它定义了文件如何在存储设备上存储和访问。

jiang_style的博客 4289

Linux | 文件系统 | Ext2fs

有关于Linux文件系统的发展历史可以参考http://e2fsprogs.sourceforge.net/ext2intro.html 虚拟文件系统VFS Linux支持多种不同类型的文件系统:网络文件系统NFS,磁盘文件系统Extfs,特殊文件系统proc、tmpfs等。为了更方便的在系统中集成多个不同的文件系统,Linux实现了一层叫做Virtual File System的layer...

Hunk的菜鸟之路 2593

Linux 虚拟文件系统(VFS)深度解析

接下来,我们需要定义超级块操作和 inode 操作。现在,我们实现if (!inode) {// . 目录// .. 目录通过对 Linux 虚拟文件系统(VFS)的深入分析,我们可以清晰地看到 VFS 作为 Linux 内核中文件系统抽象层的核心价值和设计精髓。VFS 不仅实现了"一切皆是文件"的 Unix 哲学,还为多种异构文件系统提供了统一的访问接口,极大地增强了 Linux 操作系统的灵活性和可扩展性。

X 1740
上一篇: [框架]高并发中的惊群效应
下一篇: [性能优化] - cpu调度原理
second60
博客等级 码龄9年 155粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值