java 实现磁盘顺序写_linux磁盘顺序写、随机写的方法

一、前言

● 随机写会导致磁头不停地换道,造成效率的极大降低;顺序写磁头几乎不用换道,或者换道的时间很短

● 本文来讨论一下两者具体的差别以及相应的内核调用

二、环境准备

组件

版本

OS

Ubuntu 16.04.4 LTS

fio

2.2.10

三、fio介绍

通过fio测试,能够反映在读写中的状态,我们需要重点关注fio的输出报告中的几个关键指标:

slat :是指从 I/O 提交到实际执行 I/O 的时长(Submission latency)

clat :是指从 I/O 提交到 I/O 完成的时长(Completion latency)

lat :指的是从 fio 创建 I/O 到 I/O 完成的总时长

bw :吞吐量

iops :每秒 I/O 的次数

四、同步写测试

(1)同步随机写

主要采用fio作为测试工具,为了能够看到系统调用,使用strace工具,命令看起来是这样:

先来测试一个随机写

strace -f -tt -o /tmp/randwrite.log -D fio -name=randwrite -rw=randwrite \

-direct=1 -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/tmp/test.db

提取关键信息

root@wilson-ubuntu:~# strace -f -tt -o /tmp/randwrite.log -D fio -name=randwrite -rw=randwrite \

> -direct=1 -bs=4k -size=1G -numjobs=1 -group_reporting -filename=/tmp/test.db

randwrite: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1

fio-2.2.10

Starting 1 process

...

randwrite: (groupid=0, jobs=1): err= 0: pid=26882: Wed Aug 14 10:39:02 2019

write: io=1024.0MB, bw=52526KB/s, iops=13131, runt= 19963msec

clat (usec): min=42, max=18620, avg=56.15, stdev=164.79

lat (usec): min=42, max=18620, avg=56.39, stdev=164.79

...

bw (KB /s): min=50648, max=55208, per=99.96%, avg=52506.03, stdev=1055.83

...

Run status group 0 (all jobs):

WRITE: io=1024.0MB, aggrb=52525KB/s, minb=52525KB/s, maxb=52525KB/s, mint=19963msec, maxt=19963msec

Disk stats (read/write):

...

sda: ios=0/262177, merge=0/25, ticks=0/7500, in_queue=7476, util=36.05%

列出了我们需要重点关注的信息:

(1)clat ,平均时长56ms左右

(2)lat ,平均时长56ms左右

(3)bw ,吞吐量,大概在52M左右

再来看内核调用信息:

root@wilson-ubuntu:~# more /tmp/randwrite.log

...

26882 10:38:41.919904 lseek(3, 665198592, SEEK_SET) = 665198592

26882 10:38:41.919920 write(3, "\220\240@\6\371\341\277>\0\200\36\31\0\0\0\0\202\2\7\320\343\6H\26P\340\277\370\330\30e\30"..., 4096) = 4096

26882 10:38:41.919969 lseek(3, 4313088, SEEK_SET) = 4313088

26882 10:38:41.919985 write(3, "\220\240@\6\371\341\

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值