我用fio来衡量我的SSD。但是,当指定了fsync=1 (在每个write()参数之后将脏缓冲区同步到磁盘)时,我对报告的延迟感到困惑。
$ fio --name=test_seq_write --filename=test_seq --size=2G --readwrite=write --fsync=1
test_seq_write: (g=0): rw=write, bs=4K-4K/4K-4K/4K-4K, ioengine=sync, iodepth=1
fio-2.1.3
Starting 1 process
test_seq_write: Laying out IO file(s) (1 file(s) / 2048MB)
Jobs: 1 (f=1): [W] [100.0% done] [0KB/31968KB/0KB /s] [0/7992/0 iops] [eta 00m:00s]
test_seq_write: (groupid=0, jobs=1): err= 0: pid=10994: Thu Oct 26 09:09:19 2017
write: io=2048.0MB, bw=35647KB/s, iops=8911, runt= 58831msec
clat (usec): min=2, max=1099, avg= 9.42, stdev=18.19
lat (usec): min=2, max=1099, avg= 9.56, stdev=18.28在这里,iops是8911,所以延迟应该在100 is左右。然而,报告的延迟是9us。我很好奇,fio包括fsync的时间吗?我在看外国医生,但没有找到任何解释。
发布于 2018-02-22 11:37:30
Fio3.5或更高版本现在能够报告fsync延迟!在执行符合以下所有条件的工作负载时,您将看到此信息:
fsync/fdatasync/sync_file_range集--output-format是正常的(将有fsync/fdat异步/sync_file_range部分)或json/json+ (值记录在“同步”方向下)。下面是显示fsync延迟的正常输出的一个示例:
$ ./fio --filename=/tmp/fio.tmp --size=1m --bs=512 --name=go --rw=write --fdatasync=1
go: (g=0): rw=write, bs=(R) 512B-512B, (W) 512B-512B, (T) 512B-512B, ioengine=psync, iodepth=1
[...]
go: (groupid=0, jobs=1): err= 0: pid=26958: Wed Feb 21 14:06:11 2018
write: IOPS=512k, BW=250MiB/s (262MB/s)(1024KiB/4msec)
clat (nsec): min=673, max=12144, avg=709.40, stdev=260.94
[...]
lat (usec) : 2=0.05%, 4=0.05%, 20=0.05%
fsync/fdatasync/sync_file_range:
sync (nsec): min=353, max=5307, avg=364.78, stdev=115.66
sync percentiles (nsec):
| 1.00th=[ 358], 5.00th=[ 358], 10.00th=[ 358], 20.00th=[ 362],
| 30.00th=[ 362], 40.00th=[ 362], 50.00th=[ 362], 60.00th=[ 362],
| 70.00th=[ 362], 80.00th=[ 362], 90.00th=[ 366], 95.00th=[ 366],
| 99.00th=[ 370], 99.50th=[ 370], 99.90th=[ 402], 99.95th=[ 2064],
| 99.99th=[ 5280]
[...]因此,在回答你的问题时:
我很好奇,fio包括
fsync的时间吗?
在fio 3.3和更低的中,没有(参见https://stackoverflow.com/a/46968852/9109338中的更新)。在fio 3.5和更高版本中,类型的fsync - fio在lat/clat延迟中不包含fsync (毕竟它不知道应该将fsync延迟归因于什么,因为它无法检索该信息),但是它自己帐户和报告fsync延迟。
https://stackoverflow.com/questions/46952571
复制相似问题