fio
fio copied to clipboard
In client mode per_job_logs=0 only records one job's data in .log file
When using fio 3.20 in server/client mode with per_job_logs=0, fio only records the information of one job in logs like the write_iops_log whereas the correct thing happens in non-client mode.
# issue1032.fio
[global]
per_job_logs=0
ioengine=null
[issue1032]
size=1M
numjobs=2
write_iops_log=issue1032
$ rm -f issue1032_*
$ ./fio --minimal issue1032.fio
[...]
$ wc -l issue1032_iops.log
512 issue1032_iops.log
$ ./fio --server &
[...]
$ rm -f issue1032_*
$ ./fio --minimal --client=localhost issue1032.fio
[...]
$ wc -l issue1032_iops.log.localhost
256 issue1032_iops.log.localhost
Hello @derek-wan,
Are you really using fio 3.2.0? If so can you reproduce the problem with the latest fio because we (upstream) only support the latest fio. See https://github.com/axboe/fio/releases for which version we're up to.
Hello @sitsofe ,
Yes,I use latest fio release 3.2.0,FIO version information is as follows: root@wz02:/jetlake_test# fio --version fio-3.20
Attach write_xx_log: write_log_20200707.tar.gz
Yes,I use latest fio release 3.2.0
I see you meant 3.20 (the absence of the extra point is important :-) ) Thanks for following up.
@derek-wan in that case can you cut your job file down such that it contains the bare minimum options that reproduce the file? Also can you make all parameters static and not use environment variables so the jobfile is standalone. Thanks!
(e.g. does a job like:
[global]
group_reporting
[small]
rw=write
size=1M
reproduce the problem?)
Hello @derek-wan,
Are you really using fio 3.2.0? If so can you reproduce the problem with the latest fio because we (upstream) only support the latest fio. See https://github.com/axboe/fio/releases for which version we're up to.
Hello @sitsofe
The simplified job file is as follows: [global] directory=/jetlake_test per_job_logs=0 group_reporting
[small] rw=write size=10M numjobs=16 iodepth=8 write_iops_log=write
The command is as follows: /usr/local/bin/fio --client=192.168.1.188 job.file
The results are as follows:
root@wz02:/jetlake_test# /usr/local/bin/fio --client=192.168.1.188 job.file
hostname=wz02, be=0, 64-bit, os=Linux, arch=x86-64, fio=fio-3.20, flags=0
Run status group 0 (all jobs): WRITE: bw=503MiB/s (528MB/s), 503MiB/s-503MiB/s (528MB/s-528MB/s), io=160MiB (168MB), run=318-318msec root@wz02:/jetlake_test# ls 192.168.1.188.small.0.0 192.168.1.188.small.11.0 192.168.1.188.small.14.0 192.168.1.188.small.3.0 192.168.1.188.small.6.0 192.168.1.188.small.9.0 192.168.1.188.small.1.0 192.168.1.188.small.12.0 192.168.1.188.small.15.0 192.168.1.188.small.4.0 192.168.1.188.small.7.0 job.file 192.168.1.188.small.10.0 192.168.1.188.small.13.0 192.168.1.188.small.2.0 192.168.1.188.small.5.0 192.168.1.188.small.8.0 write_iops.log.192.168.1.188
Hi @derek-wan . Initially you mentioned the group_reporting wasn't valid could you elaborate on just how it is not valid?
Hi @derek-wan . Initially you mentioned the group_reporting wasn't valid could you elaborate on just how it is not valid?
Using group_ Reporting, when numjob is 16, the parameter write_ iops_ Log generated file write_ iops.log.192.168.1.188 will contain the raw data of all jobs, but the file actually contains data of only one job。
The file write_ iops.log.192.168.1.188 is packaged as write_ iops_ log20200707. tar.gz。
Is there any progress on this issue? I meet the same problem for this parameter.
[root@localhost AutoDiskTest]# fio -v
fio-3.16
- fio command is
{0} -direct=1 -filename={1} -iodepth={2} -bs={3} -rw={4} -runtime={5} --numjobs={6} --time_based --group_reporting --thread -name={7} -ioengine={8} --per_job_logs=0 --write_iops_log={9} --log_avg_msec=2000 > {9}.log - fio result files: 1.
sdb_libaio_randread_128k_32_4_iops.log, 2.sdb_libaio_randread_128k_32_4.log
sdb_libaio_randread_128k_32_4_iops.log content
2000, 40, 0, 0 4000, 46, 0, 0 6000, 47, 0, 0 8000, 48, 0, 0 10000, 45, 0, 0 12000, 44, 0, 0 14000, 44, 0, 0 ... 2000, 48, 0, 0 4000, 47, 0, 0 6000, 41, 0, 0 8000, 48, 0, 0 10000, 45, 0, 0 12001, 44, 0, 0 14001, 46, 0, 0 16000, 45, 0, 0 18000, 45, 0, 0 20000, 44, 0, 0 ...
use --per_job_logs=0, four jobs iops record in one file, But not 4 jobs IOPS summation. Pls help make sure whether have a parameter to record all jobs' iops summation. I just want to use fio2gnuplot to gnerate png.
@hualong1009 I'm not aware of anyone actively working on this but would you like to have a try?
still encounter this issue on 3.35
(2023.10.06)(10:21 AM)[BASH]
jqt@repo:[~/performance-deltas] $
>> fio --version
fio-3.35
(2023.10.06)(10:22 AM)[BASH]
jqt@repo:[~/performance-deltas] $
>> cat seq-read.json | grep -A 20 128KQ32
"jobname" : "128KQ32",
"groupid" : 50,
"error" : 0,
"eta" : 0,
"elapsed" : 101460,
"job options" : {
"numjobs" : "8",
"iodepth" : "4",
"bs" : "128K",
"ba" : "128K",
"runtime" : "30m",
"write_bw_log" : "2217379BCB08/seq-read/Q32/128K",
"write_iops_log" : "2217379BCB08/seq-read/Q32/128K",
"write_lat_log" : "2217379BCB08/seq-read/Q32/128K",
"write_hist_log" : "2217379BCB08/seq-read/Q32/128K"
},
"read" : {
"io_bytes" : 10090103046144,
"io_kbytes" : 9853616256,
"bw_bytes" : 5605609689,
"bw" : 5474228,
(2023.10.06)(10:22 AM)[BASH]
jqt@repo:[~/performance-deltas] $
>> head -n 10 seq-read/Q32/128K_bw.log
1003, 682113, 0, 0, 0
2003, 693045, 0, 0, 0
3003, 690738, 0, 0, 0
4003, 681897, 0, 0, 0
5004, 687744, 0, 0, 0
6003, 687279, 0, 0, 0
7004, 675968, 0, 0, 0
8004, 674722, 0, 0, 0
9003, 682794, 0, 0, 0
10004, 685568, 0, 0, 0
(2023.10.06)(10:27 AM)[BASH]
jqt@repo:[~/performance-deltas] $
>> head -n 20 seq-read.fio
[global]
max_latency=8s
percentile_list=1:5:10:20:30:40:50:60:70:80:90:95:99:99.9:99.99:99.999:99.9999
readwrite=read
ioengine=libaio
randrepeat=0
norandommap
refill_buffers=0
direct=1
group_reporting=1
log_avg_msec=1000
log_hist_msec=1000
bwavgtime=1000
iopsavgtime=1000
per_job_logs=0
disk_util=1
time_based
ramp_time=10
[128KQ32]
stonewall
numjobs=8
iodepth=4
bs=128K
ba=128K
runtime=30m
write_bw_log=seq-read/Q32/128K
write_iops_log=seq-read/Q32/128K
write_lat_log=seq-read/Q32/128K
write_hist_log=seq-read/Q32/128K
The problem is in client.c:fio_client_handle_iolog(). When per_job_logs=0, the log files all have the same filename for each job. The data for each job is transferred from the server to the client, but is overwritten with each subsequent transmission. So the resulting log contains only the measurements for the last job. To fix this we need to add an append flag to the protocol so that the client opens log files in append mode.
The patch at https://git.kernel.dk/cgit/fio/commit/?id=9af6c387191423eefee821e4087987350eaa5e6a should fix the original issue described in 2020. It's not clear to me that the subsequent reports are the same issue.