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

linux如何判断进程对磁盘是随机写入还是顺序写入?

模拟工具&性能测试工具:fio

fio参数说明:

filename=/dev/sdb1:测试文件名称,通常选择需要测试的盘的data目录。
direct=1:是否使用directIO,测试过程绕过OS自带的buffer,使测试磁盘的结果更真实。(Linux读写的时候,内核维护了缓存,数据先写到缓存,后面再后台写到SSD。读的时候也优先读缓存里的数据。这样速度可以加快,但是一旦掉电缓存里的数据就没了。所以有一种模式叫做DirectIO,跳过缓存,直接读写SSD。)
rw=randwrite:测试随机写的I/O
rw=randrw:测试随机写和读的I/O
bs=16k:单次io的块文件大小为16k
bsrange=512-2048 同上,提定数据块的大小范围
size=5G:每个线程读写的数据量是5GB。
numjobs=1:每个job(任务)开1个线程,这里用了几,后面每个用-name指定的任务就开几个线程测试。所以最终线程数=任务数(几个name=jobx)* numjobs。
name=job1:一个任务的名字,重复了也没关系。如果fio -name=job1 -name=job2,建立了两个任务,共享-name=job1之前的参数。-name之后的就是job2任务独有的参数。
thread:使用pthread_create创建线程,另一种是fork创建进程,进程的开销比线程要大,一般都采用thread测试。
runtime=1000:测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止。
ioengine=libaio:指定io引擎使用libaio方式。libaio:Linux本地异步I/O。请注意,Linux可能只支持具有非缓冲I/O的排队行为(设置为“direct=1”或“buffered=0”);rbd:通过librbd直接访问CEPH Rados。
iodepth=16:队列的深度为16。在异步模式下,CPU不能一直无限的发命令到SSD。比如SSD执行读写如果发生了卡顿,那有可能系统会一直不停的发命令,几千个,甚至几万个,这样一方面SSD扛不住,另一方面这么多命令会很占内存,系统也要挂掉了。这样,就带来一个参数叫做队列深度。
rwmixwrite=30:在混合读写的模式下,写占30%
group_reporting:关于显示结果的,汇总每个进程的信息。
lockmem=1g:只使用1g内存进行测试。
zero_buffers:用0初始化系统buffer。
nrfiles=8:每个进程生成文件的数量。
磁盘读写常用测试点:
1. Read=100% Ramdon=100% rw=randread (100%随机读)
2. Read=100% Sequence=100% rw=read (100%顺序读)
3. Write=100% Sequence=100% rw=write (100%顺序写)
4. Write=100% Ramdon=100% rw=randwrite (100%随机写)
5. Read=70% Sequence=100% rw=rw, rwmixread=70, rwmixwrite=30
(70%顺序读,30%顺序写)
6. Read=70% Ramdon=100% rw=randrw, rwmixread=70, rwmixwrite=30
(70%随机读,30%随机写)

模拟随机写入:

fio --name=randwrite --rw=randwrite --bs=4k --size=1G --numjobs=1 --iodepth=1 --randrepeat=0 --ioengine=libaio --direct=1 --filename=/path/to/testfile

模拟顺序写入:

fio --name=seqwrite --rw=write --bs=4k --size=1G --numjobs=1 --iodepth=32 --ioengine=libaio --direct=1 --filename=/path/to/testfile

磁盘观测工具:blktrace

安装:

yum install blktrace

挂载debugfs:

# mount –t debugfs debugfs /sys/kernel/debug

观测并输出到控制台:

blktrace -d /dev/sda -o - | blkparse -i -

观测并写入到文件然后用btt解析文件:

blktrace -d /dev/sda -o - | blkparse -i - -d disk-trace.bin
btt -i disk-trace.bin -o /tmp/disk-trace

blktrace输出内容解析:(blktrace(8) - Linux manual page)

如观测随机写入:

如观测顺序写入:

磁盘观测工具:biosnoop

安装:

yum install bcc-tools

观测并输出到控制台:

/usr/share/bcc/tools/biosnoop -Q

如观测随机写入:

如观测顺序写入:

系统调用跟踪工具:strace

比如观测fio进程的io_submit系统调用:

strace -e 'trace=io_submit' `ps aux | grep fio | grep -v 'grep' | awk '{print "-p " $2}' | xargs echo`

如观测随机写入:

如观测顺序写入:

--end--


http://www.kler.cn/a/582863.html

相关文章:

  • 【Pycharm】Pycharm无法复制粘贴,提示系统剪贴板不可用
  • 内存和硬盘区别
  • CSDN统计个人创作总字数
  • 【HeadFirst系列之HeadFirstJava】第17天之深入解析 Java 包与 JAR:从代码组织到应用发布全流程(含实战)
  • OpenGL实现场景编辑器
  • HarmonyOS学习第19天:感知世界的 “超能力”,HarmonyOS 传感器揭秘
  • How to install a package in offline scenario in Ubuntu 24.04
  • OpenAI Agent 工具包深度解析:重塑 AI 代理开发的未来图景
  • 【git】【网络】【项目配置运行】HTTP 协议的微型简易 Web 服务器---tinyEasyMuduoWebServer
  • SQL Server 列存储索引:大幅提升查询性能的利器
  • Spring Boot + MySQL + MyBatis:企业级应用开发实战
  • Git 的详细介绍及用法
  • TensorFLow深度学习实战(11)——风格迁移详解
  • 数字IC/FPGA校招笔试题解析(一)
  • C# NX二次开发:模型导入和向量及点位的使用
  • useEffect的执行是异步的
  • 【学写LibreCAD】 2.1 pdf_print_loop文件
  • Spring的基础事务注解@Transactional
  • C++零基础LeetCode热题100- 128.最长连续序列
  • 大模型微调|使用 LLaMA-Factory 微调 Llama3-8B-Chinese-Chat 完成知识问答任务