【Linux 从基础到进阶】磁盘I/O性能调优
磁盘I/O性能调优
1. 引言
磁盘I/O性能是决定服务器整体性能的关键因素之一。磁盘I/O性能的瓶颈常常会影响数据库、文件系统以及虚拟化平台等关键应用的响应时间。因此,磁盘I/O调优是系统管理员不可忽视的任务。
本文将介绍影响磁盘I/O性能的主要因素,以及在Linux系统中通过硬件、文件系统及内核参数的调优方法,提升I/O性能,优化系统效率。
2. 磁盘I/O的基础概念
2.1 磁盘I/O(Input/Output)
磁盘I/O是指系统和存储设备之间的数据读写操作。系统性能在很大程度上取决于磁盘I/O的速度和效率,主要包括读取速度、写入速度、I/O等待时间等。
2.2 IOPS 和带宽
- IOPS(Input/Output Operations Per Second):每秒执行的I/O操作数,通常用于衡量存储设备的处理能力。对于数据库应用来说,较高的IOPS至关重要。
- 带宽:指数据传输的速率,通常以MB/s或GB/s为单位。带宽决定了大数据块传输的效率,例如文件系统的备份与恢复。
2.3 顺序I/O 与 随机I/O
- 顺序I/O:数据按照逻辑顺序连续地读写磁盘块,适用于流媒体、日志存储等应用场景。
- 随机I/O:数据随机地访问磁盘块,常见于数据库和虚拟化环境。磁盘机械结构的限制使得随机I/O性能通常比顺序I/O差。
3. 磁盘I/O性能调优的主要方法
3.1 硬件调优
3.1.1 使用SSD
相较于传统的机械硬盘(HDD),固态硬盘(SSD)具有更快的随机I/O性能和更高的IOPS,尤其适合数据库、虚拟化和高并发的应用场景。
3.1.2 配置RAID
通过RAID(Redundant Array of Independent Disks),可以提高磁盘I/O性能:
- RAID 0:通过数据条带化实现高吞吐量,但没有数据冗余。
- RAID 1:实现数据镜像,提供冗余,但没有性能提升。
- RAID 10:结合RAID 0和RAID 1,提供冗余和较好的I/O性能。
3.1.3 使用缓存
硬件层面的缓存,如存储控制器的缓存,可以有效提升读写性能。还可以配置服务器的RAM作为I/O缓存,减少直接访问磁盘的频率。
3.2 文件系统调优
3.2.1 选择合适的文件系统
不同的文件系统具有不同的I/O性能特性,选择合适的文件系统对于优化磁盘I/O至关重要:
- Ext4:常见的Linux文件系统,适用于通用场景,支持大文件和日志功能。
- XFS:适合处理大文件和高并发I/O,通常用于大规模存储和多线程操作。
- Btrfs:具有快照和卷管理功能,适合现代存储应用。
3.2.2 文件系统挂载选项优化
在挂载文件系统时,可以通过调整挂载参数提升I/O性能:
- noatime:禁用文件访问时间更新,减少不必要的磁盘写操作。
- data=writeback:加速写操作,但可能导致崩溃后的数据丢失。
- barrier=0:禁用写障碍,可以提高性能,但有数据损坏风险。
3.2.3 文件系统分区对齐
为了充分利用磁盘的I/O能力,特别是在使用SSD或RAID时,确保文件系统分区对齐非常重要。分区对齐可以减少I/O开销,提升读写性能。
3.2.4 调整文件系统块大小
根据应用的特点调整文件系统的块大小可以显著提升I/O性能。对于大文件或顺序I/O操作,较大的块大小能够提升性能;而对于小文件或随机I/O,较小的块大小更合适。
# 创建Ext4文件系统并指定块大小
mkfs.ext4 -b 4096 /dev/sdX
3.3 内核参数调优
3.3.1 调整I/O调度器
Linux内核提供了几种I/O调度器,不同调度器适合不同的应用场景。可以通过调整I/O调度器优化磁盘I/O性能:
- noop:适合SSD,因为SSD不需要机械寻道。
- deadline:适合低延迟、高负载的系统,减少I/O饥饿。
- cfq:适合通用负载,为所有进程分配相等的I/O带宽。
# 查看当前I/O调度器
cat /sys/block/sdX/queue/scheduler# 设置I/O调度器为deadline
echo "deadline" > /sys/block/sdX/queue/scheduler
3.3.2 调整读写缓存
通过调整read_ahead_kb参数,可以优化系统对顺序I/O的读取性能。增加预读缓存可以提升读取大文件时的性能。
# 查看当前预读缓存设置
blockdev --getra /dev/sdX# 设置预读缓存为1024KB
blockdev --setra 1024 /dev/sdX
3.3.3 优化swap使用
Swap空间通常用于物理内存不足时的临时存储,但频繁的swap会降低I/O性能。可以通过调整vm.swappiness参数减少swap的使用,提高I/O性能。
# 查看当前swappiness值
cat /proc/sys/vm/swappiness# 设置swappiness值为10
sysctl vm.swappiness=10
3.3.4 提升文件描述符限制
增加系统可用的文件描述符数量,可以避免由于大量并发I/O请求而导致的性能瓶颈:
# 查看当前系统文件描述符限制
ulimit -n# 修改文件描述符限制
echo "fs.file-max = 100000" >> /etc/sysctl.conf
sysctl -p
3.4 I/O性能监控
3.4.1 iostat
iostat工具可以帮助系统管理员监控磁盘I/O的性能指标,包括每秒的I/O操作数、数据传输量和I/O等待时间:
# 监控磁盘I/O性能
iostat -x 1
常见监控字段:
- tps:每秒的I/O事务数。
- await:I/O操作的平均等待时间。
- %util:设备的I/O利用率,接近100%时表示I/O成为瓶颈。
3.4.2 dstat
dstat 是另一个功能强大的性能监控工具,能够实时显示系统的I/O、CPU、内存等使用情况:
# 实时监控I/O性能
dstat -d
3.4.3 sar
sar可以长期记录系统的I/O性能数据,适合分析历史数据和进行性能趋势分析:
# 查看I/O性能历史数据
sar -d 1 10
3.5 使用缓存加速
3.5.1 配置系统缓存
通过使用操作系统的缓存机制,可以有效减少对物理磁盘的访问频率,提升I/O性能。在Linux中,通常会将空闲内存用于磁盘缓存,以提升文件系统的性能。通过vm.vfs_cache_pressure参数可以控制系统对缓存的使用程度。
# 调整文件系统缓存使用率
sysctl -w vm.vfs_cache_pressure=50
3.5.2 使用缓存软件(如Redis)
对于高并发的读写请求,使用内存级别的缓存软件(如Redis)可以显著减少磁盘I/O,提升整体系统性能。
4. 磁盘I/O调优案例
4.1 数据库服务器的I/O优化
数据库服务器通常对I/O有较高要求,特别是在处理大规模查询和写操作时。通过选择合适的RAID配置、使用SSD存储、调整I/O调度器等方式,可以显著提高数据库的I/O性能。并且,可以通过缓存常用查询结果,减少对磁盘的访问。
4.2 虚拟化环境的I/O优化
在虚拟化环境中,每个虚拟机共享物理主机的I/O
资源。通过配置存储隔离、使用高速缓存和调整I/O调度策略,可以优化虚拟机的I/O性能。
5. 结论
磁盘I/O调优是提升系统整体性能的重要步骤。通过硬件选择、文件系统配置、内核参数调整等多种手段,可以显著提升磁盘I/O的效率,减少I/O等待时间。根据具体的业务场景和应用需求,结合监控工具分析系统瓶颈,合理调优将带来显著的性能提升。
相关文章:
【Linux 从基础到进阶】磁盘I/O性能调优
磁盘I/O性能调优 1. 引言 磁盘I/O性能是决定服务器整体性能的关键因素之一。磁盘I/O性能的瓶颈常常会影响数据库、文件系统以及虚拟化平台等关键应用的响应时间。因此,磁盘I/O调优是系统管理员不可忽视的任务。 本文将介绍影响磁盘I/O性能的主要因素,…...
浅谈AGI时代的“数据枢纽”——向量数据库
一、前言 人工智能的关键,不只是构建好算力、算法、模型,更重要的是做好数据的清洗、处理、挖掘等问题。一定程度上,智能时代,企业数据处理能力有多强,决定了业务发展的天花板有多高。 在企业数智化转型过程中&#x…...
生成 Excel 表列名称
Excel 大家都用过,它的列名是用字母编号的,A 表示第一列,B 表示第二列,AA 表示第27列,AB 表示第28列等等。 现给定一个数字,如何得到列名称呢。比如输入28,输出 AB。 一开始以为就是一个简单的…...
基于yolov10的烟雾明火检测森林火灾系统python源码+pytorch模型+评估指标曲线+精美GUI界面+数据集
【算法介绍】 基于YOLOv10的烟雾明火检测森林火灾系统是一种先进的火灾预警系统,它结合了深度学习和计算机视觉技术,能够实时检测和分析森林中的烟雾和明火,从而有效预防和控制森林火灾的发生。 该系统主要基于YOLOv10模型进行构建…...
UltraISO(软碟通)制作U盘制作Ubuntu20.04启动盘
目录 一、启动盘制作 1、工具准备 2、打开UltraISO后,点击左上角的文件,在打开的下拉项中,选择打开准备好的Ubuntu系统20.04 LTS镜像文件(ubuntu-20.04-desktop-amd64.iso); 3、然后点击启动->写入硬盘映像 4、在弹出的窗…...
【EtherCAT实践篇一】TwinCAT 3安装、使用
TwinCAT 基于 PC 的开放式控制技术 倍福推出的基于 PC 的控制技术定义了自动化领域的全球标准。在软件方面,1996 年推出的 TwinCAT(The Windows Control and Automation Technology,基于 Windows 的控制和自动化技术)自动化套件是…...
4、CSS3笔记
文章目录 四、CSS3CSS3简介css3概述CSS3私有前缀什么是私有前缀为什么要有私有前缀常见浏览器私有前缀 CSS3基本语法CSS3新增长度单位CSS3新增颜色设置方式CSS3新增选择器CSS3新增盒模型相关属性box-sizing 怪异盒模型resize 调整盒子大小box-shadow 盒子阴影opacity 不透明度 …...
Docker无法拉取镜像解决办法
Docker 无法拉取镜像解决办法 一.现象描述 在docker拉取镜像的时候重复拉取镜像然后超时。 二.解决办法 1.配置国内镜像源地址加速 vi /etc/docker/daemon.json在文件中增加如下内容 { "registry-mirrors": ["https://docker.m.daocloud.io","h…...
Ubuntu 20.04安装Qt 5.15(最新,超详细)
Ubuntu 20.04安装Qt 5.15 1. 准备注册Qt账号安装依赖下载安装工具 2. 安装3. 测试参考 前言 Qt 是一个跨平台的应用程序框架,它支持开发 C 图形用户界面应用程序。Qt 可以用于开发运行在多种操作系统上的应用程序,包括 Windows、Linux、macOS 和各种移动…...
桂林旅游一点通:SpringBoot平台应用
3系统分析 3.1可行性分析 通过对本桂林旅游景点导游平台实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本桂林旅游景点导游平台采用SSM框架,JAVA作…...
【WPF】04 Http消息处理类
这里引入微软官方提供的HttpClient类来实现我们的目的。 首先,介绍一下官方HttpClient类的内容。 HttpClient 类 定义 命名空间: System.Net.Http 程序集: System.Net.Http.dll Source: HttpClient.cs 提供一个类,用于从 URI 标识的资源发送 HTTP 请…...
如何精准设置线程数,提升系统性能的秘密武器!
线程数设定多少更合适? 线程数的设定需要根据任务的类型、系统资源、以及并发需求来进行权衡。设定合适的线程数可以有效提升系统的性能,但设置过多或过少都会影响程序的效率。以下是一些关键因素和计算方法,用于帮助确定最合适的线程数。 …...
正则表达式:从入门到精通
正则表达式(Regular Expression,简称 regex)是一种强大的文本匹配和处理工具。它可以用于搜索、替换、验证和提取文本中的特定模式。本文将带您深入了解正则表达式的各个方面,从基础知识到高级技巧。 1. 基础知识 1.1 什么是正则表达式? 正则表达式是由一系列字符和特殊…...
CRMEB标准版Mysql修改sql_mode
数据库配置 1.宝塔控制面板-软件商店-MySql-设置 2.点击配置修改,查找sql-mode或sql_mode (可使用CtrlF快捷查找) 3.复制 NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 然后替换粘贴,保存 注:MySQL8.0版本的 第三步用…...
linux驱动访问的地址为虚拟地址
在Linux驱动程序中,访问的内存地址通常是虚拟地址。这是因为Linux操作系统采用了虚拟内存管理机制,所有的用户空间和内核空间的内存地址都是虚拟地址。下面是一些关键点,以帮助更好地理解这个概念: 虚拟地址与物理地址࿱…...
基于SpringBoot+Vue+uniapp微信小程序的社区门诊管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…...
使用WPF写一个简单的开关控件
<Window x:Class"WPF练习.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/expression/blend/2008"xm…...
FPGA采集adc,IP核用法,AD驱动(上半部分)
未完结,明天补全 IP核:集成的一个现有的模块 串口写好后基本不会再修改串口模块内部的一些逻辑,将串口.v文件添加进来,之后通过他的上层的接口去对他进行使用,所以我们打包IP,之后就不用去添加源文件了&a…...
MongoDB 如何做mapreduce
以下是在MongoDB中使用MapReduce的详细步骤和相关说明: 1. MapReduce的概念 MapReduce是一种用于大规模数据处理的编程模型,它由两个主要阶段组成:Map阶段和Reduce阶段。在MongoDB中,MapReduce操作允许在服务器端对数据进行批量…...
Vue是一套构建用户界面的渐进式框架,常用于构建单页面应用
学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把手教你开发炫酷的vbs脚本制作(完善中……) 4、牛逼哄哄的 IDEA编程利器技巧(编写中……) 5、面经吐血整理的 面试技…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
rm视觉学习1-自瞄部分
首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...
