fio_generate_plots

本文详细介绍如何使用FIO工具进行磁盘性能测试,并通过fio_generate_plots脚本绘制Latency、IOPS等关键指标曲线。同时,深入讲解Gnuplot的安装与使用方法,包括设置图片格式、标题、输出文件名及各种绘图参数,如数据点标记、连线样式、颜色和宽度等。

安装 fio 源码后即可使用 fio_generate_plots

1. fio git URL

# you can execute "git clone git://git.kernel.dk/fio.git"
git clone git://git.kernel.dk/fio.git

2. Script Path

fio/tools/

该工具默认绘制 Latency、IOPS、slat、clat、BandWidth 等 5 种曲线,默认是 将相邻点连线(lines)。

  • 只绘制 IOPS 的曲线
# 可以修改 脚本 fio_generate_plots,如下:

#plot "I/O Latency" lat "Time (msec)" 1000
plot "I/O Operations Per Second" iops "IOPS" 1
#plot "I/O Submission Latency" slat "Time (μsec)" 1
#plot "I/O Completion Latency" clat "Time (msec)" 1000
#plot "I/O Bandwidth" bw "Throughput (KB/s)" 1
  • 只需要标记数据点
# 可将 lines 修改为 point。
PLOT_LINE=$PLOT_LINE"'$x' using (\$1/1000):(\$2/$SCALE) title \"Queue depth $DEPTH\" with point ls $i"
  • 修改完成后,重新编译安装 fio 即可使用
make clean && make -j8 && make install -j8
  • 如何使用 fio_generate_plots
fio_generate_plots logname

3. 关于 gnuplot 的使用

3.1 安装 gnuplot

# install for CentOS
yum install -y gnuplot

3.2 绘图

# 输出图片格式:
set term jpeg size 1280,720
set title 'plot for sin'
set output 'sin.jpeg'

# plot 语句
p [0:100] [-1:1] "sin.log" u 1:2 title "sin" w lp lt 1 lw 2 lc "green" pt 4 ps 2
  • set term jpeg size 1280,720
    • 设置输出图片大小为 1280 * 720,输出格式为 *.jpeg
  • set title 'plot for sin'
    • 设置图片标题为 plot for sin
  • set output 'sin.jpeg'
    • 设置输出图片名称为 sin.jpeg

上述 plot 语句使用了简写命令,

# 实际上相当于:
plot [0:100] [-1:1] "sin.log" using 1:2 title "sin" with linepoint linetype 1 linewidth 2 linecolor "green" pointtype 4 pointsize 2

接下来,分析下每个参数具体是什么意思:

  • p [0:100] [-1:1]
    • p 就是 plot,后面的两项分别为图片显示的 x 轴、y 轴的坐标范围。
  • "sin.log" u 1:2
    • 用 “sin.log” 中的第 1、2 列数据画图,其中第 1 列数据作为横坐标,第 2 列数据作为纵坐标。
  • title "sin"
    • 命名这条曲线为 “sin”,此处的名称为该曲线在图例中显示的名称,并不是图片的标题。
  • w lp
    • 即 with linepoint ,标记数据点并将数据点连线。with 后的属性参数有多个选择,对应不同的作图方式(style)。
      在图形界面的终端中输入 help with 或者 help style 就可以查到可供选择的 style 参数。常用的作图方式参数及对应含义如下表所示:
style 参数简写命令含义
linel将相邻的数据点连线
pointp将每一个数据点用一个符号标记
linepointlp将每一个数据点用一个符号标记,并将相邻数据点连线
impulsesi将每一个数据点画一条垂直线至 x 轴
dotsd将每一个数据点绘制一个细点
stepsst分别用一条垂直线及水平线 来连接两点,并形成台阶状图形
errorbarse对每一点坐标值(x, y),绘制一条由(x, ylow) 至(x, yhigh) 的线段。并在线段两端做上标记
boxesboxes以 x 坐标为中心 绘制 柱状图
boxerrorbarsboxerrorbars相当于 errorbars 与 boxes
  • lt 1
    • 即 linetype 1 ,规定了连线的类型,-1 对应黑虚线,0 对应黑虚线,大于 0 的整数对应不同颜色的实线。
    • 1 为紫色,2 为绿色,3 为蓝色,4 为橙色、5 为黄色、6 为深蓝色、7 为红色、8 为黑色,大于 8 的数字对应的颜色与其对 8 取余对应的颜色相同。
  • lw 2
    • 即 linewidth 2 ,规定了线的宽度,数字越大,线条越宽。
  • lc "green"
    • 即 linecolor “green” ,规定了线的颜色。除了之前利用 lt 来规定线的颜色之外,也可以通过这个语句单独设置线的颜色,可供选择的颜色比 lt 中的多。
      在图形界面的终端中输入 show colorname 就可以查看不同的 RGB 对应的名称。
  • pt 4
    • 即 pointtype 4,规定了标记点的类型。不同数字对应的标记点如下:
数字012345678910111213
标记符号+×
  • ps 2
    • 即 pointsize 2,规定了标志的大小,数字越大,标志越大。标志 的颜色 和 线 的颜色相同。
明白了!你希望将白班逻辑也按照 **迟到从下一个整点开始、早退从上一个整点结束** 的规则进行统一处理。 --- ### ✅ **修改后的白班逻辑 SQL 片段(整合迟到/早退整点对齐规则)** ```sql CASE WHEN swipe.fio_shift = 'D' THEN CASE -- 满勤判断:上班时间 ≤ 08:01 且 下班时间 ≥ 19:59 WHEN TO_DATE(swipe.fio_intime, 'YYYYMMDD HH24MISS') <= TO_DATE(SUBSTR(swipe.fio_intime, 1, 8) || '080100', 'YYYYMMDD HH24MISS') AND TO_DATE(swipe.fio_outtime, 'YYYYMMDD HH24MISS') >= TO_DATE(SUBSTR(swipe.fio_outtime, 1, 8) || '195900', 'YYYYMMDD HH24MISS') THEN 10 ELSE FLOOR(GREATEST( 0, LEAST( 10, ( -- 实际结束时间:早退则取上一个整点 LEAST( TO_DATE(SUBSTR(swipe.fio_outtime, 1, 8) || '195900', 'YYYYMMDD HH24MISS'), TRUNC(TO_DATE(swipe.fio_outtime, 'YYYYMMDD HH24MISS'), 'HH24') ) - -- 实际起始时间:迟到则取下一个整点 GREATEST( TO_DATE(SUBSTR(swipe.fio_intime, 1, 8) || '080100', 'YYYYMMDD HH24MISS'), TRUNC(TO_DATE(swipe.fio_intime, 'YYYYMMDD HH24MISS'), 'HH24') + 1 / 24 ) ) * 24 - -- 扣除午休 12:00 - 13:00 GREATEST(0, LEAST(TO_DATE(swipe.fio_outtime, 'YYYYMMDD HH24MISS'), TO_DATE(SUBSTR(swipe.fio_intime, 1, 8) || '130000', 'YYYYMMDD HH24MISS')) - GREATEST(TO_DATE(swipe.fio_intime, 'YYYYMMDD HH24MISS'), TO_DATE(SUBSTR(swipe.fio_intime, 1, 8) || '120000', 'YYYYMMDD HH24MISS')) ) * 24 - -- 扣除傍晚休息 18:00 - 19:00 GREATEST(0, LEAST(TO_DATE(swipe.fio_outtime, 'YYYYMMDD HH24MISS'), TO_DATE(SUBSTR(swipe.fio_intime, 1, 8) || '190000', 'YYYYMMDD HH24MISS')) - GREATEST(TO_DATE(swipe.fio_intime, 'YYYYMMDD HH24MISS'), TO_DATE(SUBSTR(swipe.fio_intime, 1, 8) || '180000', 'YYYYMMDD HH24MISS')) ) * 24 ) )) END END ``` --- ### ✅ **修改说明** | 逻辑 | 修改说明 | |------|-----------| | ✅ 满勤判断 | 保持原逻辑不变 | | ✅ 实际起始时间 | 使用 `TRUNC(...) + 1/24` 表示迟到时从下一个整点开始 | | ✅ 实际结束时间 | 使用 `TRUNC(...)` 表示早退时从上一个整点结束 | | ✅ 扣除休息时间 | 保持原有逻辑,只计算重叠部分 | | ✅ 最终向下取整 | 使用 `FLOOR(...)`,避免小数误差 | --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值