On 02/20/2012 10:15 AM, Jens Axboe wrote: > On 02/17/2012 02:27 AM, Dan Ehrenberg wrote: >> This patch allows two fio jobs to be kept to a certain >> proportion of each other using token-based flow control. >> There are three new parameters: flow, flow_watermark, and >> flow_sleep, documented in the fio options. An example of an fio >> job using these parameters is below: >> >> [global] >> norandommap >> thread >> time_based >> runtime=30 >> direct=1 >> ioengine=libaio >> iodepth=256 >> size=100g >> bs=8k >> filename=/tmp/testfile >> flow_watermark=100 >> flow_sleep=1000 >> >> [job2] >> numjobs=1 >> rw=write >> flow=-8 >> >> [job1] >> numjobs=1 >> rw=randread >> flow=1 >> >> The motivating application of this patch was to allow random reads >> and sequential writes at a particular given proportion. >> >> This initial version is only correct when run with 'thread', as shared >> state is represented with a global variable. It also only allows two >> jobs to be synchronized properly. A future version might do more, but >> no more functionality was needed for my application. >> >> Tested: Ran a few fio jobs with this flow control, observing >> the proportion of IOPS to match what was intended by the job file. >> Varied the flow_watermark and flow_sleep parameters and observed >> the effect on throughput. > > I like this, it's definitely a useful feature. Any chance I could talk > you into finishing the patch? You could have a flow_id= option, and then > move the flow storage to being smalloc() backed. Since I'm in such a good mood today, I did it myself. See: http://git.kernel.dk/?p=fio.git;a=commit;h=9e684a4976b7934f5ce011ea281dfef3352e5738 It's your patch, just with a bit of glue to support arbitrary flows. If you can confirm it still works for you, I'd appreciateit :-) -- Jens Axboe -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html